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,376 +0,0 @@
1
- /**
2
- * FTS5 full-text search indexer tests.
3
- *
4
- * Drives the indexer directly (ensureIndexer + initial scan, plus indexFile /
5
- * deleteFile to simulate chokidar events) so assertions are deterministic and
6
- * do not depend on filesystem-watcher timing.
7
- */
8
- import { test, before, after, afterEach } from "node:test";
9
- import assert from "node:assert/strict";
10
- import { mkdtemp, rm, writeFile, mkdir, symlink } from "node:fs/promises";
11
- import { tmpdir } from "node:os";
12
- import path from "node:path";
13
-
14
- let tmpHome: string;
15
- let rootA: string;
16
- let rootB: string;
17
-
18
- before(async () => {
19
- tmpHome = await mkdtemp(path.join(tmpdir(), "search-test-home-"));
20
- rootA = await mkdtemp(path.join(tmpdir(), "search-test-rootA-"));
21
- rootB = await mkdtemp(path.join(tmpdir(), "search-test-rootB-"));
22
- process.env.HOME = tmpHome;
23
- });
24
-
25
- after(async () => {
26
- await rm(tmpHome, { recursive: true, force: true });
27
- await rm(rootA, { recursive: true, force: true });
28
- await rm(rootB, { recursive: true, force: true });
29
- });
30
-
31
- import {
32
- ensureIndexer,
33
- ftsSearch,
34
- resolveBacklinks,
35
- indexFile,
36
- deleteFile,
37
- purgeWorkspace,
38
- _resetIndexer,
39
- _waitForIdle,
40
- } from "../../lib/search/indexer.js";
41
- import { _resetSearchDb, getSearchDb } from "../../lib/search/search-db.js";
42
- import { _resetWatcherPool } from "../../lib/search/watcher-pool.js";
43
- import { sanitizeFtsQuery } from "../../lib/search/sanitize.js";
44
- import { readFileSync } from "node:fs";
45
-
46
- afterEach(() => {
47
- _resetIndexer();
48
- _resetWatcherPool();
49
- // Clear all rows so each test starts clean (cheaper than rebuilding the DB).
50
- try {
51
- const db = getSearchDb();
52
- db.exec("DELETE FROM docs; DELETE FROM docs_meta;");
53
- } catch {
54
- /* db may not exist yet */
55
- }
56
- });
57
-
58
- async function scan(wsId: string, root: string): Promise<void> {
59
- await ensureIndexer(wsId, root);
60
- await _waitForIdle(wsId);
61
- }
62
-
63
- test("indexes a markdown file and finds it", async () => {
64
- await writeFile(path.join(rootA, "notes.md"), "the quick brown fox");
65
- await scan("wsA", rootA);
66
- const res = ftsSearch("wsA", "fox", 10);
67
- assert.equal(res.matches.length, 1);
68
- assert.equal(res.matches[0]!.path, "notes.md");
69
- assert.match(res.matches[0]!.snippet, /<mark>fox<\/mark>/);
70
- });
71
-
72
- test("BM25 ordering: denser document ranks first", async () => {
73
- await writeFile(path.join(rootA, "sparse.md"), "alpha one two three four");
74
- await writeFile(
75
- path.join(rootA, "dense.md"),
76
- "alpha alpha alpha alpha alpha",
77
- );
78
- await scan("wsA", rootA);
79
- const res = ftsSearch("wsA", "alpha", 10);
80
- assert.equal(res.matches.length, 2);
81
- assert.equal(res.matches[0]!.path, "dense.md");
82
- });
83
-
84
- test("snippet contains <mark> highlight", async () => {
85
- const words = Array.from({ length: 200 }, (_, i) =>
86
- i === 100 ? "needle" : `word${i}`,
87
- ).join(" ");
88
- await writeFile(path.join(rootA, "long.md"), words);
89
- await scan("wsA", rootA);
90
- const res = ftsSearch("wsA", "needle", 10);
91
- assert.equal(res.matches.length, 1);
92
- assert.match(res.matches[0]!.snippet, /<mark>needle<\/mark>/);
93
- });
94
-
95
- test("workspace isolation: a doc in A never appears in a B query", async () => {
96
- await writeFile(path.join(rootA, "secret.md"), "topsecretalpha");
97
- await writeFile(path.join(rootB, "secret.md"), "topsecretbeta");
98
- await scan("wsA", rootA);
99
- await scan("wsB", rootB);
100
-
101
- assert.equal(ftsSearch("wsA", "topsecretbeta", 10).matches.length, 0);
102
- assert.equal(ftsSearch("wsB", "topsecretalpha", 10).matches.length, 0);
103
- assert.equal(ftsSearch("wsA", "topsecretalpha", 10).matches.length, 1);
104
- assert.equal(ftsSearch("wsB", "topsecretbeta", 10).matches.length, 1);
105
- });
106
-
107
- test("incremental update on file change", async () => {
108
- const p = path.join(rootA, "x.md");
109
- await writeFile(p, "foofoo");
110
- await scan("wsA", rootA);
111
- assert.equal(ftsSearch("wsA", "foofoo", 10).matches.length, 1);
112
-
113
- await writeFile(p, "barbar");
114
- await indexFile("wsA", rootA, "x.md");
115
- assert.equal(ftsSearch("wsA", "foofoo", 10).matches.length, 0);
116
- assert.equal(ftsSearch("wsA", "barbar", 10).matches.length, 1);
117
- });
118
-
119
- test("deleted file no longer matches", async () => {
120
- await writeFile(path.join(rootA, "gone.md"), "deletetoken");
121
- await scan("wsA", rootA);
122
- assert.equal(ftsSearch("wsA", "deletetoken", 10).matches.length, 1);
123
-
124
- await deleteFile("wsA", "gone.md");
125
- assert.equal(ftsSearch("wsA", "deletetoken", 10).matches.length, 0);
126
-
127
- const db = getSearchDb();
128
- const row = db
129
- .prepare("SELECT COUNT(*) AS n FROM docs_meta WHERE ws = ? AND path = ?")
130
- .get("wsA", "gone.md") as { n: number };
131
- assert.equal(row.n, 0);
132
- });
133
-
134
- test("frontmatter is searchable", async () => {
135
- await writeFile(
136
- path.join(rootA, "fm.md"),
137
- "---\ntitle: ImportantDoc\ntags: [alphatag, betatag]\n---\nbody text",
138
- );
139
- await scan("wsA", rootA);
140
- assert.equal(ftsSearch("wsA", "ImportantDoc", 10).matches.length, 1);
141
- assert.equal(ftsSearch("wsA", "alphatag", 10).matches.length, 1);
142
- });
143
-
144
- test("non-text file: filename indexed, binary body skipped", async () => {
145
- // PNG magic header + random-ish bytes (contains a null byte -> binary).
146
- const buf = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x00, 0x01, 0x02, 0x03]);
147
- await writeFile(path.join(rootA, "diagram.png"), buf);
148
- await scan("wsA", rootA);
149
- assert.equal(ftsSearch("wsA", "diagram", 10).matches.length, 1);
150
- });
151
-
152
- test("oversize file body skipped, filename still indexed", async () => {
153
- const big = "needlebig ".repeat(150_000); // > 1 MiB
154
- await writeFile(path.join(rootA, "huge.txt"), big);
155
- await scan("wsA", rootA);
156
- assert.equal(ftsSearch("wsA", "needlebig", 10).matches.length, 0);
157
- assert.equal(ftsSearch("wsA", "huge", 10).matches.length, 1);
158
- });
159
-
160
- test("denied paths (.proof, .git) skipped", async () => {
161
- await mkdir(path.join(rootA, ".proof"), { recursive: true });
162
- await mkdir(path.join(rootA, ".git"), { recursive: true });
163
- await writeFile(path.join(rootA, ".proof", "foo.md"), "prooftoken");
164
- await writeFile(path.join(rootA, ".git", "HEAD"), "githeadtoken");
165
- await writeFile(path.join(rootA, "real.md"), "realtoken");
166
- await scan("wsA", rootA);
167
- assert.equal(ftsSearch("wsA", "prooftoken", 10).matches.length, 0);
168
- assert.equal(ftsSearch("wsA", "githeadtoken", 10).matches.length, 0);
169
- assert.equal(ftsSearch("wsA", "realtoken", 10).matches.length, 1);
170
- });
171
-
172
- test("app dir contents are not indexed (node-app and static app)", async () => {
173
- // node-app: directory with package.json
174
- await mkdir(path.join(rootA, "my-app"), { recursive: true });
175
- await writeFile(path.join(rootA, "my-app", "package.json"), "{}");
176
- await writeFile(path.join(rootA, "my-app", "index.js"), "appinnertoken");
177
- // static app: directory with index.html
178
- await mkdir(path.join(rootA, "site"), { recursive: true });
179
- await writeFile(path.join(rootA, "site", "index.html"), "sitehtmltoken");
180
- await writeFile(path.join(rootA, "site", "app.js"), "siteinnertoken");
181
- // a normal note that must still be searchable
182
- await writeFile(path.join(rootA, "note.md"), "normalnotetoken");
183
- await scan("wsA", rootA);
184
-
185
- assert.equal(ftsSearch("wsA", "appinnertoken", 10).matches.length, 0);
186
- assert.equal(ftsSearch("wsA", "sitehtmltoken", 10).matches.length, 0);
187
- assert.equal(ftsSearch("wsA", "siteinnertoken", 10).matches.length, 0);
188
- assert.equal(ftsSearch("wsA", "normalnotetoken", 10).matches.length, 1);
189
- });
190
-
191
- test("symlink escaping the workspace is not indexed", async () => {
192
- // A secret file outside the workspace, reachable only via an in-root symlink.
193
- const outside = await mkdtemp(path.join(tmpdir(), "search-test-outside-"));
194
- await writeFile(path.join(outside, "leak.md"), "escapedsecrettoken");
195
- try {
196
- await symlink(
197
- path.join(outside, "leak.md"),
198
- path.join(rootA, "link.md"),
199
- );
200
- } catch {
201
- // Platform without symlink permission: skip.
202
- await rm(outside, { recursive: true, force: true });
203
- return;
204
- }
205
- await scan("wsA", rootA);
206
- // The symlinked-out content must never be searchable.
207
- assert.equal(ftsSearch("wsA", "escapedsecrettoken", 10).matches.length, 0);
208
- await rm(outside, { recursive: true, force: true });
209
- });
210
-
211
- test("purgeWorkspace removes all rows for that ws", async () => {
212
- await writeFile(path.join(rootA, "a.md"), "purgetoken one");
213
- await writeFile(path.join(rootA, "b.md"), "purgetoken two");
214
- await scan("wsA", rootA);
215
- assert.equal(ftsSearch("wsA", "purgetoken", 10).matches.length, 2);
216
-
217
- await purgeWorkspace("wsA");
218
- assert.equal(ftsSearch("wsA", "purgetoken", 10).matches.length, 0);
219
-
220
- const db = getSearchDb();
221
- const row = db
222
- .prepare("SELECT COUNT(*) AS n FROM docs_meta WHERE ws = ?")
223
- .get("wsA") as { n: number };
224
- assert.equal(row.n, 0);
225
- });
226
-
227
- test("empty / whitespace / punctuation-only query returns empty without throwing", () => {
228
- assert.deepEqual(ftsSearch("wsA", "", 10), { matches: [], truncated: false });
229
- assert.deepEqual(ftsSearch("wsA", " ", 10), {
230
- matches: [],
231
- truncated: false,
232
- });
233
- assert.deepEqual(ftsSearch("wsA", "***", 10), {
234
- matches: [],
235
- truncated: false,
236
- });
237
- });
238
-
239
- test("sanitizer neutralizes FTS5 operators", () => {
240
- assert.equal(sanitizeFtsQuery("alpha AND beta"), '"alpha" "AND" "beta"');
241
- assert.equal(sanitizeFtsQuery("foo NEAR bar"), '"foo" "NEAR" "bar"');
242
- // Quotes and semicolons are stripped to safe tokens.
243
- assert.equal(sanitizeFtsQuery('"; DROP docs'), '"DROP" "docs"');
244
- // Prefix star preserved.
245
- assert.equal(sanitizeFtsQuery("devel*"), '"devel"*');
246
- });
247
-
248
- test("operator-keyword query still searches literally and does not throw", async () => {
249
- await writeFile(path.join(rootA, "lit.md"), "this and that");
250
- await scan("wsA", rootA);
251
- // "and" is quoted by the sanitizer, so this matches the literal word.
252
- const res = ftsSearch("wsA", "and", 10);
253
- assert.equal(res.matches.length, 1);
254
- });
255
-
256
- test("porter stemmer collapses inflections", async () => {
257
- await writeFile(path.join(rootA, "stem.md"), "running fast");
258
- await scan("wsA", rootA);
259
- assert.equal(ftsSearch("wsA", "run", 10).matches.length, 1);
260
- });
261
-
262
- test("diacritic folding: café matches cafe", async () => {
263
- await writeFile(path.join(rootA, "dia.md"), "the cafe is open");
264
- await scan("wsA", rootA);
265
- assert.equal(ftsSearch("wsA", "café", 10).matches.length, 1);
266
- });
267
-
268
- test("prefix search with * finds longer words", async () => {
269
- await writeFile(path.join(rootA, "pre.md"), "developer notes");
270
- await scan("wsA", rootA);
271
- assert.equal(ftsSearch("wsA", "devel*", 10).matches.length, 1);
272
- });
273
-
274
- test("concurrent ensureIndexer is deduped (single scan)", async () => {
275
- await writeFile(path.join(rootA, "dedupe.md"), "dedupetoken");
276
- const [a, b] = [
277
- ensureIndexer("wsA", rootA),
278
- ensureIndexer("wsA", rootA),
279
- ];
280
- await Promise.all([a, b]);
281
- await _waitForIdle("wsA");
282
- const db = getSearchDb();
283
- const row = db
284
- .prepare("SELECT COUNT(*) AS n FROM docs WHERE ws = ? AND path = ?")
285
- .get("wsA", "dedupe.md") as { n: number };
286
- assert.equal(row.n, 1); // not double-inserted
287
- });
288
-
289
- test("unchanged file (same size+mtime) is not re-indexed", async () => {
290
- const p = path.join(rootA, "stable.md");
291
- await writeFile(p, "stabletoken");
292
- await scan("wsA", rootA);
293
- const db = getSearchDb();
294
- const first = db
295
- .prepare("SELECT indexed_at FROM docs_meta WHERE ws = ? AND path = ?")
296
- .get("wsA", "stable.md") as { indexed_at: string };
297
-
298
- await new Promise((r) => setTimeout(r, 5));
299
- await indexFile("wsA", rootA, "stable.md"); // no file change
300
- const second = db
301
- .prepare("SELECT indexed_at FROM docs_meta WHERE ws = ? AND path = ?")
302
- .get("wsA", "stable.md") as { indexed_at: string };
303
- assert.equal(first.indexed_at, second.indexed_at);
304
- });
305
-
306
- test("rename via delete+add keeps only the new path", async () => {
307
- await writeFile(path.join(rootA, "old.md"), "renametoken");
308
- await scan("wsA", rootA);
309
- await deleteFile("wsA", "old.md");
310
- await writeFile(path.join(rootA, "new.md"), "renametoken");
311
- await indexFile("wsA", rootA, "new.md");
312
- const res = ftsSearch("wsA", "renametoken", 10);
313
- assert.equal(res.matches.length, 1);
314
- assert.equal(res.matches[0]!.path, "new.md");
315
- });
316
-
317
- test("resolveBacklinks confirms literal [[slug]] links, drops mere mentions", async () => {
318
- // target.md is the page being linked to (slug = "target").
319
- await writeFile(path.join(rootA, "target.md"), "I am the target page.");
320
- // linker.md has a real wiki-link.
321
- await writeFile(path.join(rootA, "linker.md"), "See [[target]] for details.");
322
- // alias.md links with an alias form.
323
- await writeFile(path.join(rootA, "alias.md"), "Read [[target|the target]] now.");
324
- // mention.md merely says the word, no link → must be excluded.
325
- await writeFile(path.join(rootA, "mention.md"), "The target was reached.");
326
- await scan("wsA", rootA);
327
-
328
- const links = resolveBacklinks("wsA", "target", "target.md", 50);
329
- const paths = links.map((b) => b.path).sort();
330
- assert.deepEqual(paths, ["alias.md", "linker.md"]);
331
- });
332
-
333
- test("resolveBacklinks excludes the page itself and non-md files", async () => {
334
- await writeFile(path.join(rootA, "self.md"), "[[self]] self-reference and stuff");
335
- await writeFile(path.join(rootA, "note.txt"), "[[self]] in a text file");
336
- await writeFile(path.join(rootA, "other.md"), "links to [[self]] here");
337
- await scan("wsA", rootA);
338
-
339
- const links = resolveBacklinks("wsA", "self", "self.md", 50);
340
- assert.deepEqual(links.map((b) => b.path), ["other.md"]);
341
- });
342
-
343
- test("resolveBacklinks is ws-isolated", async () => {
344
- await writeFile(path.join(rootA, "a.md"), "[[shared]] link in A");
345
- await writeFile(path.join(rootB, "b.md"), "[[shared]] link in B");
346
- await scan("wsA", rootA);
347
- await scan("wsB", rootB);
348
-
349
- assert.deepEqual(resolveBacklinks("wsA", "shared", "", 50).map((b) => b.path), ["a.md"]);
350
- assert.deepEqual(resolveBacklinks("wsB", "shared", "", 50).map((b) => b.path), ["b.md"]);
351
- });
352
-
353
- test("DEFENSIVE: every 'FROM docs' in indexer.ts is ws-scoped", () => {
354
- const raw = readFileSync(
355
- new URL("../../lib/search/indexer.ts", import.meta.url),
356
- "utf-8",
357
- );
358
- // Strip block and line comments so prose mentioning "FROM docs" is ignored;
359
- // only real SQL counts.
360
- const src = raw
361
- .replace(/\/\*[\s\S]*?\*\//g, "")
362
- .replace(/\/\/.*$/gm, "");
363
- // Find each SELECT/DELETE ... FROM docs and assert a ws filter follows.
364
- const re = /FROM docs\b([\s\S]{0,120})/g;
365
- let m: RegExpExecArray | null;
366
- let count = 0;
367
- while ((m = re.exec(src)) !== null) {
368
- count++;
369
- assert.match(
370
- m[1]!,
371
- /ws\s*=\s*\?/,
372
- `A 'FROM docs' query is missing a ws filter:\n${m[0]}`,
373
- );
374
- }
375
- assert.ok(count >= 1, "expected at least one 'FROM docs' query");
376
- });
@@ -1,177 +0,0 @@
1
- /**
2
- * Tests for moveSidecar, deleteSidecar, and wiki/move sidecar bug fix (R3).
3
- */
4
- import { test, before, after } from "node:test";
5
- import assert from "node:assert/strict";
6
- import { mkdtemp, rm, writeFile, mkdir, stat, access } from "node:fs/promises";
7
- import { tmpdir } from "node:os";
8
- import path from "node:path";
9
-
10
- import {
11
- moveSidecar,
12
- deleteSidecar,
13
- writeSidecar,
14
- readSidecar,
15
- emptySidecar,
16
- sidecarPath,
17
- } from "../../lib/proof/sidecar.js";
18
-
19
- let tmpRoot: string;
20
-
21
- before(async () => {
22
- tmpRoot = await mkdtemp(path.join(tmpdir(), "wiki-sidecar-lifecycle-"));
23
- });
24
-
25
- after(async () => {
26
- await rm(tmpRoot, { recursive: true, force: true });
27
- });
28
-
29
- // --- moveSidecar ---
30
-
31
- test("moveSidecar: moves sidecar file to new path", async () => {
32
- const from = "alpha.md";
33
- const to = "renamed/alpha.md";
34
-
35
- const sc = emptySidecar(from);
36
- sc.revision = 42;
37
- await writeSidecar(tmpRoot, from, sc);
38
-
39
- const srcPath = sidecarPath(tmpRoot, from);
40
- const destPath = sidecarPath(tmpRoot, to);
41
-
42
- await moveSidecar(tmpRoot, from, to);
43
-
44
- // Source gone
45
- await assert.rejects(() => access(srcPath), "source sidecar should be gone");
46
- // Dest present and correct
47
- const moved = await readSidecar(tmpRoot, to);
48
- assert.ok(moved, "destination sidecar should exist");
49
- assert.equal(moved!.revision, 42);
50
- });
51
-
52
- test("moveSidecar: no-op when sidecar does not exist", async () => {
53
- // Should not throw
54
- await moveSidecar(tmpRoot, "nonexistent.md", "also-nonexistent.md");
55
- });
56
-
57
- test("moveSidecar: creates intermediate dirs for destination", async () => {
58
- const from = "flat.md";
59
- const to = "deep/nested/dir/flat.md";
60
-
61
- const sc = emptySidecar(from);
62
- await writeSidecar(tmpRoot, from, sc);
63
-
64
- await moveSidecar(tmpRoot, from, to);
65
-
66
- const moved = await readSidecar(tmpRoot, to);
67
- assert.ok(moved, "destination sidecar should exist even in deep dir");
68
- });
69
-
70
- // --- deleteSidecar ---
71
-
72
- test("deleteSidecar: deletes sidecar file", async () => {
73
- const mdPath = "to-delete.md";
74
- const sc = emptySidecar(mdPath);
75
- await writeSidecar(tmpRoot, mdPath, sc);
76
-
77
- const filePath = sidecarPath(tmpRoot, mdPath);
78
- // Verify it exists first
79
- await access(filePath); // throws if missing
80
-
81
- await deleteSidecar(tmpRoot, mdPath);
82
-
83
- await assert.rejects(() => access(filePath), "sidecar should be deleted");
84
- });
85
-
86
- test("deleteSidecar: no-op when sidecar does not exist", async () => {
87
- // Should not throw
88
- await deleteSidecar(tmpRoot, "never-existed.md");
89
- });
90
-
91
- // --- wiki/move route sidecar fix ---
92
-
93
- test("wiki/move: moves sidecar alongside .md file rename", async () => {
94
- // Set up isolated tmp env
95
- const home = await mkdtemp(path.join(tmpdir(), "wiki-move-home-"));
96
- const root = await mkdtemp(path.join(tmpdir(), "wiki-move-root-"));
97
-
98
- try {
99
- process.env.HOME = home;
100
- process.env.ROOT_DIR = root;
101
- const { setRootDir } = await import("../../lib/root-dir.js");
102
- setRootDir(root);
103
-
104
- const { makeUserSession } = await import("./helpers/auth-session.js");
105
- const { POST } = await import("../../app/api/wiki/move/route.js");
106
-
107
- // Create a .md file + sidecar
108
- const fromRel = "moveme.md";
109
- const toRel = "moved-target.md";
110
- await writeFile(path.join(root, fromRel), "# Hello\n", "utf-8");
111
-
112
- const sc = emptySidecar(fromRel);
113
- sc.revision = 7;
114
- await writeSidecar(root, fromRel, sc);
115
-
116
- // Make an authenticated request
117
- const cookie = await makeUserSession();
118
- const req = new Request("http://localhost/api/wiki/move", {
119
- method: "POST",
120
- headers: {
121
- "Content-Type": "application/json",
122
- Cookie: cookie,
123
- Origin: "http://localhost",
124
- },
125
- body: JSON.stringify({ from: fromRel, to: toRel }),
126
- });
127
-
128
- const res = await POST(req);
129
- assert.equal(res.status, 200, "move should succeed");
130
-
131
- // Source sidecar gone
132
- const srcSidecarPath = sidecarPath(root, fromRel);
133
- await assert.rejects(() => access(srcSidecarPath), "source sidecar should be gone after move");
134
-
135
- // Destination sidecar present
136
- const destSidecar = await readSidecar(root, toRel);
137
- assert.ok(destSidecar, "destination sidecar should exist after move");
138
- assert.equal(destSidecar!.revision, 7, "sidecar data should be preserved");
139
- } finally {
140
- await rm(home, { recursive: true, force: true });
141
- await rm(root, { recursive: true, force: true });
142
- }
143
- });
144
-
145
- test("wiki/move: non-.md moves don't call moveSidecar (no error)", async () => {
146
- const home = await mkdtemp(path.join(tmpdir(), "wiki-move-nm-home-"));
147
- const root = await mkdtemp(path.join(tmpdir(), "wiki-move-nm-root-"));
148
-
149
- try {
150
- process.env.HOME = home;
151
- process.env.ROOT_DIR = root;
152
- const { setRootDir } = await import("../../lib/root-dir.js");
153
- setRootDir(root);
154
-
155
- const { makeUserSession } = await import("./helpers/auth-session.js");
156
- const { POST } = await import("../../app/api/wiki/move/route.js");
157
-
158
- await writeFile(path.join(root, "data.json"), '{"x":1}', "utf-8");
159
-
160
- const cookie = await makeUserSession();
161
- const req = new Request("http://localhost/api/wiki/move", {
162
- method: "POST",
163
- headers: {
164
- "Content-Type": "application/json",
165
- Cookie: cookie,
166
- Origin: "http://localhost",
167
- },
168
- body: JSON.stringify({ from: "data.json", to: "data-renamed.json" }),
169
- });
170
-
171
- const res = await POST(req);
172
- assert.equal(res.status, 200, "non-.md move should succeed without error");
173
- } finally {
174
- await rm(home, { recursive: true, force: true });
175
- await rm(root, { recursive: true, force: true });
176
- }
177
- });
@@ -1,58 +0,0 @@
1
- import { test } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { emitEvents, trimEvents } from "../../lib/proof/event-bus.js";
4
- import { emptySidecar } from "../../lib/proof/sidecar.js";
5
-
6
- test("trimEvents: keeps last 1000 events when no ack cursors", () => {
7
- const sc = emptySidecar("test.md");
8
-
9
- // Emit 2000 events
10
- for (let i = 0; i < 2000; i++) {
11
- emitEvents(sc, [{ type: "block.inserted", at: new Date().toISOString(), by: "ai:test", position: "end", refs: [`b${i}`] }]);
12
- }
13
- assert.equal(sc.events.length, 2000);
14
- assert.equal(sc.nextEventId, 2001); // starts at 1, increments to 2001 after 2000 events
15
-
16
- trimEvents(sc, 1000);
17
-
18
- assert.equal(sc.events.length, 1000);
19
- // Events retained should be the last 1000 (IDs 1001-2000)
20
- assert.equal(sc.events[0].id, 1001);
21
- assert.equal(sc.events[999].id, 2000);
22
- });
23
-
24
- test("trimEvents: retains events newer than oldest ack cursor even beyond trim window", () => {
25
- const sc = emptySidecar("test.md");
26
-
27
- // Emit 2000 events
28
- for (let i = 0; i < 2000; i++) {
29
- emitEvents(sc, [{ type: "block.inserted", at: new Date().toISOString(), by: "ai:test", position: "end", refs: [`b${i}`] }]);
30
- }
31
-
32
- // Agent acked up to event 200 (old cursor - before the trim window)
33
- sc.lastAck["ai:slow"] = 200;
34
-
35
- trimEvents(sc, 1000);
36
-
37
- // Events from IDs 201+ should be retained (because ack is at 200, events > 200 must be kept)
38
- // Plus the last 1000 (1000-1999). Combined: events with id > 200 OR index >= 1000.
39
- // Events 0-999 are candidates for trim. Events 0-200 have id <= 200, kept only if index >= 1000 (none).
40
- // Events 201-999 have id > 200, kept. Events 1000-1999 always kept.
41
- // So total retained: (999-201+1) + 1000 = 799 + 1000 = 1799
42
- assert.ok(sc.events.length > 1000, `expected >1000 events, got ${sc.events.length}`);
43
- // No event with id <= 200 should be present
44
- for (const ev of sc.events) {
45
- assert.ok(ev.id > 200, `Event id ${ev.id} should have been trimmed (ack at 200)`);
46
- }
47
- });
48
-
49
- test("trimEvents: no-op when events <= trim size", () => {
50
- const sc = emptySidecar("test.md");
51
-
52
- for (let i = 0; i < 500; i++) {
53
- emitEvents(sc, [{ type: "block.inserted", at: new Date().toISOString(), by: "ai:test", position: "end", refs: [`b${i}`] }]);
54
- }
55
-
56
- trimEvents(sc, 1000);
57
- assert.equal(sc.events.length, 500);
58
- });