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,473 +0,0 @@
1
- /**
2
- * Tests for git read features: history, diff, file-info, branches, checkout.
3
- * Covers lib functions and API route handlers.
4
- * Skipped inline (early return) if the git binary is not available.
5
- */
6
- import { test, before, after, describe } 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
- assertGitAvailable,
15
- gitFileHistory,
16
- gitFileDiff,
17
- gitFileInfo,
18
- gitBranches,
19
- gitCheckout,
20
- findEnclosingGitRepo,
21
- } from "../../lib/git.js";
22
-
23
- const gitEnv = {
24
- ...process.env,
25
- GIT_AUTHOR_NAME: "Test User",
26
- GIT_AUTHOR_EMAIL: "test@example.com",
27
- GIT_COMMITTER_NAME: "Test User",
28
- GIT_COMMITTER_EMAIL: "test@example.com",
29
- };
30
-
31
- let gitOk = false;
32
- // Lib test fixture
33
- let tempRoot: string;
34
- let repoDir: string;
35
- let firstSha: string;
36
- let secondSha: string;
37
- // Route test fixture
38
- let tmpHome: string;
39
- let tmpRootDir: string;
40
- let subrepoDir: string;
41
- let routeSha: string;
42
-
43
- before(async () => {
44
- try {
45
- await assertGitAvailable();
46
- gitOk = true;
47
- } catch {
48
- return;
49
- }
50
-
51
- // ── Lib test repo ─────────────────────────────────────────────────────────
52
- tempRoot = await mkdtemp(path.join(tmpdir(), "wiki-git-features-"));
53
- repoDir = path.join(tempRoot, "testrepo");
54
- await mkdir(repoDir, { recursive: true });
55
-
56
- execFileSync("git", ["init"], { cwd: repoDir, env: gitEnv });
57
- execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: repoDir, env: gitEnv });
58
- execFileSync("git", ["config", "user.name", "Test User"], { cwd: repoDir, env: gitEnv });
59
-
60
- await writeFile(path.join(repoDir, "README.md"), "# First\n");
61
- execFileSync("git", ["add", "."], { cwd: repoDir, env: gitEnv });
62
- execFileSync("git", ["commit", "-m", "Initial commit"], { cwd: repoDir, env: gitEnv });
63
- firstSha = execFileSync("git", ["rev-parse", "HEAD"], { cwd: repoDir, env: gitEnv })
64
- .toString().trim();
65
-
66
- await writeFile(path.join(repoDir, "README.md"), "# First\n\nAdded line.\n");
67
- execFileSync("git", ["add", "."], { cwd: repoDir, env: gitEnv });
68
- execFileSync("git", ["commit", "-m", "Second commit"], { cwd: repoDir, env: gitEnv });
69
- secondSha = execFileSync("git", ["rev-parse", "HEAD"], { cwd: repoDir, env: gitEnv })
70
- .toString().trim();
71
-
72
- // ── Route test fixture ─────────────────────────────────────────────────────
73
- tmpHome = await mkdtemp(path.join(tmpdir(), "wiki-git-rt-home-"));
74
- process.env.HOME = tmpHome;
75
- process.env.AUTH_ALLOWED_DOMAIN = "test.local";
76
-
77
- tmpRootDir = await mkdtemp(path.join(tmpdir(), "wiki-git-rt-root-"));
78
- process.env.ROOT_DIR = tmpRootDir;
79
-
80
- const { setRootDir } = await import("../../lib/root-dir.js");
81
- setRootDir(tmpRootDir);
82
-
83
- subrepoDir = path.join(tmpRootDir, "myrepo");
84
- await mkdir(subrepoDir, { recursive: true });
85
- execFileSync("git", ["init"], { cwd: subrepoDir, env: gitEnv });
86
- execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: subrepoDir, env: gitEnv });
87
- execFileSync("git", ["config", "user.name", "Test"], { cwd: subrepoDir, env: gitEnv });
88
- await writeFile(path.join(subrepoDir, "page.md"), "# Page\n");
89
- execFileSync("git", ["add", "."], { cwd: subrepoDir, env: gitEnv });
90
- execFileSync("git", ["commit", "-m", "Init"], { cwd: subrepoDir, env: gitEnv });
91
- routeSha = execFileSync("git", ["rev-parse", "HEAD"], { cwd: subrepoDir, env: gitEnv })
92
- .toString().trim();
93
-
94
- // Outside file for non-git tests
95
- await writeFile(path.join(tmpRootDir, "outside.md"), "# Outside\n");
96
- // Non-git directory for branches 400 test
97
- await mkdir(path.join(tmpRootDir, "notgit"), { recursive: true });
98
- });
99
-
100
- after(async () => {
101
- if (tempRoot) await rm(tempRoot, { recursive: true, force: true });
102
- if (tmpRootDir) await rm(tmpRootDir, { recursive: true, force: true });
103
- if (tmpHome) {
104
- await rm(tmpHome, { recursive: true, force: true });
105
- delete process.env.AUTH_ALLOWED_DOMAIN;
106
- }
107
- });
108
-
109
- // Helper: import makeUserSession lazily so HOME is already set
110
- async function session(): Promise<string> {
111
- const { makeUserSession } = await import("./helpers/auth-session.js");
112
- return makeUserSession();
113
- }
114
-
115
- // ---------------------------------------------------------------------------
116
- // gitFileHistory
117
- // ---------------------------------------------------------------------------
118
-
119
- describe("gitFileHistory", () => {
120
- test("returns commits affecting a file", async () => {
121
- if (!gitOk) return;
122
- const commits = await gitFileHistory(repoDir, "README.md");
123
- assert.equal(commits.length, 2, "two commits for README.md");
124
- assert.equal(commits[0].sha, secondSha);
125
- assert.equal(commits[1].sha, firstSha);
126
- assert.ok(commits[0].shortSha.length === 7);
127
- assert.ok(commits[0].message.length > 0);
128
- assert.ok(commits[0].author.length > 0);
129
- assert.ok(commits[0].date.includes("T"), "date is ISO 8601");
130
- });
131
-
132
- test("returns empty array for unknown file", async () => {
133
- if (!gitOk) return;
134
- const commits = await gitFileHistory(repoDir, "nonexistent.md");
135
- assert.deepEqual(commits, []);
136
- });
137
- });
138
-
139
- // ---------------------------------------------------------------------------
140
- // gitFileDiff
141
- // ---------------------------------------------------------------------------
142
-
143
- describe("gitFileDiff", () => {
144
- test("returns diff for second commit", async () => {
145
- if (!gitOk) return;
146
- const diff = await gitFileDiff(repoDir, "README.md", secondSha);
147
- assert.ok(diff.includes("Added line."), "diff includes added content");
148
- assert.ok(diff.includes("@@"), "diff contains hunk header");
149
- });
150
-
151
- test("returns output for initial commit (no parent)", async () => {
152
- if (!gitOk) return;
153
- const diff = await gitFileDiff(repoDir, "README.md", firstSha);
154
- assert.ok(diff.length > 0, "initial commit produces output");
155
- });
156
- });
157
-
158
- // ---------------------------------------------------------------------------
159
- // gitFileInfo
160
- // ---------------------------------------------------------------------------
161
-
162
- describe("gitFileInfo", () => {
163
- test("returns author and date for latest commit on file", async () => {
164
- if (!gitOk) return;
165
- const info = await gitFileInfo(repoDir, "README.md");
166
- assert.ok(info !== null);
167
- assert.equal(info!.sha, secondSha);
168
- assert.equal(info!.author, "Test User");
169
- assert.ok(info!.date.includes("T"));
170
- });
171
-
172
- test("returns null for file with no git history", async () => {
173
- if (!gitOk) return;
174
- const info = await gitFileInfo(repoDir, "nowhere.md");
175
- assert.equal(info, null);
176
- });
177
- });
178
-
179
- // ---------------------------------------------------------------------------
180
- // gitBranches
181
- // ---------------------------------------------------------------------------
182
-
183
- describe("gitBranches", () => {
184
- test("returns branch list with current marked", async () => {
185
- if (!gitOk) return;
186
- const branches = await gitBranches(repoDir);
187
- assert.ok(branches.length >= 1);
188
- const current = branches.find((b) => b.current);
189
- assert.ok(current, "at least one branch is current");
190
- assert.ok(current!.name.length > 0);
191
- });
192
- });
193
-
194
- // ---------------------------------------------------------------------------
195
- // gitCheckout
196
- // ---------------------------------------------------------------------------
197
-
198
- describe("gitCheckout", () => {
199
- test("rejects invalid branch name", async () => {
200
- if (!gitOk) return;
201
- await assert.rejects(
202
- () => gitCheckout(repoDir, "../../evil"),
203
- /invalid branch/i,
204
- );
205
- });
206
-
207
- test("rejects branch name with semicolon", async () => {
208
- if (!gitOk) return;
209
- await assert.rejects(
210
- () => gitCheckout(repoDir, "main;rm -rf /"),
211
- /invalid branch/i,
212
- );
213
- });
214
-
215
- test("creates and checks out a new branch via git CLI, then switches back", async () => {
216
- if (!gitOk) return;
217
- execFileSync("git", ["checkout", "-b", "feature-test"], { cwd: repoDir, env: gitEnv });
218
- const result = await gitCheckout(repoDir, "feature-test");
219
- assert.equal(result.branch, "feature-test");
220
- assert.match(result.sha, /^[0-9a-f]{40}$/);
221
- // Switch back using git directly to leave repo in clean state
222
- execFileSync("git", ["checkout", "-"], { cwd: repoDir, env: gitEnv });
223
- });
224
- });
225
-
226
- // ---------------------------------------------------------------------------
227
- // findEnclosingGitRepo
228
- // ---------------------------------------------------------------------------
229
-
230
- describe("findEnclosingGitRepo", () => {
231
- test("finds repo for file inside a sub-repo", async () => {
232
- if (!gitOk) return;
233
- const result = await findEnclosingGitRepo(tempRoot, "testrepo/README.md");
234
- assert.ok(result !== null);
235
- assert.equal(result!.repoDir, repoDir);
236
- assert.equal(result!.relFromRepo, "README.md");
237
- });
238
-
239
- test("returns null for file not inside any git repo", async () => {
240
- if (!gitOk) return;
241
- const outsideDir = await mkdtemp(path.join(tmpdir(), "no-git-"));
242
- try {
243
- const result = await findEnclosingGitRepo(outsideDir, "some/file.md");
244
- assert.equal(result, null);
245
- } finally {
246
- await rm(outsideDir, { recursive: true, force: true });
247
- }
248
- });
249
-
250
- test("handles nested path correctly", async () => {
251
- if (!gitOk) return;
252
- await mkdir(path.join(repoDir, "docs"), { recursive: true });
253
- await writeFile(path.join(repoDir, "docs", "note.md"), "note\n");
254
- const result = await findEnclosingGitRepo(tempRoot, "testrepo/docs/note.md");
255
- assert.ok(result !== null);
256
- assert.equal(result!.repoDir, repoDir);
257
- assert.equal(result!.relFromRepo, "docs/note.md");
258
- });
259
- });
260
-
261
- // ---------------------------------------------------------------------------
262
- // Route-level tests
263
- // ---------------------------------------------------------------------------
264
-
265
- test("GET /api/wiki/git-history without auth returns 401", async () => {
266
- if (!gitOk) return;
267
- const { GET } = await import("../../app/api/wiki/git-history/route.js");
268
- const req = new Request("http://localhost:3000/api/wiki/git-history?path=myrepo/page.md");
269
- const res = await GET(req);
270
- assert.equal(res.status, 401);
271
- });
272
-
273
- test("GET /api/wiki/git-history with auth returns commits array", async () => {
274
- if (!gitOk) return;
275
- const { GET } = await import("../../app/api/wiki/git-history/route.js");
276
- const cookie = await session();
277
- const req = new Request("http://localhost:3000/api/wiki/git-history?path=myrepo/page.md", {
278
- headers: { Cookie: cookie },
279
- });
280
- const res = await GET(req);
281
- assert.equal(res.status, 200);
282
- const body = (await res.json()) as { commits: Array<{ sha: string; message: string; author: string; date: string }> };
283
- assert.ok(Array.isArray(body.commits));
284
- assert.ok(body.commits.length >= 1, `expected commits, got ${JSON.stringify(body)}`);
285
- assert.ok(typeof body.commits[0].sha === "string");
286
- assert.ok(typeof body.commits[0].author === "string");
287
- });
288
-
289
- test("GET /api/wiki/git-history with missing path returns 400", async () => {
290
- if (!gitOk) return;
291
- const { GET } = await import("../../app/api/wiki/git-history/route.js");
292
- const cookie = await session();
293
- const req = new Request("http://localhost:3000/api/wiki/git-history", {
294
- headers: { Cookie: cookie },
295
- });
296
- const res = await GET(req);
297
- assert.equal(res.status, 400);
298
- });
299
-
300
- test("GET /api/wiki/git-history for file not in git repo returns empty commits", async () => {
301
- if (!gitOk) return;
302
- const { GET } = await import("../../app/api/wiki/git-history/route.js");
303
- const cookie = await session();
304
- const req = new Request("http://localhost:3000/api/wiki/git-history?path=outside.md", {
305
- headers: { Cookie: cookie },
306
- });
307
- const res = await GET(req);
308
- assert.equal(res.status, 200);
309
- const body = (await res.json()) as { commits: unknown[] };
310
- assert.deepEqual(body.commits, []);
311
- });
312
-
313
- test("GET /api/wiki/git-diff without auth returns 401", async () => {
314
- if (!gitOk) return;
315
- const { GET } = await import("../../app/api/wiki/git-diff/route.js");
316
- const req = new Request(`http://localhost:3000/api/wiki/git-diff?path=myrepo/page.md&sha=${routeSha}`);
317
- const res = await GET(req);
318
- assert.equal(res.status, 401);
319
- });
320
-
321
- test("GET /api/wiki/git-diff with invalid sha returns 400", async () => {
322
- if (!gitOk) return;
323
- const { GET } = await import("../../app/api/wiki/git-diff/route.js");
324
- const cookie = await session();
325
- const req = new Request(
326
- "http://localhost:3000/api/wiki/git-diff?path=myrepo/page.md&sha=not-a-sha!!",
327
- { headers: { Cookie: cookie } },
328
- );
329
- const res = await GET(req);
330
- assert.equal(res.status, 400);
331
- });
332
-
333
- test("GET /api/wiki/git-diff returns diff text", async () => {
334
- if (!gitOk) return;
335
- const { GET } = await import("../../app/api/wiki/git-diff/route.js");
336
- const cookie = await session();
337
- const req = new Request(
338
- `http://localhost:3000/api/wiki/git-diff?path=myrepo/page.md&sha=${routeSha}`,
339
- { headers: { Cookie: cookie } },
340
- );
341
- const res = await GET(req);
342
- assert.equal(res.status, 200, `expected 200, got ${res.status}`);
343
- const body = (await res.json()) as { diff: string };
344
- assert.ok(typeof body.diff === "string");
345
- assert.ok(body.diff.length > 0, "diff should not be empty");
346
- });
347
-
348
- test("GET /api/wiki/git-file-info without auth returns 401", async () => {
349
- if (!gitOk) return;
350
- const { GET } = await import("../../app/api/wiki/git-file-info/route.js");
351
- const req = new Request("http://localhost:3000/api/wiki/git-file-info?path=myrepo/page.md");
352
- const res = await GET(req);
353
- assert.equal(res.status, 401);
354
- });
355
-
356
- test("GET /api/wiki/git-file-info returns author and date", async () => {
357
- if (!gitOk) return;
358
- const { GET } = await import("../../app/api/wiki/git-file-info/route.js");
359
- const cookie = await session();
360
- const req = new Request("http://localhost:3000/api/wiki/git-file-info?path=myrepo/page.md", {
361
- headers: { Cookie: cookie },
362
- });
363
- const res = await GET(req);
364
- assert.equal(res.status, 200, `expected 200, got ${res.status}`);
365
- const body = (await res.json()) as { info: { sha: string; author: string; date: string } | null };
366
- assert.ok(body.info !== null, `expected info, got ${JSON.stringify(body)}`);
367
- assert.ok(typeof body.info!.sha === "string");
368
- assert.ok(typeof body.info!.author === "string");
369
- assert.ok(body.info!.date.includes("T"));
370
- });
371
-
372
- test("GET /api/wiki/git-file-info for non-git file returns null info", async () => {
373
- if (!gitOk) return;
374
- const { GET } = await import("../../app/api/wiki/git-file-info/route.js");
375
- const cookie = await session();
376
- const req = new Request("http://localhost:3000/api/wiki/git-file-info?path=outside.md", {
377
- headers: { Cookie: cookie },
378
- });
379
- const res = await GET(req);
380
- assert.equal(res.status, 200);
381
- const body = (await res.json()) as { info: null };
382
- assert.equal(body.info, null);
383
- });
384
-
385
- test("GET /api/wiki/git-branches without auth returns 401", async () => {
386
- if (!gitOk) return;
387
- const { GET } = await import("../../app/api/wiki/git-branches/route.js");
388
- const req = new Request("http://localhost:3000/api/wiki/git-branches?path=myrepo");
389
- const res = await GET(req);
390
- assert.equal(res.status, 401);
391
- });
392
-
393
- test("GET /api/wiki/git-branches returns branch list", async () => {
394
- if (!gitOk) return;
395
- const { GET } = await import("../../app/api/wiki/git-branches/route.js");
396
- const cookie = await session();
397
- const req = new Request("http://localhost:3000/api/wiki/git-branches?path=myrepo", {
398
- headers: { Cookie: cookie },
399
- });
400
- const res = await GET(req);
401
- assert.equal(res.status, 200, `expected 200, got ${res.status}`);
402
- const body = (await res.json()) as { branches: Array<{ name: string; current: boolean }>; current: string };
403
- assert.ok(Array.isArray(body.branches));
404
- assert.ok(body.branches.length >= 1, `expected branches, got ${JSON.stringify(body)}`);
405
- assert.ok(typeof body.current === "string");
406
- const cur = body.branches.find((b) => b.current);
407
- assert.ok(cur, "at least one branch marked as current");
408
- });
409
-
410
- test("GET /api/wiki/git-branches for non-repo returns 400", async () => {
411
- if (!gitOk) return;
412
- const { GET } = await import("../../app/api/wiki/git-branches/route.js");
413
- const cookie = await session();
414
- const req = new Request("http://localhost:3000/api/wiki/git-branches?path=notgit", {
415
- headers: { Cookie: cookie },
416
- });
417
- const res = await GET(req);
418
- assert.equal(res.status, 400);
419
- });
420
-
421
- test("POST /api/wiki/git-checkout without auth returns 401", async () => {
422
- if (!gitOk) return;
423
- const { POST } = await import("../../app/api/wiki/git-checkout/route.js");
424
- const req = new Request("http://localhost:3000/api/wiki/git-checkout", {
425
- method: "POST",
426
- headers: { "Content-Type": "application/json" },
427
- body: JSON.stringify({ path: "myrepo", branch: "main" }),
428
- });
429
- const res = await POST(req);
430
- assert.equal(res.status, 401);
431
- });
432
-
433
- test("POST /api/wiki/git-checkout with invalid branch name returns 400", async () => {
434
- if (!gitOk) return;
435
- const { POST } = await import("../../app/api/wiki/git-checkout/route.js");
436
- const cookie = await session();
437
- const req = new Request("http://localhost:3000/api/wiki/git-checkout", {
438
- method: "POST",
439
- headers: {
440
- "Content-Type": "application/json",
441
- Cookie: cookie,
442
- Origin: "http://localhost:3000",
443
- },
444
- body: JSON.stringify({ path: "myrepo", branch: "../evil" }),
445
- });
446
- const res = await POST(req);
447
- assert.equal(res.status, 400);
448
- });
449
-
450
- test("POST /api/wiki/git-checkout on current branch succeeds", async () => {
451
- if (!gitOk) return;
452
- const { POST } = await import("../../app/api/wiki/git-checkout/route.js");
453
- const cookie = await session();
454
- const currentBranchName = execFileSync(
455
- "git", ["rev-parse", "--abbrev-ref", "HEAD"],
456
- { cwd: subrepoDir, env: gitEnv },
457
- ).toString().trim();
458
- const req = new Request("http://localhost:3000/api/wiki/git-checkout", {
459
- method: "POST",
460
- headers: {
461
- "Content-Type": "application/json",
462
- Cookie: cookie,
463
- Origin: "http://localhost:3000",
464
- },
465
- body: JSON.stringify({ path: "myrepo", branch: currentBranchName }),
466
- });
467
- const res = await POST(req);
468
- assert.equal(res.status, 200, `expected 200, got ${res.status}`);
469
- const body = (await res.json()) as { ok: boolean; branch: string; sha: string };
470
- assert.equal(body.ok, true);
471
- assert.equal(body.branch, currentBranchName);
472
- assert.match(body.sha, /^[0-9a-f]{40}$/);
473
- });
@@ -1,138 +0,0 @@
1
- /**
2
- * Tests for src/lib/git-secrets.ts
3
- * PAT store: 0600 file, set/get/delete round-trip, isolation.
4
- */
5
- import { test, before, after } from "node:test";
6
- import assert from "node:assert/strict";
7
- import { mkdtemp, rm } from "node:fs/promises";
8
- import { statSync, existsSync } from "node:fs";
9
- import { tmpdir } from "node:os";
10
- import path from "node:path";
11
-
12
- // Override HOME before importing the module so dataDir() picks up the temp dir.
13
- let tmpHome: string;
14
- let originalHome: string | undefined;
15
-
16
- before(async () => {
17
- tmpHome = await mkdtemp(path.join(tmpdir(), "wiki-git-secrets-test-"));
18
- originalHome = process.env.HOME;
19
- process.env.HOME = tmpHome;
20
- });
21
-
22
- after(async () => {
23
- if (originalHome !== undefined) process.env.HOME = originalHome;
24
- await rm(tmpHome, { recursive: true, force: true });
25
- });
26
-
27
- // Import lazily so HOME override takes effect before module-level code runs.
28
- async function getModule() {
29
- // Use dynamic import with a cache-busting trick if needed.
30
- // In practice the HOME override happens before any import here.
31
- return import("../../lib/git-secrets.js");
32
- }
33
-
34
- test("genTokenRef returns a string starting with git_", async () => {
35
- const { genTokenRef } = await getModule();
36
- const ref = genTokenRef();
37
- assert.ok(ref.startsWith("git_"), `Expected 'git_' prefix, got: ${ref}`);
38
- assert.ok(ref.length > 5, "ref should be reasonably long");
39
- });
40
-
41
- test("genTokenRef is unique across calls", async () => {
42
- const { genTokenRef } = await getModule();
43
- const refs = new Set(Array.from({ length: 20 }, () => genTokenRef()));
44
- assert.equal(refs.size, 20, "refs should be unique");
45
- });
46
-
47
- test("setToken then getToken returns the token", async () => {
48
- const { genTokenRef, setToken, getToken } = await getModule();
49
- const ref = genTokenRef();
50
- await setToken(ref, "ghp_testtoken123");
51
- const retrieved = await getToken(ref);
52
- assert.equal(retrieved, "ghp_testtoken123");
53
- });
54
-
55
- test("getToken returns null for unknown ref", async () => {
56
- const { getToken } = await getModule();
57
- const result = await getToken("git_nonexistent_ref_xyz");
58
- assert.equal(result, null);
59
- });
60
-
61
- test("getToken returns null when secrets file does not exist", async () => {
62
- // Use a brand-new temp home with no secrets file.
63
- const freshHome = await mkdtemp(path.join(tmpdir(), "wiki-git-fresh-"));
64
- const savedHome = process.env.HOME;
65
- try {
66
- process.env.HOME = freshHome;
67
- // Re-import to pick up new HOME.
68
- const { getToken } = await import("../../lib/git-secrets.js");
69
- const result = await getToken("git_anything");
70
- assert.equal(result, null);
71
- } finally {
72
- process.env.HOME = savedHome;
73
- await rm(freshHome, { recursive: true, force: true });
74
- }
75
- });
76
-
77
- test("secrets file is created with mode 0600", async () => {
78
- const freshHome = await mkdtemp(path.join(tmpdir(), "wiki-git-perm-"));
79
- const savedHome = process.env.HOME;
80
- try {
81
- process.env.HOME = freshHome;
82
- const mod = await import("../../lib/git-secrets.js");
83
- const ref = mod.genTokenRef();
84
- await mod.setToken(ref, "token_perm_test");
85
- const secretsFile = path.join(freshHome, ".wiki-viewer", "git-secrets.json");
86
- assert.ok(existsSync(secretsFile), "secrets file should exist after setToken");
87
- const mode = statSync(secretsFile).mode & 0o777;
88
- assert.equal(mode, 0o600, `Expected 0600, got ${mode.toString(8)}`);
89
- } finally {
90
- process.env.HOME = savedHome;
91
- await rm(freshHome, { recursive: true, force: true });
92
- }
93
- });
94
-
95
- test("deleteToken removes the token", async () => {
96
- const { genTokenRef, setToken, getToken, deleteToken } = await getModule();
97
- const ref = genTokenRef();
98
- await setToken(ref, "ghp_to_delete");
99
- await deleteToken(ref);
100
- const result = await getToken(ref);
101
- assert.equal(result, null);
102
- });
103
-
104
- test("deleteToken is a no-op for nonexistent ref", async () => {
105
- const { deleteToken, getToken } = await getModule();
106
- // Should not throw
107
- await deleteToken("git_does_not_exist_abc");
108
- assert.equal(await getToken("git_does_not_exist_abc"), null);
109
- });
110
-
111
- test("multiple tokens stored independently", async () => {
112
- const { genTokenRef, setToken, getToken } = await getModule();
113
- const ref1 = genTokenRef();
114
- const ref2 = genTokenRef();
115
- await setToken(ref1, "token_one");
116
- await setToken(ref2, "token_two");
117
- assert.equal(await getToken(ref1), "token_one");
118
- assert.equal(await getToken(ref2), "token_two");
119
- });
120
-
121
- test("overwriting a token stores the new value", async () => {
122
- const { genTokenRef, setToken, getToken } = await getModule();
123
- const ref = genTokenRef();
124
- await setToken(ref, "old_token");
125
- await setToken(ref, "new_token");
126
- assert.equal(await getToken(ref), "new_token");
127
- });
128
-
129
- test("deleting one token does not affect others", async () => {
130
- const { genTokenRef, setToken, getToken, deleteToken } = await getModule();
131
- const ref1 = genTokenRef();
132
- const ref2 = genTokenRef();
133
- await setToken(ref1, "keep_me");
134
- await setToken(ref2, "delete_me");
135
- await deleteToken(ref2);
136
- assert.equal(await getToken(ref1), "keep_me");
137
- assert.equal(await getToken(ref2), null);
138
- });