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,257 +0,0 @@
1
- /**
2
- * Tests for git sparse-checkout (subpath) support in git-backed workspaces.
3
- * Uses a local git fixture; skipped if git binary not available.
4
- */
5
- import { test, before, after } from "node:test";
6
- import assert from "node:assert/strict";
7
- import { mkdtemp, rm, writeFile, mkdir } from "node:fs/promises";
8
- import { existsSync } from "node:fs";
9
- import { execFileSync } from "node:child_process";
10
- import { tmpdir } from "node:os";
11
- import path from "node:path";
12
-
13
- import { assertGitAvailable } from "../../lib/git.js";
14
- import {
15
- createGitWorkspace,
16
- refreshGitWorkspace,
17
- removeWorkspace,
18
- getWorkspace,
19
- } from "../../lib/workspaces.js";
20
- import { getToken } from "../../lib/git-secrets.js";
21
- import { reposDir } from "../../lib/config.js";
22
-
23
- const gitEnv = {
24
- ...process.env,
25
- GIT_AUTHOR_NAME: "Test",
26
- GIT_AUTHOR_EMAIL: "test@example.com",
27
- GIT_COMMITTER_NAME: "Test",
28
- GIT_COMMITTER_EMAIL: "test@example.com",
29
- };
30
-
31
- let gitOk = false;
32
- let tempRoot: string;
33
- let sourceRepo: string;
34
-
35
- before(async () => {
36
- try {
37
- await assertGitAvailable();
38
- gitOk = true;
39
- } catch {
40
- gitOk = false;
41
- return;
42
- }
43
-
44
- tempRoot = await mkdtemp(path.join(tmpdir(), "wiki-sparse-"));
45
- sourceRepo = path.join(tempRoot, "source");
46
- await mkdir(path.join(sourceRepo, "docs"), { recursive: true });
47
- await mkdir(path.join(sourceRepo, "app"), { recursive: true });
48
-
49
- execFileSync("git", ["init"], { cwd: sourceRepo, env: gitEnv });
50
- execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: sourceRepo, env: gitEnv });
51
- execFileSync("git", ["config", "user.name", "Test"], { cwd: sourceRepo, env: gitEnv });
52
-
53
- await writeFile(path.join(sourceRepo, "README.md"), "# Root readme\n");
54
- await writeFile(path.join(sourceRepo, "docs", "guide.md"), "# Guide\n");
55
- await writeFile(path.join(sourceRepo, "docs", "api.md"), "# API\n");
56
- await writeFile(path.join(sourceRepo, "app", "main.ts"), "// app code\n");
57
-
58
- execFileSync("git", ["add", "."], { cwd: sourceRepo, env: gitEnv });
59
- execFileSync("git", ["commit", "-m", "Initial commit"], { cwd: sourceRepo, env: gitEnv });
60
- });
61
-
62
- after(async () => {
63
- if (tempRoot) await rm(tempRoot, { recursive: true, force: true });
64
- });
65
-
66
- test("createGitWorkspace with subpath: rootDir points at subdir, app/ not visible", async () => {
67
- if (!gitOk) return;
68
-
69
- const ws = await createGitWorkspace({
70
- remoteUrl: sourceRepo,
71
- subpath: "docs",
72
- name: "sparse-docs",
73
- allowLocalPath: true,
74
- });
75
-
76
- assert.equal(ws.readOnly, true);
77
- assert.ok(ws.git, "git metadata present");
78
- assert.equal(ws.git!.subpath, "docs", "subpath recorded");
79
- assert.ok(ws.git!.cloneRoot, "cloneRoot recorded");
80
- assert.ok(
81
- ws.git!.cloneRoot!.startsWith(reposDir() + path.sep),
82
- "cloneRoot under managed repos dir",
83
- );
84
- assert.ok(ws.rootDir.endsWith(path.sep + "docs"), `rootDir ends with /docs, got ${ws.rootDir}`);
85
- assert.ok(
86
- ws.rootDir.startsWith(ws.git!.cloneRoot!),
87
- "rootDir is inside cloneRoot",
88
- );
89
- assert.match(ws.git!.lastSha ?? "", /^[0-9a-f]{40}$/, "lastSha is a 40-char sha");
90
-
91
- // Docs files visible in rootDir
92
- assert.ok(existsSync(path.join(ws.rootDir, "guide.md")), "guide.md in rootDir");
93
- assert.ok(existsSync(path.join(ws.rootDir, "api.md")), "api.md in rootDir");
94
-
95
- // app/ dir NOT visible in rootDir (outside the sparse cone)
96
- assert.equal(
97
- existsSync(path.join(ws.rootDir, "..", "app")),
98
- // app/ sits in cloneRoot, not inside rootDir — assert it is not in rootDir
99
- false,
100
- "app/ not inside rootDir",
101
- );
102
- // cloneRoot exists; app is absent from the working tree (sparse cone)
103
- assert.ok(existsSync(ws.git!.cloneRoot!), "cloneRoot dir exists");
104
- assert.equal(
105
- existsSync(path.join(ws.git!.cloneRoot!, "app")),
106
- false,
107
- "app/ dir absent from sparse working tree",
108
- );
109
-
110
- await removeWorkspace(ws.id);
111
- });
112
-
113
- test("refreshGitWorkspace: new docs commit visible, lastSha advances", async () => {
114
- if (!gitOk) return;
115
-
116
- const ws = await createGitWorkspace({
117
- remoteUrl: sourceRepo,
118
- subpath: "docs",
119
- name: "sparse-refresh",
120
- allowLocalPath: true,
121
- });
122
- const sha0 = ws.git!.lastSha!;
123
-
124
- // Add new doc upstream
125
- await writeFile(path.join(sourceRepo, "docs", "new.md"), "# New page\n");
126
- execFileSync("git", ["add", "."], { cwd: sourceRepo, env: gitEnv });
127
- execFileSync("git", ["commit", "-m", "Add new doc"], { cwd: sourceRepo, env: gitEnv });
128
-
129
- const res = await refreshGitWorkspace(ws.id);
130
- assert.notEqual(res.lastSha, sha0, "lastSha advances after pull");
131
- assert.ok(existsSync(path.join(ws.rootDir, "new.md")), "new doc materialized in rootDir");
132
-
133
- const reloaded = await getWorkspace(ws.id);
134
- assert.equal(reloaded?.git?.lastSha, res.lastSha, "persisted lastSha matches");
135
-
136
- await removeWorkspace(ws.id);
137
- });
138
-
139
- test("removeWorkspace: entire cloneRoot deleted, not just subdir", async () => {
140
- if (!gitOk) return;
141
-
142
- const ws = await createGitWorkspace({
143
- remoteUrl: sourceRepo,
144
- subpath: "docs",
145
- name: "sparse-remove",
146
- token: "fake-pat-for-test",
147
- allowLocalPath: true,
148
- });
149
-
150
- const cloneRoot = ws.git!.cloneRoot!;
151
- const tokenRef = ws.git!.tokenRef;
152
- assert.ok(tokenRef, "tokenRef present");
153
- assert.ok(existsSync(cloneRoot), "cloneRoot exists before remove");
154
-
155
- await removeWorkspace(ws.id);
156
-
157
- assert.equal(await getWorkspace(ws.id), null, "workspace unregistered");
158
- assert.equal(existsSync(cloneRoot), false, "entire cloneRoot removed");
159
- assert.equal(await getToken(tokenRef!), null, "token deleted");
160
- });
161
-
162
- test("createGitWorkspace: bad subpath rejects with error, no leftover", async () => {
163
- if (!gitOk) return;
164
-
165
- // Determine how many workspaces exist before
166
- const { listWorkspaces } = await import("../../lib/workspaces.js");
167
- const before = (await listWorkspaces()).length;
168
-
169
- await assert.rejects(
170
- () =>
171
- createGitWorkspace({
172
- remoteUrl: sourceRepo,
173
- subpath: "nonexistent-dir",
174
- allowLocalPath: true,
175
- }),
176
- /nonexistent-dir|not found/i,
177
- );
178
-
179
- const after = (await listWorkspaces()).length;
180
- assert.equal(after, before, "no workspace registered on bad subpath");
181
-
182
- // No leftover clone dir for the failed workspace
183
- const { reposDir: getReposDir } = await import("../../lib/config.js");
184
- const { readdirSync, existsSync: fsExists } = await import("node:fs");
185
- const reposBase = getReposDir();
186
- if (fsExists(reposBase)) {
187
- // All dirs in repos/ should belong to pre-existing workspaces
188
- const ids = new Set((await listWorkspaces()).map((w) => w.id));
189
- const dirs = readdirSync(reposBase);
190
- for (const d of dirs) {
191
- assert.ok(ids.has(d), `orphaned clone dir found: ${d}`);
192
- }
193
- }
194
- });
195
-
196
- test("createGitWorkspace: subpath that is a symlink is rejected (no escape)", async () => {
197
- if (!gitOk) return;
198
- if (process.platform === "win32") return; // symlink semantics differ on Windows
199
-
200
- // Build a repo whose committed "link" entry is a symlink to an outside dir.
201
- const { symlinkSync } = await import("node:fs");
202
- const linkRepo = path.join(tempRoot, "linkrepo");
203
- const outside = path.join(tempRoot, "outside-secret");
204
- await mkdir(outside, { recursive: true });
205
- await writeFile(path.join(outside, "secret.txt"), "do not serve me\n");
206
- await mkdir(linkRepo, { recursive: true });
207
- execFileSync("git", ["init"], { cwd: linkRepo, env: gitEnv });
208
- execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: linkRepo, env: gitEnv });
209
- execFileSync("git", ["config", "user.name", "Test"], { cwd: linkRepo, env: gitEnv });
210
- await writeFile(path.join(linkRepo, "README.md"), "# root\n");
211
- // A symlink named "link" pointing at the outside dir, committed into the repo.
212
- symlinkSync(outside, path.join(linkRepo, "link"));
213
- execFileSync("git", ["add", "-A"], { cwd: linkRepo, env: gitEnv });
214
- execFileSync("git", ["commit", "-m", "add symlink"], { cwd: linkRepo, env: gitEnv });
215
-
216
- const { listWorkspaces } = await import("../../lib/workspaces.js");
217
- const before = (await listWorkspaces()).length;
218
-
219
- // Requesting the symlink as subpath must be rejected; we must never register
220
- // a workspace whose rootDir resolves outside the clone.
221
- // Rejected at one of two layers: git's cone check refuses a non-directory
222
- // ("is not a directory"), or our post-clone lstat guard ("not found").
223
- // Either way the workspace must not register and rootDir must never resolve
224
- // to the outside symlink target.
225
- await assert.rejects(
226
- () =>
227
- createGitWorkspace({
228
- remoteUrl: linkRepo,
229
- subpath: "link",
230
- allowLocalPath: true,
231
- }),
232
- /not a directory|not found/i,
233
- );
234
- const after = (await listWorkspaces()).length;
235
- assert.equal(after, before, "no workspace registered for symlink subpath");
236
- });
237
-
238
- test("createGitWorkspace whole-repo (no subpath) regression: rootDir === cloneRoot", async () => {
239
- if (!gitOk) return;
240
-
241
- const ws = await createGitWorkspace({
242
- remoteUrl: sourceRepo,
243
- name: "whole-repo",
244
- allowLocalPath: true,
245
- });
246
-
247
- assert.equal(ws.git!.subpath, undefined, "no subpath on whole-repo");
248
- assert.equal(ws.git!.cloneRoot, undefined, "no cloneRoot stored for whole-repo");
249
- assert.ok(
250
- ws.rootDir.startsWith(reposDir() + path.sep),
251
- "rootDir under managed repos dir",
252
- );
253
- assert.ok(existsSync(path.join(ws.rootDir, "README.md")), "README.md cloned");
254
- assert.ok(existsSync(path.join(ws.rootDir, "docs", "guide.md")), "docs/guide.md cloned");
255
-
256
- await removeWorkspace(ws.id);
257
- });
@@ -1,135 +0,0 @@
1
- /**
2
- * Lifecycle tests for git-backed workspaces (src/lib/workspaces.ts).
3
- * Uses a local git fixture as the clone source via allowLocalPath:true.
4
- * Skipped if the git binary is not available.
5
- */
6
- import { test, before, after } from "node:test";
7
- import assert from "node:assert/strict";
8
- import { mkdtemp, rm, writeFile, mkdir, stat } from "node:fs/promises";
9
- import { existsSync } from "node:fs";
10
- import { execFileSync } from "node:child_process";
11
- import { tmpdir } from "node:os";
12
- import path from "node:path";
13
-
14
- import { assertGitAvailable } from "../../lib/git.js";
15
- import {
16
- createGitWorkspace,
17
- refreshGitWorkspace,
18
- removeWorkspace,
19
- getWorkspace,
20
- } from "../../lib/workspaces.js";
21
- import { getToken } from "../../lib/git-secrets.js";
22
- import { reposDir } from "../../lib/config.js";
23
-
24
- const gitEnv = {
25
- ...process.env,
26
- GIT_AUTHOR_NAME: "Test",
27
- GIT_AUTHOR_EMAIL: "test@example.com",
28
- GIT_COMMITTER_NAME: "Test",
29
- GIT_COMMITTER_EMAIL: "test@example.com",
30
- };
31
-
32
- let gitOk = false;
33
- let tempRoot: string;
34
- let sourceRepo: string;
35
-
36
- before(async () => {
37
- try {
38
- await assertGitAvailable();
39
- gitOk = true;
40
- } catch {
41
- gitOk = false;
42
- return;
43
- }
44
-
45
- tempRoot = await mkdtemp(path.join(tmpdir(), "wiki-gitws-"));
46
- sourceRepo = path.join(tempRoot, "source");
47
- await mkdir(sourceRepo, { recursive: true });
48
- execFileSync("git", ["init"], { cwd: sourceRepo, env: gitEnv });
49
- execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: sourceRepo, env: gitEnv });
50
- execFileSync("git", ["config", "user.name", "Test"], { cwd: sourceRepo, env: gitEnv });
51
- await writeFile(path.join(sourceRepo, "README.md"), "# Docs repo\n");
52
- execFileSync("git", ["add", "."], { cwd: sourceRepo, env: gitEnv });
53
- execFileSync("git", ["commit", "-m", "Initial commit"], { cwd: sourceRepo, env: gitEnv });
54
- });
55
-
56
- after(async () => {
57
- if (tempRoot) await rm(tempRoot, { recursive: true, force: true });
58
- });
59
-
60
- test("createGitWorkspace registers a read-only workspace and clones files", async () => {
61
- if (!gitOk) return;
62
-
63
- const ws = await createGitWorkspace({
64
- remoteUrl: sourceRepo,
65
- name: "docs",
66
- allowLocalPath: true,
67
- });
68
-
69
- assert.equal(ws.readOnly, true, "git workspace must be read-only");
70
- assert.ok(ws.git, "git metadata present");
71
- assert.match(ws.git!.lastSha ?? "", /^[0-9a-f]{40}$/, "lastSha recorded");
72
- assert.ok(
73
- ws.rootDir.startsWith(reposDir() + path.sep),
74
- `clone dir under managed repos dir, got ${ws.rootDir}`,
75
- );
76
- assert.ok(existsSync(path.join(ws.rootDir, "README.md")), "cloned file exists");
77
-
78
- // Cleanup
79
- await removeWorkspace(ws.id);
80
- });
81
-
82
- test("refreshGitWorkspace fast-forwards lastSha after a new upstream commit", async () => {
83
- if (!gitOk) return;
84
-
85
- const ws = await createGitWorkspace({
86
- remoteUrl: sourceRepo,
87
- name: "docs2",
88
- allowLocalPath: true,
89
- });
90
- const sha0 = ws.git!.lastSha;
91
-
92
- // New commit upstream.
93
- await writeFile(path.join(sourceRepo, "second.md"), "second\n");
94
- execFileSync("git", ["add", "."], { cwd: sourceRepo, env: gitEnv });
95
- execFileSync("git", ["commit", "-m", "Second"], { cwd: sourceRepo, env: gitEnv });
96
-
97
- const res = await refreshGitWorkspace(ws.id);
98
- assert.notEqual(res.lastSha, sha0, "lastSha advances after pull");
99
-
100
- const reloaded = await getWorkspace(ws.id);
101
- assert.equal(reloaded?.git?.lastSha, res.lastSha, "persisted lastSha matches");
102
- assert.equal(reloaded?.git?.lastError, undefined, "no error after good pull");
103
-
104
- await removeWorkspace(ws.id);
105
- });
106
-
107
- test("removeWorkspace deletes the clone dir and the stored token", async () => {
108
- if (!gitOk) return;
109
-
110
- const ws = await createGitWorkspace({
111
- remoteUrl: sourceRepo,
112
- name: "docs3",
113
- token: "secret-pat-value",
114
- allowLocalPath: true,
115
- });
116
- const tokenRef = ws.git!.tokenRef;
117
- assert.ok(tokenRef, "token stored, ref present");
118
- assert.equal(await getToken(tokenRef!), "secret-pat-value", "token retrievable before remove");
119
- const cloneDir = ws.rootDir;
120
- assert.ok(existsSync(cloneDir), "clone dir exists before remove");
121
-
122
- await removeWorkspace(ws.id);
123
-
124
- assert.equal(await getWorkspace(ws.id), null, "workspace unregistered");
125
- assert.equal(existsSync(cloneDir), false, "clone dir removed");
126
- assert.equal(await getToken(tokenRef!), null, "token deleted");
127
- });
128
-
129
- test("createGitWorkspace rejects a non-https URL when not allowLocalPath", async () => {
130
- if (!gitOk) return;
131
- await assert.rejects(
132
- () => createGitWorkspace({ remoteUrl: "file:///etc/passwd" }),
133
- /file|scheme|allowed/i,
134
- );
135
- });
@@ -1,243 +0,0 @@
1
- /**
2
- * Tests for src/lib/git.ts
3
- * - validateRemoteUrl: pure unit tests, no network, no git binary needed.
4
- * - clone/pull/headSha/currentBranch: use a local git fixture. Skipped if git not available.
5
- */
6
- import { test, before, after, describe, skip } from "node:test";
7
- import assert from "node:assert/strict";
8
- import { mkdtemp, rm, writeFile, mkdir } from "node:fs/promises";
9
- import { execFileSync } from "node:child_process";
10
- import { tmpdir } from "node:os";
11
- import path from "node:path";
12
-
13
- import {
14
- validateRemoteUrl,
15
- assertGitAvailable,
16
- cloneRepo,
17
- pullRepo,
18
- headSha,
19
- currentBranch,
20
- } from "../../lib/git.js";
21
-
22
- // ----------------------------
23
- // validateRemoteUrl: pure unit tests
24
- // ----------------------------
25
-
26
- describe("validateRemoteUrl", () => {
27
- test("accepts https URL", () => {
28
- const result = validateRemoteUrl("https://github.com/org/repo.git");
29
- assert.ok(result.ok, `Expected ok, got: ${!result.ok && result.reason}`);
30
- assert.equal(result.ok && result.url.hostname, "github.com");
31
- });
32
-
33
- test("accepts https URL for GitLab", () => {
34
- const result = validateRemoteUrl("https://gitlab.com/org/repo.git");
35
- assert.ok(result.ok);
36
- });
37
-
38
- test("accepts https URL with port", () => {
39
- const result = validateRemoteUrl("https://ghe.corp.example.com:8443/org/repo.git");
40
- assert.ok(result.ok);
41
- });
42
-
43
- test("rejects http by default", () => {
44
- const result = validateRemoteUrl("http://github.com/org/repo.git");
45
- assert.ok(!result.ok);
46
- assert.match(result.ok ? "" : result.reason, /http/);
47
- });
48
-
49
- test("accepts http when allowInsecureHttp is true", () => {
50
- const result = validateRemoteUrl("http://gitea.internal/org/repo.git", {
51
- allowInsecureHttp: true,
52
- });
53
- assert.ok(result.ok);
54
- });
55
-
56
- test("rejects file: scheme", () => {
57
- const result = validateRemoteUrl("file:///etc/passwd");
58
- assert.ok(!result.ok);
59
- assert.match(result.ok ? "" : result.reason, /file/i);
60
- });
61
-
62
- test("rejects ext: scheme", () => {
63
- const result = validateRemoteUrl("ext::evil-command");
64
- // This may fail URL parsing or scheme check - either is fine.
65
- assert.ok(!result.ok);
66
- });
67
-
68
- test("rejects git: scheme", () => {
69
- const result = validateRemoteUrl("git://github.com/org/repo.git");
70
- assert.ok(!result.ok);
71
- });
72
-
73
- test("rejects ssh: scheme", () => {
74
- const result = validateRemoteUrl("ssh://git@github.com/org/repo.git");
75
- assert.ok(!result.ok);
76
- });
77
-
78
- test("rejects URL with semicolon", () => {
79
- const result = validateRemoteUrl("https://github.com/org/repo;rm -rf /");
80
- assert.ok(!result.ok);
81
- assert.match(result.ok ? "" : result.reason, /forbidden/i);
82
- });
83
-
84
- test("rejects URL with pipe", () => {
85
- const result = validateRemoteUrl("https://github.com/org/repo|evil");
86
- assert.ok(!result.ok);
87
- });
88
-
89
- test("rejects URL with newline", () => {
90
- const result = validateRemoteUrl("https://github.com/org/repo\nevil");
91
- assert.ok(!result.ok);
92
- });
93
-
94
- test("rejects URL with null byte", () => {
95
- const result = validateRemoteUrl("https://github.com/org/repo\0evil");
96
- assert.ok(!result.ok);
97
- });
98
-
99
- test("rejects URL with backtick", () => {
100
- const result = validateRemoteUrl("https://github.com/org/repo`echo hi`");
101
- assert.ok(!result.ok);
102
- });
103
-
104
- test("rejects unparseable URL", () => {
105
- const result = validateRemoteUrl("not a url at all !!!");
106
- assert.ok(!result.ok);
107
- });
108
-
109
- test("allowedHosts: accepts matching host", () => {
110
- const result = validateRemoteUrl("https://github.com/org/repo.git", {
111
- allowedHosts: ["github.com"],
112
- });
113
- assert.ok(result.ok);
114
- });
115
-
116
- test("allowedHosts: rejects non-matching host", () => {
117
- const result = validateRemoteUrl("https://evil.example.com/org/repo.git", {
118
- allowedHosts: ["github.com", "gitlab.com"],
119
- });
120
- assert.ok(!result.ok);
121
- assert.match(result.ok ? "" : result.reason, /allowed hosts/i);
122
- });
123
-
124
- test("allowedHosts: case-insensitive match", () => {
125
- const result = validateRemoteUrl("https://GitHub.COM/org/repo.git", {
126
- allowedHosts: ["github.com"],
127
- });
128
- assert.ok(result.ok);
129
- });
130
-
131
- test("empty allowedHosts array allows any host", () => {
132
- const result = validateRemoteUrl("https://any-host.example.com/repo.git", {
133
- allowedHosts: [],
134
- });
135
- assert.ok(result.ok);
136
- });
137
- });
138
-
139
- // ----------------------------
140
- // Git fixture tests (skipped if git not available)
141
- // ----------------------------
142
-
143
- let gitOk = false;
144
- let sourceRepo: string;
145
- let cloneDir: string;
146
- let tempRoot: string;
147
-
148
- before(async () => {
149
- try {
150
- await assertGitAvailable();
151
- gitOk = true;
152
- } catch {
153
- gitOk = false;
154
- return;
155
- }
156
-
157
- tempRoot = await mkdtemp(path.join(tmpdir(), "wiki-git-test-"));
158
- sourceRepo = path.join(tempRoot, "source");
159
- cloneDir = path.join(tempRoot, "clone");
160
-
161
- // Initialize a bare-ish source repo with one commit.
162
- await mkdir(sourceRepo, { recursive: true });
163
-
164
- const env = {
165
- ...process.env,
166
- GIT_AUTHOR_NAME: "Test",
167
- GIT_AUTHOR_EMAIL: "test@example.com",
168
- GIT_COMMITTER_NAME: "Test",
169
- GIT_COMMITTER_EMAIL: "test@example.com",
170
- };
171
-
172
- execFileSync("git", ["init"], { cwd: sourceRepo, env });
173
- execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: sourceRepo, env });
174
- execFileSync("git", ["config", "user.name", "Test"], { cwd: sourceRepo, env });
175
-
176
- await writeFile(path.join(sourceRepo, "README.md"), "# Test repo\n");
177
- execFileSync("git", ["add", "."], { cwd: sourceRepo, env });
178
- execFileSync("git", ["commit", "-m", "Initial commit"], { cwd: sourceRepo, env });
179
- });
180
-
181
- after(async () => {
182
- if (tempRoot) {
183
- await rm(tempRoot, { recursive: true, force: true });
184
- }
185
- });
186
-
187
- test("cloneRepo clones a local repo by filesystem path", async () => {
188
- if (!gitOk) {
189
- // Skip inline: just return without asserting
190
- return;
191
- }
192
- // Use local filesystem path directly (not file:// URL, which validateRemoteUrl would reject)
193
- // cloneRepo itself accepts any path; URL validation is the caller's (route layer) responsibility.
194
- await cloneRepo({ remoteUrl: sourceRepo, destDir: cloneDir });
195
- const sha = await headSha(cloneDir);
196
- assert.ok(sha.length === 40, `Expected 40-char SHA, got: ${sha}`);
197
- });
198
-
199
- test("currentBranch returns a branch name after clone", async () => {
200
- if (!gitOk) return;
201
- const branch = await currentBranch(cloneDir);
202
- // Could be 'main' or 'master' depending on git version/config
203
- assert.ok(branch.length > 0, `Expected non-empty branch name, got: '${branch}'`);
204
- assert.notEqual(branch, "HEAD", "Should be on a branch, not detached HEAD");
205
- });
206
-
207
- test("headSha returns consistent SHA", async () => {
208
- if (!gitOk) return;
209
- const sha1 = await headSha(cloneDir);
210
- const sha2 = await headSha(cloneDir);
211
- assert.equal(sha1, sha2);
212
- assert.match(sha1, /^[0-9a-f]{40}$/);
213
- });
214
-
215
- test("pullRepo fast-forwards to a new commit", async () => {
216
- if (!gitOk) return;
217
-
218
- const sha0 = await headSha(cloneDir);
219
-
220
- // Add a second commit to the source repo.
221
- const env = {
222
- ...process.env,
223
- GIT_AUTHOR_NAME: "Test",
224
- GIT_AUTHOR_EMAIL: "test@example.com",
225
- GIT_COMMITTER_NAME: "Test",
226
- GIT_COMMITTER_EMAIL: "test@example.com",
227
- };
228
- await writeFile(path.join(sourceRepo, "second.md"), "second file\n");
229
- execFileSync("git", ["add", "."], { cwd: sourceRepo, env });
230
- execFileSync("git", ["commit", "-m", "Second commit"], { cwd: sourceRepo, env });
231
-
232
- await pullRepo({ rootDir: cloneDir });
233
-
234
- const sha1 = await headSha(cloneDir);
235
- assert.notEqual(sha0, sha1, "SHA should change after pull");
236
- assert.match(sha1, /^[0-9a-f]{40}$/);
237
- });
238
-
239
- test("assertGitAvailable does not throw when git is present", async () => {
240
- if (!gitOk) return;
241
- // Should not throw (and be cached from before() call)
242
- await assert.doesNotReject(() => assertGitAvailable());
243
- });