wiki-viewer 1.14.1 → 2.0.0

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 (559) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  4. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  5. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  12. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  13. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  14. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  16. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/standalone/.next/server/app/api/agent/activity/route.js +6 -6
  20. package/.next/standalone/.next/server/app/api/agent/activity/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/agent/events/[...path]/route.js +8 -8
  22. package/.next/standalone/.next/server/app/api/agent/events/[...path]/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/agent/files/[...path]/route.js +9 -9
  24. package/.next/standalone/.next/server/app/api/agent/files/[...path]/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/agent/fs/file/[...path]/route.js +8 -8
  26. package/.next/standalone/.next/server/app/api/agent/fs/file/[...path]/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/agent/fs/ls/[[...path]]/route.js +8 -8
  28. package/.next/standalone/.next/server/app/api/agent/fs/ls/[[...path]]/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/agent/fs/move/route.js +8 -8
  30. package/.next/standalone/.next/server/app/api/agent/fs/move/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/agent/fs/search/route.js +9 -9
  32. package/.next/standalone/.next/server/app/api/agent/fs/search/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/agent/internal/span/route.js +8 -8
  34. package/.next/standalone/.next/server/app/api/agent/internal/span/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/agent/settings/route.js +7 -7
  36. package/.next/standalone/.next/server/app/api/agent/settings/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/agent/sidecar/[...path]/route.js +6 -6
  38. package/.next/standalone/.next/server/app/api/agent/sidecar/[...path]/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/app-proxy/[...path]/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/assets/[...path]/route.js +5 -5
  41. package/.next/standalone/.next/server/app/api/assets/[...path]/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/share/[token]/route.js +6 -5
  43. package/.next/standalone/.next/server/app/api/share/[token]/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/share/route.js +4 -4
  45. package/.next/standalone/.next/server/app/api/share/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/system/browse/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/system/clear-root/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/system/reveal/route.js +6 -6
  49. package/.next/standalone/.next/server/app/api/system/reveal/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/system/root-status/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/system/set-root/route.js +6 -5
  52. package/.next/standalone/.next/server/app/api/system/set-root/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/open/route.js +5 -4
  54. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/open/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/refresh/route.js +6 -5
  56. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/refresh/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/route.js +5 -4
  58. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/route.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/api/system/workspaces/route.js +7 -6
  60. package/.next/standalone/.next/server/app/api/system/workspaces/route.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/api/upload/[...path]/route.js +5 -5
  62. package/.next/standalone/.next/server/app/api/upload/[...path]/route.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/api/wiki/app/route.js +7 -7
  64. package/.next/standalone/.next/server/app/api/wiki/app/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/wiki/backlinks/route.js +7 -7
  66. package/.next/standalone/.next/server/app/api/wiki/backlinks/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/wiki/content/route.js +7 -7
  68. package/.next/standalone/.next/server/app/api/wiki/content/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/api/wiki/download/route.js +6 -6
  70. package/.next/standalone/.next/server/app/api/wiki/download/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/wiki/file/route.js +5 -5
  72. package/.next/standalone/.next/server/app/api/wiki/file/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/wiki/folder/route.js +5 -5
  74. package/.next/standalone/.next/server/app/api/wiki/folder/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/wiki/git-branches/route.js +4 -4
  76. package/.next/standalone/.next/server/app/api/wiki/git-branches/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/wiki/git-checkout/route.js +6 -6
  78. package/.next/standalone/.next/server/app/api/wiki/git-checkout/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/wiki/git-diff/route.js +4 -4
  80. package/.next/standalone/.next/server/app/api/wiki/git-diff/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/wiki/git-file-info/route.js +4 -4
  82. package/.next/standalone/.next/server/app/api/wiki/git-file-info/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/wiki/git-history/route.js +4 -4
  84. package/.next/standalone/.next/server/app/api/wiki/git-history/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/wiki/git-pull/route.js +8 -8
  86. package/.next/standalone/.next/server/app/api/wiki/git-pull/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/wiki/move/route.js +6 -6
  88. package/.next/standalone/.next/server/app/api/wiki/move/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/wiki/new-file/route.js +5 -5
  90. package/.next/standalone/.next/server/app/api/wiki/new-file/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/wiki/outlinks/route.js +7 -7
  92. package/.next/standalone/.next/server/app/api/wiki/outlinks/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/wiki/page/route.js +5 -5
  94. package/.next/standalone/.next/server/app/api/wiki/page/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/wiki/presence/route.js +6 -6
  96. package/.next/standalone/.next/server/app/api/wiki/presence/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/wiki/route.js +5 -5
  98. package/.next/standalone/.next/server/app/api/wiki/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/wiki/search/route.js +5 -5
  100. package/.next/standalone/.next/server/app/api/wiki/search/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/wiki/slugs/route.js +5 -5
  102. package/.next/standalone/.next/server/app/api/wiki/slugs/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/wiki/upload/route.js +5 -5
  104. package/.next/standalone/.next/server/app/api/wiki/upload/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/wiki/watch/route.js +5 -5
  106. package/.next/standalone/.next/server/app/api/wiki/watch/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/index.html +1 -1
  108. package/.next/standalone/.next/server/app/index.rsc +3 -3
  109. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  110. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  111. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  112. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  113. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  114. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-jzw2_._.js +3 -0
  119. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.-oq-7._.js +3 -0
  120. package/.next/standalone/.next/server/chunks/[root-of-the-server]__000spch._.js +3 -0
  121. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01oin-a._.js +3 -0
  122. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01qcera._.js +16 -0
  123. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02.uul~._.js +3 -0
  124. package/.next/standalone/.next/server/chunks/[root-of-the-server]__024967n._.js +3 -0
  125. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06booxp._.js +3 -0
  126. package/.next/standalone/.next/server/chunks/[root-of-the-server]__071_pmz._.js +3 -0
  127. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_0bqpg._.js +3 -0
  128. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_1f2cw._.js +3 -0
  129. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a6j6r4._.js +3 -0
  130. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0aoqat-._.js +3 -0
  131. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0as-u6z._.js +3 -0
  132. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bvtbax._.js +3 -0
  133. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c-ee48._.js +5 -0
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e_9pc5._.js +3 -0
  135. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0esmskc._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fshk._._.js +20 -0
  137. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fu72o7._.js +3 -0
  138. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0k9mili._.js +3 -0
  139. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l-wu5u._.js +3 -0
  140. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lvz22t._.js +20 -0
  141. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0n-chxk._.js +16 -0
  142. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0n9zdf0._.js +3 -0
  143. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nmx3k2._.js +12 -0
  144. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nzlmkb._.js +3 -0
  145. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o0v6hf._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0s38pid._.js +3 -0
  147. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0s_8poz._.js +3 -0
  148. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0sfrx~.._.js +3 -0
  149. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0sggstu._.js +3 -0
  150. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0u81k~2._.js +3 -0
  151. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uibxf_._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wfv_by._.js +3 -0
  153. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wlj-yw._.js +3 -0
  154. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w~__xz._.js +3 -0
  155. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yat~ul._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yxauu6._.js +3 -0
  157. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zbkgnr._.js +3 -0
  158. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zv_j05._.js +3 -0
  159. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~rntxj._.js +3 -0
  160. package/.next/standalone/.next/server/chunks/src_lib_search_0d-_j3u._.js +4 -4
  161. package/.next/standalone/.next/server/chunks/src_lib_search_0ymmp0c._.js +3 -3
  162. package/.next/standalone/.next/server/chunks/src_lib_workspaces_ts_0qon40u._.js +4 -0
  163. package/.next/standalone/.next/server/chunks/ssr/{0~w0_katex_dist_katex_mjs_029cdbg._.js → 0~w0_katex_dist_katex_mjs_0s4yb1t._.js} +1 -1
  164. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0z41nrr._.js → [root-of-the-server]__10te1ye._.js} +2 -2
  165. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_13p348f._.js → node_modules__pnpm_0-a_zjq._.js} +1 -1
  166. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0gos._c._.js → node_modules__pnpm_02l_1_8._.js} +1 -1
  167. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0ru1i2-._.js → node_modules__pnpm_03rzttw._.js} +2 -2
  168. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_08xpp3w._.js → node_modules__pnpm_04frxp9._.js} +1 -1
  169. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0b8odbc._.js → node_modules__pnpm_057-t6m._.js} +1 -1
  170. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0f_n_zp._.js → node_modules__pnpm_05_oahi._.js} +1 -1
  171. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0~i3a.i._.js → node_modules__pnpm_05ans~m._.js} +1 -1
  172. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0i2m0b.._.js → node_modules__pnpm_06-2ia.._.js} +2 -2
  173. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0aha1~u._.js → node_modules__pnpm_086.ow4._.js} +1 -1
  174. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0w.kwue._.js → node_modules__pnpm_0cahog3._.js} +1 -1
  175. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0e0r_qk._.js → node_modules__pnpm_0cxanql._.js} +2 -2
  176. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0ajqqlq._.js → node_modules__pnpm_0e09gmf._.js} +1 -1
  177. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0hzzx9d._.js → node_modules__pnpm_0eqjo2f._.js} +1 -1
  178. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_02bje_g._.js → node_modules__pnpm_0f-yazg._.js} +1 -1
  179. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0xk042~._.js → node_modules__pnpm_0iu44jv._.js} +1 -1
  180. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_11ede0p._.js → node_modules__pnpm_0jh8q66._.js} +2 -2
  181. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0k-7uzm._.js → node_modules__pnpm_0m39f~t._.js} +1 -1
  182. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0xr.ztu._.js → node_modules__pnpm_0ma-8l.._.js} +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0i6_kfe._.js → node_modules__pnpm_0met6sx._.js} +2 -2
  184. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_04v1_ty._.js → node_modules__pnpm_0mtrsi0._.js} +2 -2
  185. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0607~kg._.js → node_modules__pnpm_0n_swwn._.js} +2 -2
  186. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0t4l89_._.js → node_modules__pnpm_0ndyy93._.js} +1 -1
  187. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0-_58b8._.js → node_modules__pnpm_0s-cj7c._.js} +1 -1
  188. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0y2h_cz._.js → node_modules__pnpm_0tr41-t._.js} +1 -1
  189. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_08edl1n._.js → node_modules__pnpm_0u.uija._.js} +1 -1
  190. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0026mgr._.js → node_modules__pnpm_0wiyn6d._.js} +1 -1
  191. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_09o_spj._.js → node_modules__pnpm_0ygzt82._.js} +1 -1
  192. package/.next/standalone/.next/server/chunks/ssr/src_app_page_tsx_0ss2.w7._.js +2 -2
  193. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  194. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  195. package/.next/standalone/.next/server/pages/404.html +1 -1
  196. package/.next/standalone/.next/server/pages/500.html +1 -1
  197. package/.next/standalone/.next/static/chunks/0ci7khnv7i~7_.js +17 -0
  198. package/.next/standalone/.next/static/chunks/0sx~65~lg4mgl.css +5 -0
  199. package/.next/standalone/package.json +1 -1
  200. package/README.md +88 -17
  201. package/bin/postbuild.js +21 -0
  202. package/bin/wiki-viewer.js +198 -6
  203. package/package.json +1 -1
  204. package/.next/standalone/.github/workflows/publish.yml +0 -37
  205. package/.next/standalone/.handoffs/archive/handoff-20260612-113332.md +0 -98
  206. package/.next/standalone/.handoffs/archive/handoff-20260612-141032.md +0 -73
  207. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-.y6im._.js +0 -3
  208. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-3_t2y._.js +0 -3
  209. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-kjkzt._.js +0 -3
  210. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-puax4._.js +0 -4
  211. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01h996g._.js +0 -3
  212. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0329ktu._.js +0 -3
  213. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03_xj4r._.js +0 -3
  214. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05398dt._.js +0 -4
  215. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06lfvxh._.js +0 -3
  216. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06w0aet._.js +0 -3
  217. package/.next/standalone/.next/server/chunks/[root-of-the-server]__070_p2a._.js +0 -4
  218. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0905hi1._.js +0 -21
  219. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0aa63~j._.js +0 -5
  220. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0avcplk._.js +0 -4
  221. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b8_kyo._.js +0 -16
  222. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bticq1._.js +0 -3
  223. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bwevvu._.js +0 -3
  224. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c__k3q._.js +0 -4
  225. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cp~z4x._.js +0 -3
  226. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fmdv9h._.js +0 -20
  227. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0h0qbwr._.js +0 -3
  228. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jk~oyi._.js +0 -3
  229. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ndq77b._.js +0 -3
  230. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nvgpuk._.js +0 -3
  231. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ocvng2._.js +0 -3
  232. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ps4h~.._.js +0 -3
  233. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q7jqwp._.js +0 -12
  234. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qew~6p._.js +0 -3
  235. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0s_9f-a._.js +0 -3
  236. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uv7b8u._.js +0 -3
  237. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uv8.9i._.js +0 -3
  238. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vfe2io._.js +0 -4
  239. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w11kjy._.js +0 -3
  240. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wc-.e4._.js +0 -3
  241. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ymovmp._.js +0 -3
  242. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~c6ouv._.js +0 -3
  243. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~rhs0u._.js +0 -16
  244. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10h9tid._.js +0 -3
  245. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10yk-u1._.js +0 -3
  246. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11105ew._.js +0 -3
  247. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11a3dhw._.js +0 -3
  248. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13420tt._.js +0 -3
  249. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13h~pdf._.js +0 -3
  250. package/.next/standalone/.next/static/chunks/02kg.lbkfi1yc.css +0 -5
  251. package/.next/standalone/.next/static/chunks/0rcwd6-.iu~nd.js +0 -17
  252. package/.next/standalone/.pi/ownership.json +0 -3
  253. package/.next/standalone/AGENTS.md +0 -114
  254. package/.next/standalone/DESIGN.md +0 -521
  255. package/.next/standalone/README.md +0 -821
  256. package/.next/standalone/TODO.md +0 -20
  257. package/.next/standalone/agents/bootstrap-prompt.md +0 -14
  258. package/.next/standalone/agents/wiki-viewer-skill/SKILL.md +0 -456
  259. package/.next/standalone/bin/postbuild.js +0 -78
  260. package/.next/standalone/bin/wiki-viewer.js +0 -922
  261. package/.next/standalone/certificates/localhost-key.pem +0 -28
  262. package/.next/standalone/certificates/localhost.pem +0 -24
  263. package/.next/standalone/docs/agent-collab-plan.md +0 -1615
  264. package/.next/standalone/docs/agent-collab-v2-plan.md +0 -771
  265. package/.next/standalone/docs/agent-fs-plan.md +0 -232
  266. package/.next/standalone/docs/editorial-skin-spec.md +0 -242
  267. package/.next/standalone/docs/file-vs-collab-authority.md +0 -124
  268. package/.next/standalone/docs/mobile-readiness-spec.md +0 -229
  269. package/.next/standalone/docs/workspacing-plan.md +0 -364
  270. package/.next/standalone/packages/wiki-viewer-mcp/README.md +0 -195
  271. package/.next/standalone/packages/wiki-viewer-mcp/bench-e2e.mjs +0 -166
  272. package/.next/standalone/packages/wiki-viewer-mcp/bench-latency.mjs +0 -87
  273. package/.next/standalone/packages/wiki-viewer-mcp/bench-payload.mjs +0 -45
  274. package/.next/standalone/packages/wiki-viewer-mcp/dist/http-client.js +0 -331
  275. package/.next/standalone/packages/wiki-viewer-mcp/dist/index.js +0 -531
  276. package/.next/standalone/packages/wiki-viewer-mcp/dist/register.js +0 -94
  277. package/.next/standalone/packages/wiki-viewer-mcp/dist/state-cache.js +0 -28
  278. package/.next/standalone/packages/wiki-viewer-mcp/package-lock.json +0 -1716
  279. package/.next/standalone/packages/wiki-viewer-mcp/package.json +0 -41
  280. package/.next/standalone/packages/wiki-viewer-mcp/src/http-client.ts +0 -459
  281. package/.next/standalone/packages/wiki-viewer-mcp/src/index.ts +0 -638
  282. package/.next/standalone/packages/wiki-viewer-mcp/src/register.ts +0 -144
  283. package/.next/standalone/packages/wiki-viewer-mcp/src/state-cache.ts +0 -55
  284. package/.next/standalone/packages/wiki-viewer-mcp/tsconfig.json +0 -19
  285. package/.next/standalone/pnpm-lock.yaml +0 -6697
  286. package/.next/standalone/pnpm-workspace.yaml +0 -8
  287. package/.next/standalone/postcss.config.mjs +0 -2
  288. package/.next/standalone/src/app/api/agent/activity/route.ts +0 -59
  289. package/.next/standalone/src/app/api/agent/admin/agents/[agentId]/revoke/route.ts +0 -40
  290. package/.next/standalone/src/app/api/agent/admin/agents/route.ts +0 -33
  291. package/.next/standalone/src/app/api/agent/admin/registrations/[regId]/approve/route.ts +0 -83
  292. package/.next/standalone/src/app/api/agent/admin/registrations/[regId]/deny/route.ts +0 -36
  293. package/.next/standalone/src/app/api/agent/admin/registrations/route.ts +0 -27
  294. package/.next/standalone/src/app/api/agent/events/[...path]/route.ts +0 -148
  295. package/.next/standalone/src/app/api/agent/files/[...path]/route.ts +0 -219
  296. package/.next/standalone/src/app/api/agent/fs/file/[...path]/route.ts +0 -446
  297. package/.next/standalone/src/app/api/agent/fs/ls/[[...path]]/route.ts +0 -152
  298. package/.next/standalone/src/app/api/agent/fs/move/route.ts +0 -130
  299. package/.next/standalone/src/app/api/agent/fs/search/route.ts +0 -272
  300. package/.next/standalone/src/app/api/agent/internal/span/route.ts +0 -121
  301. package/.next/standalone/src/app/api/agent/register/[regId]/route.ts +0 -50
  302. package/.next/standalone/src/app/api/agent/register/route.ts +0 -118
  303. package/.next/standalone/src/app/api/agent/settings/route.ts +0 -34
  304. package/.next/standalone/src/app/api/agent/settings/token/regenerate/route.ts +0 -20
  305. package/.next/standalone/src/app/api/agent/sidecar/[...path]/route.ts +0 -53
  306. package/.next/standalone/src/app/api/agents/install/route.ts +0 -143
  307. package/.next/standalone/src/app/api/agents/skill/route.ts +0 -20
  308. package/.next/standalone/src/app/api/agents/skill.tar.gz/route.ts +0 -87
  309. package/.next/standalone/src/app/api/app-proxy/[...path]/route.ts +0 -247
  310. package/.next/standalone/src/app/api/assets/[...path]/route.ts +0 -75
  311. package/.next/standalone/src/app/api/auth/[...all]/route.ts +0 -7
  312. package/.next/standalone/src/app/api/owner/init/route.ts +0 -14
  313. package/.next/standalone/src/app/api/share/[token]/route.ts +0 -269
  314. package/.next/standalone/src/app/api/share/route.ts +0 -127
  315. package/.next/standalone/src/app/api/system/admins/route.ts +0 -103
  316. package/.next/standalone/src/app/api/system/auth-config/route.ts +0 -22
  317. package/.next/standalone/src/app/api/system/auth-settings/route.ts +0 -86
  318. package/.next/standalone/src/app/api/system/browse/route.ts +0 -82
  319. package/.next/standalone/src/app/api/system/clear-root/route.ts +0 -16
  320. package/.next/standalone/src/app/api/system/config/route.ts +0 -14
  321. package/.next/standalone/src/app/api/system/pins/route.ts +0 -38
  322. package/.next/standalone/src/app/api/system/reveal/route.ts +0 -36
  323. package/.next/standalone/src/app/api/system/root-status/route.ts +0 -13
  324. package/.next/standalone/src/app/api/system/set-root/route.ts +0 -53
  325. package/.next/standalone/src/app/api/system/users/route.ts +0 -120
  326. package/.next/standalone/src/app/api/system/workspaces/[id]/open/route.ts +0 -34
  327. package/.next/standalone/src/app/api/system/workspaces/[id]/refresh/route.ts +0 -32
  328. package/.next/standalone/src/app/api/system/workspaces/[id]/route.ts +0 -78
  329. package/.next/standalone/src/app/api/system/workspaces/route.ts +0 -128
  330. package/.next/standalone/src/app/api/upload/[...path]/route.ts +0 -85
  331. package/.next/standalone/src/app/api/wiki/app/route.ts +0 -60
  332. package/.next/standalone/src/app/api/wiki/backlinks/route.ts +0 -29
  333. package/.next/standalone/src/app/api/wiki/content/route.ts +0 -159
  334. package/.next/standalone/src/app/api/wiki/download/route.ts +0 -100
  335. package/.next/standalone/src/app/api/wiki/file/route.ts +0 -57
  336. package/.next/standalone/src/app/api/wiki/folder/route.ts +0 -34
  337. package/.next/standalone/src/app/api/wiki/git-branches/route.ts +0 -32
  338. package/.next/standalone/src/app/api/wiki/git-checkout/route.ts +0 -45
  339. package/.next/standalone/src/app/api/wiki/git-diff/route.ts +0 -33
  340. package/.next/standalone/src/app/api/wiki/git-file-info/route.ts +0 -27
  341. package/.next/standalone/src/app/api/wiki/git-history/route.ts +0 -27
  342. package/.next/standalone/src/app/api/wiki/git-pull/route.ts +0 -48
  343. package/.next/standalone/src/app/api/wiki/move/route.ts +0 -61
  344. package/.next/standalone/src/app/api/wiki/new-file/route.ts +0 -56
  345. package/.next/standalone/src/app/api/wiki/outlinks/route.ts +0 -76
  346. package/.next/standalone/src/app/api/wiki/page/route.ts +0 -92
  347. package/.next/standalone/src/app/api/wiki/presence/route.ts +0 -56
  348. package/.next/standalone/src/app/api/wiki/route.ts +0 -116
  349. package/.next/standalone/src/app/api/wiki/search/route.ts +0 -44
  350. package/.next/standalone/src/app/api/wiki/slugs/route.ts +0 -54
  351. package/.next/standalone/src/app/api/wiki/upload/route.ts +0 -95
  352. package/.next/standalone/src/app/api/wiki/watch/route.ts +0 -67
  353. package/.next/standalone/src/app/globals.css +0 -1249
  354. package/.next/standalone/src/app/icon.svg +0 -11
  355. package/.next/standalone/src/app/layout.tsx +0 -78
  356. package/.next/standalone/src/app/manifest.ts +0 -30
  357. package/.next/standalone/src/app/page.tsx +0 -3260
  358. package/.next/standalone/src/app/s/[token]/page.tsx +0 -357
  359. package/.next/standalone/src/app/signin/page.tsx +0 -16
  360. package/.next/standalone/src/app/signin/signin-form.tsx +0 -238
  361. package/.next/standalone/src/components/ai-panel/activity-row.tsx +0 -284
  362. package/.next/standalone/src/components/ai-panel/ai-panel.tsx +0 -311
  363. package/.next/standalone/src/components/ai-panel/token-section.tsx +0 -313
  364. package/.next/standalone/src/components/auth-settings-sheet.tsx +0 -474
  365. package/.next/standalone/src/components/confirm-dialog.tsx +0 -56
  366. package/.next/standalone/src/components/dir-picker.tsx +0 -606
  367. package/.next/standalone/src/components/editor/backlinks-panel.tsx +0 -139
  368. package/.next/standalone/src/components/editor/bubble-menu.tsx +0 -346
  369. package/.next/standalone/src/components/editor/callout-extension.ts +0 -36
  370. package/.next/standalone/src/components/editor/comment-pip.tsx +0 -56
  371. package/.next/standalone/src/components/editor/comment-thread.tsx +0 -254
  372. package/.next/standalone/src/components/editor/csv-viewer.tsx +0 -379
  373. package/.next/standalone/src/components/editor/document-outline.tsx +0 -230
  374. package/.next/standalone/src/components/editor/editor-toolbar.tsx +0 -564
  375. package/.next/standalone/src/components/editor/editor.tsx +0 -1327
  376. package/.next/standalone/src/components/editor/extensions/drag-handle.ts +0 -325
  377. package/.next/standalone/src/components/editor/extensions/heading-anchors.ts +0 -55
  378. package/.next/standalone/src/components/editor/extensions/proof-span.ts +0 -60
  379. package/.next/standalone/src/components/editor/extensions/resizable-image.tsx +0 -159
  380. package/.next/standalone/src/components/editor/extensions.ts +0 -150
  381. package/.next/standalone/src/components/editor/file-fallback-viewer.tsx +0 -75
  382. package/.next/standalone/src/components/editor/folder-index.tsx +0 -236
  383. package/.next/standalone/src/components/editor/google-doc-viewer.tsx +0 -73
  384. package/.next/standalone/src/components/editor/image-viewer.tsx +0 -57
  385. package/.next/standalone/src/components/editor/large-file-gate.tsx +0 -108
  386. package/.next/standalone/src/components/editor/link-popover.tsx +0 -111
  387. package/.next/standalone/src/components/editor/media-popover.tsx +0 -212
  388. package/.next/standalone/src/components/editor/media-viewer.tsx +0 -70
  389. package/.next/standalone/src/components/editor/mermaid-viewer.tsx +0 -286
  390. package/.next/standalone/src/components/editor/node-app-viewer.tsx +0 -328
  391. package/.next/standalone/src/components/editor/notebook-viewer.tsx +0 -371
  392. package/.next/standalone/src/components/editor/office/docx-viewer.tsx +0 -93
  393. package/.next/standalone/src/components/editor/office/office-chrome.tsx +0 -83
  394. package/.next/standalone/src/components/editor/office/pptx-viewer.tsx +0 -104
  395. package/.next/standalone/src/components/editor/office/xlsx-viewer.tsx +0 -192
  396. package/.next/standalone/src/components/editor/pdf-viewer.tsx +0 -32
  397. package/.next/standalone/src/components/editor/proof-span-popover.tsx +0 -162
  398. package/.next/standalone/src/components/editor/slash-commands.tsx +0 -629
  399. package/.next/standalone/src/components/editor/source-viewer.tsx +0 -289
  400. package/.next/standalone/src/components/editor/suggest-edit-popover.tsx +0 -229
  401. package/.next/standalone/src/components/editor/suggestion-card.tsx +0 -206
  402. package/.next/standalone/src/components/editor/table-menu.tsx +0 -232
  403. package/.next/standalone/src/components/editor/view-mode-comment-button.tsx +0 -77
  404. package/.next/standalone/src/components/editor/website-viewer.tsx +0 -75
  405. package/.next/standalone/src/components/editor/wiki-link-create-dialog.tsx +0 -189
  406. package/.next/standalone/src/components/editor/wiki-link-decorator.ts +0 -79
  407. package/.next/standalone/src/components/editor/wiki-link-extension.ts +0 -120
  408. package/.next/standalone/src/components/editor/wiki-link-picker.tsx +0 -250
  409. package/.next/standalone/src/components/layout/viewer-toolbar.tsx +0 -54
  410. package/.next/standalone/src/components/search/search-command-dialog.tsx +0 -246
  411. package/.next/standalone/src/components/search/sidebar-search-box.tsx +0 -121
  412. package/.next/standalone/src/components/search/snippet-text.tsx +0 -48
  413. package/.next/standalone/src/components/share-dialog.tsx +0 -307
  414. package/.next/standalone/src/components/theme-provider.tsx +0 -16
  415. package/.next/standalone/src/components/theme-toggle.tsx +0 -24
  416. package/.next/standalone/src/components/ui/badge.tsx +0 -35
  417. package/.next/standalone/src/components/ui/button.tsx +0 -56
  418. package/.next/standalone/src/components/ui/card.tsx +0 -63
  419. package/.next/standalone/src/components/ui/collapsible.tsx +0 -9
  420. package/.next/standalone/src/components/ui/command.tsx +0 -151
  421. package/.next/standalone/src/components/ui/context-menu.tsx +0 -191
  422. package/.next/standalone/src/components/ui/dialog.tsx +0 -119
  423. package/.next/standalone/src/components/ui/dropdown-menu.tsx +0 -194
  424. package/.next/standalone/src/components/ui/input.tsx +0 -22
  425. package/.next/standalone/src/components/ui/label.tsx +0 -25
  426. package/.next/standalone/src/components/ui/popover.tsx +0 -33
  427. package/.next/standalone/src/components/ui/scroll-area.tsx +0 -47
  428. package/.next/standalone/src/components/ui/select.tsx +0 -156
  429. package/.next/standalone/src/components/ui/separator.tsx +0 -30
  430. package/.next/standalone/src/components/ui/sheet.tsx +0 -140
  431. package/.next/standalone/src/components/ui/skeleton.tsx +0 -15
  432. package/.next/standalone/src/components/ui/switch.tsx +0 -28
  433. package/.next/standalone/src/components/ui/tabs.tsx +0 -54
  434. package/.next/standalone/src/components/ui/textarea.tsx +0 -21
  435. package/.next/standalone/src/components/ui/tip.tsx +0 -23
  436. package/.next/standalone/src/components/ui/toggle-group.tsx +0 -41
  437. package/.next/standalone/src/components/ui/tooltip.tsx +0 -27
  438. package/.next/standalone/src/components/view-width-toggle.tsx +0 -70
  439. package/.next/standalone/src/components/wiki/frontmatter-header.tsx +0 -164
  440. package/.next/standalone/src/hooks/use-is-mobile.ts +0 -14
  441. package/.next/standalone/src/lib/app-runner.ts +0 -272
  442. package/.next/standalone/src/lib/auth/admin.ts +0 -120
  443. package/.next/standalone/src/lib/auth/allowlist.ts +0 -50
  444. package/.next/standalone/src/lib/auth/client.ts +0 -4
  445. package/.next/standalone/src/lib/auth/csrf.ts +0 -68
  446. package/.next/standalone/src/lib/auth/server.ts +0 -215
  447. package/.next/standalone/src/lib/cabinets/tree.ts +0 -75
  448. package/.next/standalone/src/lib/config.ts +0 -114
  449. package/.next/standalone/src/lib/embeds/detect.ts +0 -142
  450. package/.next/standalone/src/lib/git-secrets.ts +0 -65
  451. package/.next/standalone/src/lib/git.ts +0 -503
  452. package/.next/standalone/src/lib/google/detect.ts +0 -107
  453. package/.next/standalone/src/lib/markdown/parse-frontmatter.ts +0 -104
  454. package/.next/standalone/src/lib/markdown/remark-wikilinks.ts +0 -100
  455. package/.next/standalone/src/lib/markdown/sanitize-schema.ts +0 -106
  456. package/.next/standalone/src/lib/markdown/to-html.ts +0 -282
  457. package/.next/standalone/src/lib/markdown/to-markdown.ts +0 -252
  458. package/.next/standalone/src/lib/proof/activity-shared.ts +0 -31
  459. package/.next/standalone/src/lib/proof/activity.ts +0 -74
  460. package/.next/standalone/src/lib/proof/audit.ts +0 -88
  461. package/.next/standalone/src/lib/proof/auth.ts +0 -143
  462. package/.next/standalone/src/lib/proof/block-refs.ts +0 -133
  463. package/.next/standalone/src/lib/proof/blocks.ts +0 -73
  464. package/.next/standalone/src/lib/proof/client-auth.ts +0 -23
  465. package/.next/standalone/src/lib/proof/collab-state.ts +0 -81
  466. package/.next/standalone/src/lib/proof/event-bus.ts +0 -47
  467. package/.next/standalone/src/lib/proof/file-lock.ts +0 -43
  468. package/.next/standalone/src/lib/proof/glob.ts +0 -51
  469. package/.next/standalone/src/lib/proof/idempotency.ts +0 -37
  470. package/.next/standalone/src/lib/proof/lease.ts +0 -117
  471. package/.next/standalone/src/lib/proof/mutex.ts +0 -36
  472. package/.next/standalone/src/lib/proof/ops-applier.ts +0 -727
  473. package/.next/standalone/src/lib/proof/owner-auth.ts +0 -2
  474. package/.next/standalone/src/lib/proof/pending.ts +0 -97
  475. package/.next/standalone/src/lib/proof/proof-span.ts +0 -141
  476. package/.next/standalone/src/lib/proof/rate-limit.ts +0 -53
  477. package/.next/standalone/src/lib/proof/raw-fs.ts +0 -197
  478. package/.next/standalone/src/lib/proof/register-rate-limit.ts +0 -53
  479. package/.next/standalone/src/lib/proof/registry.ts +0 -195
  480. package/.next/standalone/src/lib/proof/sidecar.ts +0 -103
  481. package/.next/standalone/src/lib/proof/suggest-capture.ts +0 -69
  482. package/.next/standalone/src/lib/proof/types.ts +0 -182
  483. package/.next/standalone/src/lib/proof-config.ts +0 -14
  484. package/.next/standalone/src/lib/root-dir.ts +0 -35
  485. package/.next/standalone/src/lib/search/indexable-exts.ts +0 -25
  486. package/.next/standalone/src/lib/search/indexer.ts +0 -634
  487. package/.next/standalone/src/lib/search/sanitize.ts +0 -35
  488. package/.next/standalone/src/lib/search/search-db.ts +0 -57
  489. package/.next/standalone/src/lib/search/watcher-pool.ts +0 -79
  490. package/.next/standalone/src/lib/shared-docs/db.ts +0 -177
  491. package/.next/standalone/src/lib/toast.ts +0 -9
  492. package/.next/standalone/src/lib/utils.ts +0 -6
  493. package/.next/standalone/src/lib/wiki-helpers.ts +0 -36
  494. package/.next/standalone/src/lib/workspace-client.ts +0 -82
  495. package/.next/standalone/src/lib/workspace-context.ts +0 -173
  496. package/.next/standalone/src/lib/workspaces.ts +0 -400
  497. package/.next/standalone/src/middleware.ts +0 -44
  498. package/.next/standalone/src/stores/ai-panel-store.ts +0 -79
  499. package/.next/standalone/src/stores/editor-store.ts +0 -439
  500. package/.next/standalone/src/stores/pin-store.ts +0 -56
  501. package/.next/standalone/src/stores/proof-store.ts +0 -124
  502. package/.next/standalone/src/stores/recent-store.ts +0 -51
  503. package/.next/standalone/src/stores/search-store.ts +0 -104
  504. package/.next/standalone/src/stores/show-hidden-store.ts +0 -26
  505. package/.next/standalone/src/stores/sidebar-width-store.ts +0 -39
  506. package/.next/standalone/src/stores/skin-store.ts +0 -42
  507. package/.next/standalone/src/stores/tree-store.ts +0 -52
  508. package/.next/standalone/src/stores/view-width-store.ts +0 -101
  509. package/.next/standalone/src/stores/wiki-slugs-store.ts +0 -75
  510. package/.next/standalone/src/tests/proof/activity-aggregator.test.ts +0 -146
  511. package/.next/standalone/src/tests/proof/admin-create-user.test.ts +0 -43
  512. package/.next/standalone/src/tests/proof/agent-fs.test.ts +0 -973
  513. package/.next/standalone/src/tests/proof/agent-ownership.test.ts +0 -140
  514. package/.next/standalone/src/tests/proof/agent-workspace-scope.test.ts +0 -134
  515. package/.next/standalone/src/tests/proof/agents-install.test.ts +0 -110
  516. package/.next/standalone/src/tests/proof/bench-write.ts +0 -179
  517. package/.next/standalone/src/tests/proof/better-auth.test.ts +0 -68
  518. package/.next/standalone/src/tests/proof/block-refs.test.ts +0 -108
  519. package/.next/standalone/src/tests/proof/blocks.test.ts +0 -92
  520. package/.next/standalone/src/tests/proof/collab-state.test.ts +0 -501
  521. package/.next/standalone/src/tests/proof/comments-ops.test.ts +0 -177
  522. package/.next/standalone/src/tests/proof/editor-roundtrip.test.ts +0 -85
  523. package/.next/standalone/src/tests/proof/external-edit.test.ts +0 -58
  524. package/.next/standalone/src/tests/proof/file-lock.test.ts +0 -80
  525. package/.next/standalone/src/tests/proof/git-branches-checkout.test.ts +0 -136
  526. package/.next/standalone/src/tests/proof/git-read-features.test.ts +0 -473
  527. package/.next/standalone/src/tests/proof/git-secrets.test.ts +0 -138
  528. package/.next/standalone/src/tests/proof/git-sparse.test.ts +0 -257
  529. package/.next/standalone/src/tests/proof/git-workspace.test.ts +0 -135
  530. package/.next/standalone/src/tests/proof/git.test.ts +0 -243
  531. package/.next/standalone/src/tests/proof/glob.test.ts +0 -82
  532. package/.next/standalone/src/tests/proof/helpers/auth-session.ts +0 -27
  533. package/.next/standalone/src/tests/proof/markdown-to-html.test.ts +0 -46
  534. package/.next/standalone/src/tests/proof/ops-applier.test.ts +0 -368
  535. package/.next/standalone/src/tests/proof/owner-init.test.ts +0 -2
  536. package/.next/standalone/src/tests/proof/parse-frontmatter.test.ts +0 -60
  537. package/.next/standalone/src/tests/proof/preload.ts +0 -21
  538. package/.next/standalone/src/tests/proof/proof-span.test.ts +0 -98
  539. package/.next/standalone/src/tests/proof/rate-limit.test.ts +0 -54
  540. package/.next/standalone/src/tests/proof/readonly-enforcement.test.ts +0 -161
  541. package/.next/standalone/src/tests/proof/reconcile-sidecar.test.ts +0 -195
  542. package/.next/standalone/src/tests/proof/registration-flow.test.ts +0 -330
  543. package/.next/standalone/src/tests/proof/registry.test.ts +0 -169
  544. package/.next/standalone/src/tests/proof/routes.test.ts +0 -516
  545. package/.next/standalone/src/tests/proof/search-index.test.ts +0 -376
  546. package/.next/standalone/src/tests/proof/sidecar-lifecycle.test.ts +0 -177
  547. package/.next/standalone/src/tests/proof/sidecar-trim.test.ts +0 -58
  548. package/.next/standalone/src/tests/proof/suggestion-ops.test.ts +0 -280
  549. package/.next/standalone/src/tests/proof/wiki-content-put.test.ts +0 -140
  550. package/.next/standalone/src/tests/proof/wiki-routes-auth.test.ts +0 -208
  551. package/.next/standalone/src/tests/proof/workspace-isolation.test.ts +0 -87
  552. package/.next/standalone/src/tests/proof/workspaces-api.test.ts +0 -227
  553. package/.next/standalone/src/types/index.ts +0 -47
  554. package/.next/standalone/tailwind.config.ts +0 -191
  555. package/.next/standalone/tsconfig.json +0 -41
  556. package/.next/standalone/tsconfig.tsbuildinfo +0 -1
  557. /package/.next/standalone/.next/static/{WMOTgfV82apmdovxzgbMx → ecpoWt_SP3WkUTh0NsnuT}/_buildManifest.js +0 -0
  558. /package/.next/standalone/.next/static/{WMOTgfV82apmdovxzgbMx → ecpoWt_SP3WkUTh0NsnuT}/_clientMiddlewareManifest.js +0 -0
  559. /package/.next/standalone/.next/static/{WMOTgfV82apmdovxzgbMx → ecpoWt_SP3WkUTh0NsnuT}/_ssgManifest.js +0 -0
@@ -1,85 +0,0 @@
1
- import { mkdir, stat, writeFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { NextResponse } from "next/server";
4
- import { resolveWorkspaceForAgent } from "@/lib/workspace-context";
5
- import { safeWorkspacePath } from "@/lib/workspaces";
6
-
7
- const MAX_UPLOAD_BYTES = 50 * 1024 * 1024;
8
-
9
- function sanitizeFilename(name: string): string {
10
- const lowered = name.toLowerCase();
11
- const cleaned = lowered.replace(/[^a-z0-9._-]+/g, "-").replace(/-+/g, "-");
12
- const trimmed = cleaned.replace(/^[-.]+/, "").replace(/-+$/, "");
13
- return trimmed || "file";
14
- }
15
-
16
- async function pickAvailableName(dir: string, filename: string): Promise<string> {
17
- const ext = path.extname(filename);
18
- const stem = filename.slice(0, filename.length - ext.length);
19
- let candidate = filename;
20
- let n = 2;
21
- while (true) {
22
- try {
23
- await stat(path.join(dir, candidate));
24
- candidate = `${stem}-${n}${ext}`;
25
- n += 1;
26
- } catch {
27
- return candidate;
28
- }
29
- }
30
- }
31
-
32
- export async function POST(
33
- request: Request,
34
- { params }: { params: Promise<{ path: string[] }> },
35
- ) {
36
- const wsx = await resolveWorkspaceForAgent(request, "write");
37
- if (!wsx.ok) return NextResponse.json({ error: wsx.code }, { status: wsx.status });
38
- const { rootDir } = wsx;
39
-
40
- const { path: segments } = await params;
41
- const subPath = (segments ?? []).join("/");
42
-
43
- // Save images in _uploads/ within rootDir, mirroring the page path
44
- const uploadsDir = path.join(rootDir, "_uploads", subPath);
45
- const resolved = safeWorkspacePath(rootDir, path.join("_uploads", subPath));
46
- if (!resolved)
47
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
48
-
49
- let form: FormData;
50
- try {
51
- form = await request.formData();
52
- } catch {
53
- return NextResponse.json({ error: "Expected multipart/form-data" }, { status: 400 });
54
- }
55
-
56
- const file = form.get("file");
57
- if (!(file instanceof File))
58
- return NextResponse.json({ error: "Missing file field" }, { status: 400 });
59
- if (file.size > MAX_UPLOAD_BYTES)
60
- return NextResponse.json({ error: "File exceeds 50MB limit" }, { status: 413 });
61
-
62
- const filename = sanitizeFilename(file.name || "file");
63
-
64
- try {
65
- await mkdir(uploadsDir, { recursive: true });
66
- const finalName = await pickAvailableName(uploadsDir, filename);
67
- const targetPath = path.join(uploadsDir, finalName);
68
- const bytes = Buffer.from(await file.arrayBuffer());
69
- await writeFile(targetPath, bytes);
70
-
71
- const relParts = ["_uploads", subPath, finalName].filter(Boolean);
72
- const relUrl = relParts.map(encodeURIComponent).join("/");
73
- const relPath = relParts.join("/");
74
- return NextResponse.json({
75
- url: `/api/assets/${relUrl}`,
76
- path: relPath,
77
- absolutePath: targetPath,
78
- size: bytes.length,
79
- mimeType: file.type || "application/octet-stream",
80
- });
81
- } catch (err) {
82
- const message = err instanceof Error ? err.message : "Write failed";
83
- return NextResponse.json({ error: message }, { status: 500 });
84
- }
85
- }
@@ -1,60 +0,0 @@
1
- import path from "node:path";
2
- import { NextResponse } from "next/server";
3
- import { checkOrigin } from "@/lib/auth/csrf";
4
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
5
- import { safeWorkspacePath } from "@/lib/workspaces";
6
- import { getScripts, getStatus, startApp, stopApp } from "@/lib/app-runner";
7
-
8
- // GET /api/wiki/app?path=relative/path
9
- export async function GET(request: Request) {
10
- const ctx = await resolveWorkspaceForUser(request);
11
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
12
-
13
- const { searchParams } = new URL(request.url);
14
- const rel = searchParams.get("path") ?? "";
15
- const status = getStatus(rel);
16
- const abs = safeWorkspacePath(ctx.rootDir, rel);
17
- const scripts = abs ? getScripts(abs) : { scripts: [], defaultScript: null };
18
- return NextResponse.json({ ...status, ...scripts });
19
- }
20
-
21
- // POST /api/wiki/app { path: "relative/path" }
22
- export async function POST(request: Request) {
23
- const csrf = checkOrigin(request);
24
- if (csrf) return csrf;
25
- const ctx = await resolveWorkspaceForUser(request, "write");
26
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
27
- const { rootDir } = ctx;
28
-
29
- const body: { path?: string; script?: string } = await request.json();
30
- const rel = body.path;
31
- if (!rel || typeof rel !== "string")
32
- return NextResponse.json({ error: "Missing path" }, { status: 400 });
33
-
34
- const abs = safeWorkspacePath(rootDir, rel);
35
- if (!abs)
36
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
37
-
38
- try {
39
- const result = await startApp(rel, abs, body.script);
40
- return NextResponse.json(result);
41
- } catch (e) {
42
- return NextResponse.json({ error: String(e) }, { status: 500 });
43
- }
44
- }
45
-
46
- // DELETE /api/wiki/app { path: "relative/path" }
47
- export async function DELETE(request: Request) {
48
- const csrf = checkOrigin(request);
49
- if (csrf) return csrf;
50
- const ctx = await resolveWorkspaceForUser(request, "write");
51
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
52
-
53
- const body: { path?: string } = await request.json();
54
- const rel = body.path;
55
- if (!rel || typeof rel !== "string")
56
- return NextResponse.json({ error: "Missing path" }, { status: 400 });
57
-
58
- stopApp(rel);
59
- return NextResponse.json({ ok: true });
60
- }
@@ -1,29 +0,0 @@
1
- export const runtime = "nodejs";
2
-
3
- import { NextResponse } from "next/server";
4
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
5
- import { ensureIndexer, resolveBacklinks } from "@/lib/search/indexer";
6
-
7
- /** Last path segment, sans .md, used as the wiki-link slug. */
8
- function slugFromPath(filePath: string): string {
9
- const base = filePath.split("/").pop() ?? filePath;
10
- return base.replace(/\.md$/i, "");
11
- }
12
-
13
- export async function GET(request: Request) {
14
- const ctx = await resolveWorkspaceForUser(request);
15
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
16
-
17
- const url = new URL(request.url);
18
- const path = url.searchParams.get("path") ?? "";
19
- const slug = slugFromPath(path);
20
- if (!slug) return NextResponse.json({ backlinks: [] });
21
-
22
- // Lazy init: returns whatever is already indexed; warms up in background.
23
- ensureIndexer(ctx.ws.id, ctx.rootDir).catch((e) =>
24
- console.error("[backlinks] ensureIndexer failed", e),
25
- );
26
-
27
- const backlinks = resolveBacklinks(ctx.ws.id, slug, path, 50);
28
- return NextResponse.json({ backlinks });
29
- }
@@ -1,159 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { mkdir, readFile, writeFile } from "node:fs/promises";
3
- import path from "node:path";
4
- import { NextResponse } from "next/server";
5
- import { checkOrigin } from "@/lib/auth/csrf";
6
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
7
- import { safeWorkspacePath } from "@/lib/workspaces";
8
- import { emitEvents, trimEvents } from "@/lib/proof/event-bus";
9
- import { withFileMutex } from "@/lib/proof/mutex";
10
- import { emptySidecar, readSidecar, writeSidecar } from "@/lib/proof/sidecar";
11
- import { SIDECAR_EVENT_TRIM_SIZE } from "@/lib/proof-config";
12
-
13
- const TEXT_EXTS = new Set([
14
- "txt", "md", "markdown", "json", "yaml", "yml", "toml", "csv", "tsv",
15
- "xml", "html", "css", "js", "ts", "tsx", "jsx", "sh", "bash",
16
- "zsh", "rb", "py", "go", "rs", "java", "c", "cpp", "h", "php",
17
- "swift", "kt", "lua", "sql", "scss", "mmd", "mermaid", "ini",
18
- "env", "log", "conf",
19
- ]);
20
- const MARKDOWN_EXTS = new Set(["md", "markdown"]);
21
- const MAX_EDIT_SIZE = 1 * 1024 * 1024; // 1MB
22
-
23
- function isTextFile(filename: string): boolean {
24
- const ext = filename.split(".").pop()?.toLowerCase() ?? "";
25
- return TEXT_EXTS.has(ext);
26
- }
27
-
28
- function isMarkdownFile(filename: string): boolean {
29
- const ext = filename.split(".").pop()?.toLowerCase() ?? "";
30
- return MARKDOWN_EXTS.has(ext);
31
- }
32
-
33
- function sha256content(content: string): string {
34
- return "sha256:" + createHash("sha256").update(content, "utf8").digest("hex");
35
- }
36
-
37
- export async function GET(request: Request) {
38
- const ctx = await resolveWorkspaceForUser(request);
39
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
40
- const { rootDir } = ctx;
41
-
42
- const { searchParams } = new URL(request.url);
43
- const rel = searchParams.get("path") ?? "";
44
- const filePath = safeWorkspacePath(rootDir, rel);
45
- if (!filePath)
46
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
47
- if (!isTextFile(path.basename(filePath)))
48
- return NextResponse.json({ error: "Not a text file" }, { status: 400 });
49
- try {
50
- const buffer = await readFile(filePath);
51
- if (buffer.length > MAX_EDIT_SIZE)
52
- return NextResponse.json(
53
- { error: "File too large (max 1MB)" },
54
- { status: 413 },
55
- );
56
- const content = buffer.toString("utf-8");
57
- const headers: Record<string, string> = {};
58
- if (isMarkdownFile(path.basename(filePath))) {
59
- const sc = await readSidecar(rootDir, rel);
60
- if (sc) {
61
- headers["X-Wiki-Revision"] = String(sc.revision);
62
- headers["X-Wiki-Fingerprint"] = sc.fingerprint;
63
- }
64
- }
65
- return NextResponse.json({ content }, { headers });
66
- } catch {
67
- return NextResponse.json({ error: "File not found" }, { status: 404 });
68
- }
69
- }
70
-
71
- export async function PUT(request: Request) {
72
- const csrf = checkOrigin(request);
73
- if (csrf) return csrf;
74
- const ctx = await resolveWorkspaceForUser(request, "write");
75
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
76
- const { rootDir } = ctx;
77
-
78
- const body: { path?: string; content?: string; baseRevision?: number } =
79
- await request.json();
80
- const rel = body.path;
81
- const content = body.content;
82
- if (!rel || typeof rel !== "string")
83
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
84
- if (typeof content !== "string")
85
- return NextResponse.json({ error: "Missing content" }, { status: 400 });
86
- const filePath = safeWorkspacePath(rootDir, rel);
87
- if (!filePath)
88
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
89
- if (!isTextFile(path.basename(filePath)))
90
- return NextResponse.json({ error: "Not a text file" }, { status: 400 });
91
-
92
- // Non-markdown files: plain write, no revision tracking.
93
- if (!isMarkdownFile(path.basename(filePath))) {
94
- try {
95
- await mkdir(path.dirname(filePath), { recursive: true });
96
- await writeFile(filePath, content, "utf-8");
97
- return NextResponse.json({ ok: true });
98
- } catch {
99
- return NextResponse.json({ error: "Failed to save" }, { status: 500 });
100
- }
101
- }
102
-
103
- // Markdown files: mutex + sidecar revision check + fingerprint update + event.
104
- // Use the same key format as the agent routes (`${rootDir}\0${rel}`) so a doc
105
- // edited via both the editor and the agent fs API shares one lock.
106
- return withFileMutex(`${rootDir}\u0000${rel}`, async () => {
107
- const sc = (await readSidecar(rootDir, rel)) ?? emptySidecar(rel);
108
-
109
- // baseRevision is required for markdown to prevent lost writes.
110
- if (body.baseRevision === undefined || typeof body.baseRevision !== "number") {
111
- return NextResponse.json(
112
- { error: "BASE_REVISION_REQUIRED", message: "baseRevision is required when saving markdown files." },
113
- { status: 400 },
114
- );
115
- }
116
-
117
- // Enforce staleness check.
118
- if (
119
- body.baseRevision !== sc.revision
120
- ) {
121
- return NextResponse.json(
122
- {
123
- error: "STALE_REVISION",
124
- currentRevision: sc.revision,
125
- message: "File was modified since your last read. Reload and retry.",
126
- },
127
- { status: 409 },
128
- );
129
- }
130
-
131
- try {
132
- await mkdir(path.dirname(filePath), { recursive: true });
133
- await writeFile(filePath, content, "utf-8");
134
- } catch {
135
- return NextResponse.json({ error: "Failed to save" }, { status: 500 });
136
- }
137
-
138
- // Update sidecar metadata.
139
- const newRevision = sc.revision + 1;
140
- sc.revision = newRevision;
141
- sc.fingerprint = sha256content(content);
142
- sc.updatedAt = new Date().toISOString();
143
-
144
- // Emit a human-edit event so agents can see the change.
145
- emitEvents(sc, [
146
- {
147
- type: "file.edited",
148
- at: new Date().toISOString(),
149
- by: `user:${ctx.userId}`,
150
- revision: newRevision,
151
- },
152
- ]);
153
- trimEvents(sc, SIDECAR_EVENT_TRIM_SIZE);
154
-
155
- await writeSidecar(rootDir, rel, sc);
156
-
157
- return NextResponse.json({ ok: true, revision: newRevision });
158
- });
159
- }
@@ -1,100 +0,0 @@
1
- import { createReadStream } from "node:fs";
2
- import { readdir, readFile, stat } from "node:fs/promises";
3
- import path from "node:path";
4
- import { Readable } from "node:stream";
5
- import JSZip from "jszip";
6
- import { NextResponse } from "next/server";
7
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
8
- import { safeWorkspacePath } from "@/lib/workspaces";
9
-
10
- // Skip noise that should never end up in a downloaded archive.
11
- const SKIP_DIRS = new Set([".git", "node_modules", ".next", ".proof"]);
12
-
13
- function contentDisposition(filename: string): string {
14
- // RFC 5987: ASCII fallback + UTF-8 encoded form for non-ASCII names.
15
- const ascii = filename.replace(/[^\x20-\x7e]/g, "_").replace(/"/g, "'");
16
- const encoded = encodeURIComponent(filename);
17
- return `attachment; filename="${ascii}"; filename*=UTF-8''${encoded}`;
18
- }
19
-
20
- async function addDirToZip(
21
- zip: JSZip,
22
- absDir: string,
23
- zipPrefix: string,
24
- ): Promise<void> {
25
- const names = await readdir(absDir);
26
- for (const name of names) {
27
- if (SKIP_DIRS.has(name)) continue;
28
- const abs = path.join(absDir, name);
29
- const info = await stat(abs);
30
- const zipPath = zipPrefix ? `${zipPrefix}/${name}` : name;
31
- if (info.isDirectory()) {
32
- await addDirToZip(zip, abs, zipPath);
33
- } else if (info.isFile()) {
34
- zip.file(zipPath, await readFile(abs));
35
- }
36
- }
37
- }
38
-
39
- export async function GET(request: Request) {
40
- const ctx = await resolveWorkspaceForUser(request);
41
- if (!ctx.ok)
42
- return NextResponse.json({ error: ctx.code }, { status: ctx.status });
43
- const { rootDir } = ctx;
44
-
45
- const { searchParams } = new URL(request.url);
46
- const rel = searchParams.get("path") ?? "";
47
- const target = safeWorkspacePath(rootDir, rel);
48
- if (!target)
49
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
50
-
51
- let info: Awaited<ReturnType<typeof stat>>;
52
- try {
53
- info = await stat(target);
54
- } catch {
55
- return NextResponse.json({ error: "Not found" }, { status: 404 });
56
- }
57
-
58
- const baseName = path.basename(target) || "download";
59
-
60
- if (info.isFile()) {
61
- const webStream = Readable.toWeb(
62
- createReadStream(target),
63
- ) as ReadableStream;
64
- return new Response(webStream, {
65
- headers: {
66
- "Content-Type": "application/octet-stream",
67
- "Content-Length": String(info.size),
68
- "Content-Disposition": contentDisposition(baseName),
69
- "Cache-Control": "private, no-store",
70
- },
71
- });
72
- }
73
-
74
- if (info.isDirectory()) {
75
- const zip = new JSZip();
76
- try {
77
- await addDirToZip(zip, target, "");
78
- } catch {
79
- return NextResponse.json(
80
- { error: "Failed to read folder" },
81
- { status: 500 },
82
- );
83
- }
84
- const buffer = await zip.generateAsync({
85
- type: "nodebuffer",
86
- compression: "DEFLATE",
87
- compressionOptions: { level: 6 },
88
- });
89
- return new Response(new Uint8Array(buffer), {
90
- headers: {
91
- "Content-Type": "application/zip",
92
- "Content-Length": String(buffer.length),
93
- "Content-Disposition": contentDisposition(`${baseName}.zip`),
94
- "Cache-Control": "private, no-store",
95
- },
96
- });
97
- }
98
-
99
- return NextResponse.json({ error: "Unsupported path" }, { status: 400 });
100
- }
@@ -1,57 +0,0 @@
1
- import { readFile, stat } from "node:fs/promises";
2
- import path from "node:path";
3
- import { NextResponse } from "next/server";
4
- import { resolveWorkspaceForAgent } from "@/lib/workspace-context";
5
- import { safeWorkspacePath } from "@/lib/workspaces";
6
-
7
- const MIME_MAP: Record<string, string> = {
8
- jpg: "image/jpeg",
9
- jpeg: "image/jpeg",
10
- png: "image/png",
11
- gif: "image/gif",
12
- webp: "image/webp",
13
- svg: "image/svg+xml",
14
- avif: "image/avif",
15
- ico: "image/x-icon",
16
- bmp: "image/bmp",
17
- pdf: "application/pdf",
18
- txt: "text/plain; charset=utf-8",
19
- md: "text/markdown; charset=utf-8",
20
- mp4: "video/mp4",
21
- webm: "video/webm",
22
- mov: "video/quicktime",
23
- m4v: "video/mp4",
24
- mp3: "audio/mpeg",
25
- wav: "audio/wav",
26
- ogg: "audio/ogg",
27
- m4a: "audio/mp4",
28
- aac: "audio/aac",
29
- };
30
-
31
- export async function GET(request: Request) {
32
- const wsx = await resolveWorkspaceForAgent(request);
33
- if (!wsx.ok) return NextResponse.json({ error: wsx.code }, { status: wsx.status });
34
- const { rootDir } = wsx;
35
-
36
- const { searchParams } = new URL(request.url);
37
- const rel = searchParams.get("path") ?? "";
38
- const filePath = safeWorkspacePath(rootDir, rel);
39
- if (!filePath)
40
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
41
- try {
42
- const info = await stat(filePath);
43
- if (info.isDirectory())
44
- return NextResponse.json({ error: "Not a file" }, { status: 400 });
45
- const ext = path.extname(filePath).slice(1).toLowerCase();
46
- const contentType = MIME_MAP[ext] ?? "application/octet-stream";
47
- const buffer = await readFile(filePath);
48
- return new Response(buffer, {
49
- headers: {
50
- "Content-Type": contentType,
51
- "Cache-Control": "private, max-age=60",
52
- },
53
- });
54
- } catch {
55
- return NextResponse.json({ error: "File not found" }, { status: 404 });
56
- }
57
- }
@@ -1,34 +0,0 @@
1
- import { mkdir } from "node:fs/promises";
2
- import { NextResponse } from "next/server";
3
- import { checkOrigin } from "@/lib/auth/csrf";
4
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
5
- import { safeWorkspacePath } from "@/lib/workspaces";
6
-
7
- export async function POST(request: Request) {
8
- const csrf = checkOrigin(request);
9
- if (csrf) return csrf;
10
- const ctx = await resolveWorkspaceForUser(request, "write");
11
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
12
- const { rootDir } = ctx;
13
-
14
- const body: { path?: string } = await request.json();
15
- const rel = body.path;
16
-
17
- if (!rel || typeof rel !== "string" || /[<>:"|?*]/.test(rel)) {
18
- return NextResponse.json({ error: "Invalid folder path" }, { status: 400 });
19
- }
20
-
21
- const folderPath = safeWorkspacePath(rootDir, rel);
22
- if (!folderPath)
23
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
24
-
25
- try {
26
- await mkdir(folderPath, { recursive: true });
27
- return NextResponse.json({ ok: true });
28
- } catch {
29
- return NextResponse.json(
30
- { error: "Failed to create folder" },
31
- { status: 500 },
32
- );
33
- }
34
- }
@@ -1,32 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import { detectGitRepo, gitBranches } from "@/lib/git";
3
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
4
- import { safeWorkspacePath } from "@/lib/workspaces";
5
-
6
- export async function GET(request: Request) {
7
- const ctx = await resolveWorkspaceForUser(request);
8
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
9
- const { rootDir } = ctx;
10
-
11
- const { searchParams } = new URL(request.url);
12
- const rel = searchParams.get("path") ?? "";
13
- if (!rel) return NextResponse.json({ error: "Invalid path" }, { status: 400 });
14
-
15
- const repoDir = safeWorkspacePath(rootDir, rel);
16
- if (!repoDir || repoDir === rootDir)
17
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
18
-
19
- if (!(await detectGitRepo(repoDir)))
20
- return NextResponse.json({ error: "Not a git repository" }, { status: 400 });
21
-
22
- try {
23
- const branches = await gitBranches(repoDir);
24
- const current = branches.find((b) => b.current)?.name ?? "";
25
- return NextResponse.json({ branches, current });
26
- } catch {
27
- return NextResponse.json(
28
- { error: "Failed to list branches" },
29
- { status: 500 },
30
- );
31
- }
32
- }
@@ -1,45 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import { detectGitRepo, gitCheckout } from "@/lib/git";
3
- import { checkOrigin } from "@/lib/auth/csrf";
4
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
5
- import { safeWorkspacePath } from "@/lib/workspaces";
6
-
7
- export async function POST(request: Request) {
8
- const csrf = checkOrigin(request);
9
- if (csrf) return csrf;
10
-
11
- const ctx = await resolveWorkspaceForUser(request, "write");
12
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
13
- const { rootDir } = ctx;
14
-
15
- const body: { path?: string; branch?: string } = await request.json();
16
- const rel = body.path;
17
- const branch = body.branch;
18
-
19
- if (!rel || typeof rel !== "string" || !branch || typeof branch !== "string")
20
- return NextResponse.json({ error: "Invalid params" }, { status: 400 });
21
-
22
- const repoDir = safeWorkspacePath(rootDir, rel);
23
- if (!repoDir || repoDir === rootDir)
24
- return NextResponse.json({ error: "Invalid path" }, { status: 400 });
25
-
26
- if (!(await detectGitRepo(repoDir)))
27
- return NextResponse.json({ error: "Not a git repository" }, { status: 400 });
28
-
29
- try {
30
- const result = await gitCheckout(repoDir, branch);
31
- return NextResponse.json({ ok: true, ...result });
32
- } catch (err: unknown) {
33
- if (err instanceof Error && (err as Error & { dirty?: boolean }).dirty) {
34
- return NextResponse.json(
35
- { error: "DIRTY", message: "Repository has uncommitted changes" },
36
- { status: 409 },
37
- );
38
- }
39
- if (err instanceof Error && (err as Error & { invalidBranch?: boolean }).invalidBranch) {
40
- return NextResponse.json({ error: "Invalid branch name" }, { status: 400 });
41
- }
42
- const message = err instanceof Error ? err.message : "Checkout failed";
43
- return NextResponse.json({ error: "Checkout failed", message }, { status: 500 });
44
- }
45
- }
@@ -1,33 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import { findEnclosingGitRepo, gitFileDiff } from "@/lib/git";
3
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
4
- import { safeWorkspacePath } from "@/lib/workspaces";
5
-
6
- export async function GET(request: Request) {
7
- const ctx = await resolveWorkspaceForUser(request);
8
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
9
- const { rootDir } = ctx;
10
-
11
- const { searchParams } = new URL(request.url);
12
- const rel = searchParams.get("path") ?? "";
13
- const sha = searchParams.get("sha") ?? "";
14
-
15
- if (!rel || !sha) return NextResponse.json({ error: "Invalid params" }, { status: 400 });
16
- // Reject anything that is not a valid abbreviated or full SHA
17
- if (!/^[0-9a-f]{7,40}$/i.test(sha))
18
- return NextResponse.json({ error: "Invalid sha" }, { status: 400 });
19
-
20
- const filePath = safeWorkspacePath(rootDir, rel);
21
- if (!filePath) return NextResponse.json({ error: "Invalid path" }, { status: 400 });
22
-
23
- const repo = await findEnclosingGitRepo(rootDir, rel);
24
- if (!repo)
25
- return NextResponse.json({ error: "Not in a git repository" }, { status: 404 });
26
-
27
- try {
28
- const diff = await gitFileDiff(repo.repoDir, repo.relFromRepo, sha);
29
- return NextResponse.json({ diff });
30
- } catch {
31
- return NextResponse.json({ error: "Diff failed" }, { status: 500 });
32
- }
33
- }
@@ -1,27 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import { findEnclosingGitRepo, gitFileInfo } from "@/lib/git";
3
- import { resolveWorkspaceForUser } from "@/lib/workspace-context";
4
- import { safeWorkspacePath } from "@/lib/workspaces";
5
-
6
- export async function GET(request: Request) {
7
- const ctx = await resolveWorkspaceForUser(request);
8
- if (!ctx.ok) return NextResponse.json({ error: ctx.code }, { status: ctx.status });
9
- const { rootDir } = ctx;
10
-
11
- const { searchParams } = new URL(request.url);
12
- const rel = searchParams.get("path") ?? "";
13
- if (!rel) return NextResponse.json({ error: "Invalid path" }, { status: 400 });
14
-
15
- const filePath = safeWorkspacePath(rootDir, rel);
16
- if (!filePath) return NextResponse.json({ error: "Invalid path" }, { status: 400 });
17
-
18
- const repo = await findEnclosingGitRepo(rootDir, rel);
19
- if (!repo) return NextResponse.json({ info: null });
20
-
21
- try {
22
- const info = await gitFileInfo(repo.repoDir, repo.relFromRepo);
23
- return NextResponse.json({ info });
24
- } catch {
25
- return NextResponse.json({ info: null });
26
- }
27
- }