deltadeck 0.2.0__tar.gz

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 (207) hide show
  1. deltadeck-0.2.0/.gitignore +28 -0
  2. deltadeck-0.2.0/LICENSE +21 -0
  3. deltadeck-0.2.0/PKG-INFO +167 -0
  4. deltadeck-0.2.0/README.md +132 -0
  5. deltadeck-0.2.0/hatch_build.py +20 -0
  6. deltadeck-0.2.0/pyproject.toml +80 -0
  7. deltadeck-0.2.0/server/deltadeck/__init__.py +3 -0
  8. deltadeck-0.2.0/server/deltadeck/__main__.py +6 -0
  9. deltadeck-0.2.0/server/deltadeck/app.py +309 -0
  10. deltadeck-0.2.0/server/deltadeck/cli.py +111 -0
  11. deltadeck-0.2.0/server/deltadeck/config.py +394 -0
  12. deltadeck-0.2.0/server/deltadeck/desktop.py +301 -0
  13. deltadeck-0.2.0/server/deltadeck/docx.py +786 -0
  14. deltadeck-0.2.0/server/deltadeck/edit.py +650 -0
  15. deltadeck-0.2.0/server/deltadeck/edit_routes.py +275 -0
  16. deltadeck-0.2.0/server/deltadeck/errors.py +33 -0
  17. deltadeck-0.2.0/server/deltadeck/events.py +44 -0
  18. deltadeck-0.2.0/server/deltadeck/file_routes.py +183 -0
  19. deltadeck-0.2.0/server/deltadeck/fsops.py +143 -0
  20. deltadeck-0.2.0/server/deltadeck/git.py +810 -0
  21. deltadeck-0.2.0/server/deltadeck/git_routes.py +49 -0
  22. deltadeck-0.2.0/server/deltadeck/hidden.py +242 -0
  23. deltadeck-0.2.0/server/deltadeck/http_common.py +79 -0
  24. deltadeck-0.2.0/server/deltadeck/names.py +99 -0
  25. deltadeck-0.2.0/server/deltadeck/paths.py +377 -0
  26. deltadeck-0.2.0/server/deltadeck/pdf.py +377 -0
  27. deltadeck-0.2.0/server/deltadeck/readers.py +203 -0
  28. deltadeck-0.2.0/server/deltadeck/reconcile.py +413 -0
  29. deltadeck-0.2.0/server/deltadeck/recovery.py +371 -0
  30. deltadeck-0.2.0/server/deltadeck/roots.py +459 -0
  31. deltadeck-0.2.0/server/deltadeck/search.py +1280 -0
  32. deltadeck-0.2.0/server/deltadeck/seen.py +480 -0
  33. deltadeck-0.2.0/server/deltadeck/store.py +772 -0
  34. deltadeck-0.2.0/web/out/404.html +1 -0
  35. deltadeck-0.2.0/web/out/__next.__PAGE__.txt +35 -0
  36. deltadeck-0.2.0/web/out/__next._full.txt +31 -0
  37. deltadeck-0.2.0/web/out/__next._tree.txt +3 -0
  38. deltadeck-0.2.0/web/out/_next/static/Gw6M6fxM3aEj0n-ZqJJ4a/_buildManifest.js +11 -0
  39. deltadeck-0.2.0/web/out/_next/static/Gw6M6fxM3aEj0n-ZqJJ4a/_clientMiddlewareManifest.js +1 -0
  40. deltadeck-0.2.0/web/out/_next/static/Gw6M6fxM3aEj0n-ZqJJ4a/_ssgManifest.js +1 -0
  41. deltadeck-0.2.0/web/out/_next/static/chunks/0-wb0zlv4fraf.js +1 -0
  42. deltadeck-0.2.0/web/out/_next/static/chunks/01p-raf8lqk27.js +1 -0
  43. deltadeck-0.2.0/web/out/_next/static/chunks/032ykre2bnri8.js +1 -0
  44. deltadeck-0.2.0/web/out/_next/static/chunks/0336mqc8l-u5_.js +1 -0
  45. deltadeck-0.2.0/web/out/_next/static/chunks/04ez-o2l4o42j.js +4 -0
  46. deltadeck-0.2.0/web/out/_next/static/chunks/04njl6dpcj5du.js +1 -0
  47. deltadeck-0.2.0/web/out/_next/static/chunks/05_6295hyq3hs.js +1 -0
  48. deltadeck-0.2.0/web/out/_next/static/chunks/05i_pb-4sod72.js +1 -0
  49. deltadeck-0.2.0/web/out/_next/static/chunks/063x1fm-axugv.js +66 -0
  50. deltadeck-0.2.0/web/out/_next/static/chunks/06bkit1w9xkil.js +1 -0
  51. deltadeck-0.2.0/web/out/_next/static/chunks/06q08a4vhb65a.js +1 -0
  52. deltadeck-0.2.0/web/out/_next/static/chunks/0ash-9bppuz64.js +1 -0
  53. deltadeck-0.2.0/web/out/_next/static/chunks/0ba5gc5bhtd21.js +77 -0
  54. deltadeck-0.2.0/web/out/_next/static/chunks/0bk68y6ulxiqc.css +1 -0
  55. deltadeck-0.2.0/web/out/_next/static/chunks/0cz1d0mv5g_q7.js +1 -0
  56. deltadeck-0.2.0/web/out/_next/static/chunks/0ddvch5u_tkod.js +79 -0
  57. deltadeck-0.2.0/web/out/_next/static/chunks/0ettfkje508xs.js +1 -0
  58. deltadeck-0.2.0/web/out/_next/static/chunks/0g3bmow2o6ryj.js +1 -0
  59. deltadeck-0.2.0/web/out/_next/static/chunks/0h-upsn6lazz9.js +1 -0
  60. deltadeck-0.2.0/web/out/_next/static/chunks/0hpdbh5840flr.js +1 -0
  61. deltadeck-0.2.0/web/out/_next/static/chunks/0knge03tyejx7.js +1 -0
  62. deltadeck-0.2.0/web/out/_next/static/chunks/0npwoogk1edkj.js +1 -0
  63. deltadeck-0.2.0/web/out/_next/static/chunks/0ooh5ltmcljc8.js +3 -0
  64. deltadeck-0.2.0/web/out/_next/static/chunks/0p3iz33mgcaih.js +1 -0
  65. deltadeck-0.2.0/web/out/_next/static/chunks/0pyjpjo88bqy7.js +1 -0
  66. deltadeck-0.2.0/web/out/_next/static/chunks/0tvysmxvj5v0j.js +203 -0
  67. deltadeck-0.2.0/web/out/_next/static/chunks/0udjrf1iq4fuk.js +1 -0
  68. deltadeck-0.2.0/web/out/_next/static/chunks/0ukld36iqalgh.js +287 -0
  69. deltadeck-0.2.0/web/out/_next/static/chunks/0va2a7jsjmv12.js +38 -0
  70. deltadeck-0.2.0/web/out/_next/static/chunks/0vk-f147r1rsw.js +1 -0
  71. deltadeck-0.2.0/web/out/_next/static/chunks/0w_drhom8r86n.js +1 -0
  72. deltadeck-0.2.0/web/out/_next/static/chunks/0y2g0ctlf5oun.js +1 -0
  73. deltadeck-0.2.0/web/out/_next/static/chunks/0y8yqekdf2p1s.js +1 -0
  74. deltadeck-0.2.0/web/out/_next/static/chunks/0zcdw19u5g48m.js +2 -0
  75. deltadeck-0.2.0/web/out/_next/static/chunks/1-eb6ubxl1zy0.js +1 -0
  76. deltadeck-0.2.0/web/out/_next/static/chunks/1-srxa7hk2_y5.js +1 -0
  77. deltadeck-0.2.0/web/out/_next/static/chunks/10vdv64yk0odn.js +31 -0
  78. deltadeck-0.2.0/web/out/_next/static/chunks/10xdnyh3oo0e4.js +1 -0
  79. deltadeck-0.2.0/web/out/_next/static/chunks/10xpbkeuur1_0.js +24 -0
  80. deltadeck-0.2.0/web/out/_next/static/chunks/1178ms98k8h8x.js +10 -0
  81. deltadeck-0.2.0/web/out/_next/static/chunks/123yrmmwha8uh.js +1 -0
  82. deltadeck-0.2.0/web/out/_next/static/chunks/13jklb69rtm7g.js +86 -0
  83. deltadeck-0.2.0/web/out/_next/static/chunks/14g2qr9-ac9_w.js +179 -0
  84. deltadeck-0.2.0/web/out/_next/static/chunks/14uv7in3hq33c.js +1 -0
  85. deltadeck-0.2.0/web/out/_next/static/chunks/15s134ttbtii8.js +1 -0
  86. deltadeck-0.2.0/web/out/_next/static/chunks/18mh54xq67c88.js +1 -0
  87. deltadeck-0.2.0/web/out/_next/static/chunks/1_gv4d2u9qmn5.js +1 -0
  88. deltadeck-0.2.0/web/out/_next/static/chunks/1b2hau0_697gg.js +1 -0
  89. deltadeck-0.2.0/web/out/_next/static/chunks/1cbv07r70is7e.js +1 -0
  90. deltadeck-0.2.0/web/out/_next/static/chunks/1ck4x9qed_h2r.js +1 -0
  91. deltadeck-0.2.0/web/out/_next/static/chunks/1cr8soqffviy4.js +1 -0
  92. deltadeck-0.2.0/web/out/_next/static/chunks/1ctl-01dm3brq.js +1 -0
  93. deltadeck-0.2.0/web/out/_next/static/chunks/1cxper-3md1o-.js +1 -0
  94. deltadeck-0.2.0/web/out/_next/static/chunks/1d0je4el_be8s.js +36 -0
  95. deltadeck-0.2.0/web/out/_next/static/chunks/1dcd-anbt29ze.js +1 -0
  96. deltadeck-0.2.0/web/out/_next/static/chunks/1f1182516lh5d.js +1 -0
  97. deltadeck-0.2.0/web/out/_next/static/chunks/1frzy0c-d3tf7.js +41 -0
  98. deltadeck-0.2.0/web/out/_next/static/chunks/1ib4bqx1yadoq.js +1 -0
  99. deltadeck-0.2.0/web/out/_next/static/chunks/1ijnbjhgkhviq.js +1 -0
  100. deltadeck-0.2.0/web/out/_next/static/chunks/1jp_4giffrr5c.js +61 -0
  101. deltadeck-0.2.0/web/out/_next/static/chunks/1kd8ih36je1cc.js +93 -0
  102. deltadeck-0.2.0/web/out/_next/static/chunks/1khocfuulae2_.js +1 -0
  103. deltadeck-0.2.0/web/out/_next/static/chunks/1ljfghevr8007.js +1 -0
  104. deltadeck-0.2.0/web/out/_next/static/chunks/1mrguikl1mfmy.js +2 -0
  105. deltadeck-0.2.0/web/out/_next/static/chunks/1n3avhvzagjqo.js +1 -0
  106. deltadeck-0.2.0/web/out/_next/static/chunks/1nu18zblzzkxr.js +1 -0
  107. deltadeck-0.2.0/web/out/_next/static/chunks/1nxtwvwc1-g9z.js +309 -0
  108. deltadeck-0.2.0/web/out/_next/static/chunks/1oqyvtqy352xk.js +160 -0
  109. deltadeck-0.2.0/web/out/_next/static/chunks/1qf05_j_wigan.js +135 -0
  110. deltadeck-0.2.0/web/out/_next/static/chunks/1shqupz4psfrm.js +1 -0
  111. deltadeck-0.2.0/web/out/_next/static/chunks/1su1--jeub0vd.js +1 -0
  112. deltadeck-0.2.0/web/out/_next/static/chunks/1t67aekbcq1y3.js +1 -0
  113. deltadeck-0.2.0/web/out/_next/static/chunks/1ubm9mtml7ye6.js +1 -0
  114. deltadeck-0.2.0/web/out/_next/static/chunks/1vctqj-4qx0f1.js +32 -0
  115. deltadeck-0.2.0/web/out/_next/static/chunks/1x65vx7fbh5f2.js +1 -0
  116. deltadeck-0.2.0/web/out/_next/static/chunks/1xmdq3m655638.js +1 -0
  117. deltadeck-0.2.0/web/out/_next/static/chunks/1y9mnk06touvm.js +1 -0
  118. deltadeck-0.2.0/web/out/_next/static/chunks/1zgb46ecbigo9.js +1 -0
  119. deltadeck-0.2.0/web/out/_next/static/chunks/2-936-wie2c7z.js +1 -0
  120. deltadeck-0.2.0/web/out/_next/static/chunks/2-lhuoqw-8u6m.js +22 -0
  121. deltadeck-0.2.0/web/out/_next/static/chunks/2168en1g_ff0m.js +1 -0
  122. deltadeck-0.2.0/web/out/_next/static/chunks/22fvu1i8drv0y.js +1 -0
  123. deltadeck-0.2.0/web/out/_next/static/chunks/22nye0w1-65or.js +138 -0
  124. deltadeck-0.2.0/web/out/_next/static/chunks/23jcrmneulc-t.js +1 -0
  125. deltadeck-0.2.0/web/out/_next/static/chunks/252yyuyz9o6wd.js +1 -0
  126. deltadeck-0.2.0/web/out/_next/static/chunks/25dikvv_q4k84.js +1 -0
  127. deltadeck-0.2.0/web/out/_next/static/chunks/26y99mhsiclgy.js +1 -0
  128. deltadeck-0.2.0/web/out/_next/static/chunks/27ly0qb-et_jc.js +15 -0
  129. deltadeck-0.2.0/web/out/_next/static/chunks/28g7ko42eee5a.js +1 -0
  130. deltadeck-0.2.0/web/out/_next/static/chunks/29ig-8esac5vg.js +1 -0
  131. deltadeck-0.2.0/web/out/_next/static/chunks/29k_24gthdxe3.js +1 -0
  132. deltadeck-0.2.0/web/out/_next/static/chunks/29wydom8qwv9i.js +24 -0
  133. deltadeck-0.2.0/web/out/_next/static/chunks/2coohofy6ysw4.js +5 -0
  134. deltadeck-0.2.0/web/out/_next/static/chunks/2dfi-3n0im0zh.js +1 -0
  135. deltadeck-0.2.0/web/out/_next/static/chunks/2fsxl6h9wu_5o.js +23 -0
  136. deltadeck-0.2.0/web/out/_next/static/chunks/2idqz4xj9bcod.js +286 -0
  137. deltadeck-0.2.0/web/out/_next/static/chunks/2iqj05imzhp4m.js +1 -0
  138. deltadeck-0.2.0/web/out/_next/static/chunks/2itsqt_1jw8_y.js +1 -0
  139. deltadeck-0.2.0/web/out/_next/static/chunks/2kaw65j578cef.js +1 -0
  140. deltadeck-0.2.0/web/out/_next/static/chunks/2krtxbjoqmvi1.js +1 -0
  141. deltadeck-0.2.0/web/out/_next/static/chunks/2n-qh2g6xqyon.js +1 -0
  142. deltadeck-0.2.0/web/out/_next/static/chunks/2of5-a32h_fzo.js +1 -0
  143. deltadeck-0.2.0/web/out/_next/static/chunks/2ovdd04qwksb2.js +1 -0
  144. deltadeck-0.2.0/web/out/_next/static/chunks/2piucm-g64elp.js +1 -0
  145. deltadeck-0.2.0/web/out/_next/static/chunks/2r4yjf9zlczgc.js +1 -0
  146. deltadeck-0.2.0/web/out/_next/static/chunks/2v-nzhb17_fmx.js +15 -0
  147. deltadeck-0.2.0/web/out/_next/static/chunks/2x5312oohk9i1.js +1 -0
  148. deltadeck-0.2.0/web/out/_next/static/chunks/2yecjfgk9i16a.js +1 -0
  149. deltadeck-0.2.0/web/out/_next/static/chunks/2yk59ik12pbte.js +1 -0
  150. deltadeck-0.2.0/web/out/_next/static/chunks/2z3sh82dl8glu.js.map +5 -0
  151. deltadeck-0.2.0/web/out/_next/static/chunks/2zin2_z0f0kdt.js +1 -0
  152. deltadeck-0.2.0/web/out/_next/static/chunks/309-hcw850qmx.js +1 -0
  153. deltadeck-0.2.0/web/out/_next/static/chunks/31kdobv016cs1.js +122 -0
  154. deltadeck-0.2.0/web/out/_next/static/chunks/338p9ntbs06p9.js +1 -0
  155. deltadeck-0.2.0/web/out/_next/static/chunks/36l9fbswts8w8.js +1 -0
  156. deltadeck-0.2.0/web/out/_next/static/chunks/36rd86hnjy--8.js +34 -0
  157. deltadeck-0.2.0/web/out/_next/static/chunks/371c8kx9yq-nr.js +62 -0
  158. deltadeck-0.2.0/web/out/_next/static/chunks/37d5batav2n82.js +148 -0
  159. deltadeck-0.2.0/web/out/_next/static/chunks/37uockrobxqrf.js +92 -0
  160. deltadeck-0.2.0/web/out/_next/static/chunks/384kjvhilvq0i.js +1 -0
  161. deltadeck-0.2.0/web/out/_next/static/chunks/38l10l8pa-kih.js +1 -0
  162. deltadeck-0.2.0/web/out/_next/static/chunks/39il1efd5-s8w.js +94 -0
  163. deltadeck-0.2.0/web/out/_next/static/chunks/3actn9as2ghnu.js +2 -0
  164. deltadeck-0.2.0/web/out/_next/static/chunks/3czk1zwynepq1.js +104 -0
  165. deltadeck-0.2.0/web/out/_next/static/chunks/3d2tm2i87o5p_.js +1 -0
  166. deltadeck-0.2.0/web/out/_next/static/chunks/3ed96tb7kaefk.js +15 -0
  167. deltadeck-0.2.0/web/out/_next/static/chunks/3fqx0481wur_n.js +1 -0
  168. deltadeck-0.2.0/web/out/_next/static/chunks/3g8rs-0o1gmnz.js +1 -0
  169. deltadeck-0.2.0/web/out/_next/static/chunks/3iermca84mhmd.js +1 -0
  170. deltadeck-0.2.0/web/out/_next/static/chunks/3kv82kxg4c50f.js +64 -0
  171. deltadeck-0.2.0/web/out/_next/static/chunks/3lb6zi3ns5rpz.js +1 -0
  172. deltadeck-0.2.0/web/out/_next/static/chunks/3ok2kyuqnjk1x.js +115 -0
  173. deltadeck-0.2.0/web/out/_next/static/chunks/3pl3fu8ycp70s.js +62 -0
  174. deltadeck-0.2.0/web/out/_next/static/chunks/3ti94rnk8g3g9.js +15 -0
  175. deltadeck-0.2.0/web/out/_next/static/chunks/3waspvyikyn8d.js +1 -0
  176. deltadeck-0.2.0/web/out/_next/static/chunks/3wo0teggh8855.js +1 -0
  177. deltadeck-0.2.0/web/out/_next/static/chunks/3x3y44ggx9amw.js +1 -0
  178. deltadeck-0.2.0/web/out/_next/static/chunks/3x_p7gm_efbdf.js +212 -0
  179. deltadeck-0.2.0/web/out/_next/static/chunks/40aaur_-qhj85.js +22 -0
  180. deltadeck-0.2.0/web/out/_next/static/chunks/41jdd8wvvl-p8.js +4 -0
  181. deltadeck-0.2.0/web/out/_next/static/chunks/41ngr_kzkqmbv.js +27 -0
  182. deltadeck-0.2.0/web/out/_next/static/chunks/41ymya8gm_nwe.js +1 -0
  183. deltadeck-0.2.0/web/out/_next/static/chunks/43p3o8p9_gmdm.js +1 -0
  184. deltadeck-0.2.0/web/out/_next/static/chunks/44_sq5v-kidea.js +1 -0
  185. deltadeck-0.2.0/web/out/_next/static/chunks/44oxs3_litch8.js +1 -0
  186. deltadeck-0.2.0/web/out/_next/static/chunks/44t0wft6n2b5n.js +1 -0
  187. deltadeck-0.2.0/web/out/_next/static/chunks/turbopack-0y0dee_nb28iz.js +1 -0
  188. deltadeck-0.2.0/web/out/_next/static/chunks/turbopack-2c3mg3r-05n1w.js +1 -0
  189. deltadeck-0.2.0/web/out/_next/static/chunks/turbopack-2ikcxs2-0edba.js +1 -0
  190. deltadeck-0.2.0/web/out/_next/static/chunks/turbopack-worker-1hrsqshz0gfey.js +1 -0
  191. deltadeck-0.2.0/web/out/_next/static/media/icon.15prq8m0ln7xb.svg +18 -0
  192. deltadeck-0.2.0/web/out/_next/static/media/worker.2tknvk8mcp098.ts +40 -0
  193. deltadeck-0.2.0/web/out/_next/static/media/worker.3o_k-bouwf2w4.ts +27 -0
  194. deltadeck-0.2.0/web/out/_not-found/__next._full.txt +26 -0
  195. deltadeck-0.2.0/web/out/_not-found/__next._not-found.__PAGE__.txt +32 -0
  196. deltadeck-0.2.0/web/out/_not-found/__next._tree.txt +4 -0
  197. deltadeck-0.2.0/web/out/_not-found.html +1 -0
  198. deltadeck-0.2.0/web/out/_not-found.txt +26 -0
  199. deltadeck-0.2.0/web/out/icon.svg +18 -0
  200. deltadeck-0.2.0/web/out/index.html +1 -0
  201. deltadeck-0.2.0/web/out/index.txt +31 -0
  202. deltadeck-0.2.0/web/out/logo.svg +18 -0
  203. deltadeck-0.2.0/web/out/print/__next._full.txt +31 -0
  204. deltadeck-0.2.0/web/out/print/__next._tree.txt +4 -0
  205. deltadeck-0.2.0/web/out/print/__next.print.__PAGE__.txt +37 -0
  206. deltadeck-0.2.0/web/out/print.html +1 -0
  207. deltadeck-0.2.0/web/out/print.txt +31 -0
@@ -0,0 +1,28 @@
1
+ # recovery store: history, trash, audit log, remembered folders (contains your docs)
2
+ .data/
3
+
4
+ # python
5
+ .venv/
6
+ __pycache__/
7
+ *.pyc
8
+ .ruff_cache/
9
+ .pytest_cache/
10
+
11
+ # local uv cache (UV_CACHE_DIR=$PWD/.cache/uv)
12
+ .cache/
13
+
14
+ # misc
15
+ .DS_Store
16
+ .env
17
+ .env.*
18
+
19
+ # desktop app build outputs (desktop/build/icon.* are sources)
20
+ desktop/node_modules/
21
+ desktop/dist/
22
+ desktop/release/
23
+ desktop/build/server/
24
+ desktop/build/pyenv/
25
+ desktop/build/pyinstaller/
26
+
27
+ # python package builds (uv build)
28
+ /dist/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dharmendra Sharma
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,167 @@
1
+ Metadata-Version: 2.5
2
+ Name: deltadeck
3
+ Version: 0.2.0
4
+ Summary: Review what your AI changed, and hand it back. A local viewer for docs and code that highlights what changed.
5
+ Project-URL: Homepage, https://github.com/dharmen8980/deltadeck
6
+ Project-URL: Repository, https://github.com/dharmen8980/deltadeck
7
+ Project-URL: Issues, https://github.com/dharmen8980/deltadeck/issues
8
+ Project-URL: Documentation, https://github.com/dharmen8980/deltadeck/tree/main/docs
9
+ Author: Dharmendra Sharma
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: ai,code-review,diff,docs,fastapi,local,markdown,viewer
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Framework :: FastAPI
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: MacOS
18
+ Classifier: Operating System :: POSIX :: Linux
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3 :: Only
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Documentation
23
+ Classifier: Topic :: Software Development :: Quality Assurance
24
+ Classifier: Topic :: Text Processing :: Markup :: Markdown
25
+ Requires-Python: >=3.13
26
+ Requires-Dist: fastapi>=0.115
27
+ Requires-Dist: mammoth>=1.8
28
+ Requires-Dist: openpyxl>=3.1
29
+ Requires-Dist: playwright>=1.64.0
30
+ Requires-Dist: python-multipart>=0.0.32
31
+ Requires-Dist: sse-starlette>=2.1
32
+ Requires-Dist: uvicorn>=0.30
33
+ Requires-Dist: watchfiles>=0.24
34
+ Description-Content-Type: text/markdown
35
+
36
+ <img src="site/public/logo.svg" alt="" width="72" height="72">
37
+
38
+ # DeltaDeck
39
+
40
+ Every change, stacked for review. DeltaDeck is a local-only viewer for one
41
+ folder of documents and code. Editing and file
42
+ management are on by default; `--read-only` turns them off
43
+ (see [Editing](https://github.com/dharmen8980/deltadeck/blob/main/docs/editing.md)). The folder is given with `--root` /
44
+ `DELTADECK_ROOT`, or chosen in the browser with the native folder dialog and
45
+ switched at runtime from a list of recent folders (see [Choosing and switching
46
+ folders](https://github.com/dharmen8980/deltadeck/blob/main/docs/configuration.md#choosing-and-switching-folders)). A FastAPI server (`server/deltadeck/`)
47
+ reads the folder and serves a static Next.js single-page app (`web/`, built to
48
+ `web/out`) on `http://127.0.0.1:8765/`.
49
+
50
+ ## Install
51
+
52
+ Desktop app, macOS and Linux x86_64 (downloads the latest release, checks it
53
+ and installs it for you only):
54
+
55
+ ```sh
56
+ curl -fsSL https://raw.githubusercontent.com/dharmen8980/deltadeck/main/install.sh | bash
57
+ ```
58
+
59
+ Browser version, macOS and Linux (Windows: use WSL; needs [uv](https://docs.astral.sh/uv/)):
60
+
61
+ ```sh
62
+ uvx deltadeck --root . # then open http://127.0.0.1:8765/
63
+ ```
64
+
65
+ Building from source, pipx, direct downloads, updating and uninstalling:
66
+ [Installing](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md).
67
+
68
+ What it does:
69
+
70
+ - A file tree with sorting by name or modified time, a filter box and a
71
+ "Recently changed" list.
72
+ - Files git ignores are hidden like the viewer's own ignore list. **Show
73
+ hidden files** lists them dimmed; protected files like `.env` open read-only
74
+ after a confirmation. See [Layout](https://github.com/dharmen8980/deltadeck/blob/main/docs/layout.md#hidden-files).
75
+ - Viewers for each file type:
76
+ - Markdown: GFM, a table of contents, mermaid diagrams, shiki highlighting,
77
+ and relative links and images that resolve inside the folder.
78
+ - `.mmd` diagrams and source code with line anchors.
79
+ - A code outline next to source code (Python, JavaScript / TypeScript,
80
+ CSS / SCSS / LESS, HTML, Java, C#, shell): classes, functions, methods,
81
+ selectors, headings and so on, with jump-to-line; see [Code
82
+ outline](https://github.com/dharmen8980/deltadeck/blob/main/docs/outline.md).
83
+ - JSON as a tree or as source.
84
+ - CSV and xlsx as sortable tables.
85
+ - Word `.docx`, view-only: converted on the server (mammoth) to sanitized
86
+ HTML in the markdown typography, with a table of contents, search,
87
+ change highlights and PDF export. Layout and styling are not kept; see
88
+ [Word documents](https://github.com/dharmen8980/deltadeck/blob/main/docs/docx.md).
89
+ - Images and PDFs.
90
+ - Large logs, loaded in chunks with real line numbers. The whole file is
91
+ never loaded.
92
+ - Full-text search (SQLite FTS5, a contentless index on disk) with folder and type filters.
93
+ Match lines are ranked (whole phrase, then most distinct terms, then
94
+ whole-word hits). Choosing a markdown/mermaid match opens
95
+ `/?p=...&hl=<query>&hll=<match line>` and scrolls to the rendered block that
96
+ best matches that line.
97
+ - Live updates through Server-Sent Events: new, modified, renamed and deleted
98
+ files and folders.
99
+ - Changed since you last looked: files that changed since you last opened them
100
+ get a dot in the sidebar (and their folders too). Opening one shows what
101
+ changed, with highlighted markdown blocks or a line diff. A **What's new**
102
+ feed in the sidebar lists them all, newest first, with what changed in each.
103
+ The history is kept in the server's data dir, never in the folder; see
104
+ [Changes](https://github.com/dharmen8980/deltadeck/blob/main/docs/changes.md).
105
+ - Read-only git awareness, when the folder is inside a git repository: what
106
+ changed since the last commit (same banner, highlights and diff), an
107
+ **Uncommitted** list in What's new with M/A/D/R/?? and +/- lines, and blame.
108
+ Nothing is ever written to the repository; see [Git](https://github.com/dharmen8980/deltadeck/blob/main/docs/git.md).
109
+ - Find in the open file (Cmd/Ctrl+F, also in the desktop Edit menu): live
110
+ matches with match case, whole word and regex, across the whole text of large
111
+ files, every CSV cell and rendered markdown; see [Find in the file](https://github.com/dharmen8980/deltadeck/blob/main/docs/find.md).
112
+ - Deep links (`/?p=<path>#<heading>` or `#L<line>`), light/dark themes and a
113
+ print stylesheet for markdown.
114
+ - Resizable panels: drag (or use the arrow keys on) the edge of the file sidebar
115
+ and of the contents / outline panel; double-click resets. A **Reading width**
116
+ menu (Narrow, Medium, Wide, Full width; Full is the default) sets the markdown
117
+ and `.docx` column. Both are remembered; see [Layout](https://github.com/dharmen8980/deltadeck/blob/main/docs/layout.md).
118
+ - **Download PDF** for markdown, `.mmd` and `.docx` files: a properly paginated PDF
119
+ rendered by headless Google Chrome on the server (see [PDF export](https://github.com/dharmen8980/deltadeck/blob/main/docs/pdf-export.md)).
120
+ - Editing (on by default, `--read-only` turns it off): a CodeMirror editor with live preview, file
121
+ management (new, rename, move, duplicate, upload, delete to Trash), version
122
+ history and undo (see [Editing](https://github.com/dharmen8980/deltadeck/blob/main/docs/editing.md)).
123
+
124
+ ## Get it
125
+
126
+ **Desktop app (macOS, Linux):** download the `.dmg`, `.AppImage` or `.deb` from
127
+ [Releases](https://github.com/dharmen8980/deltadeck/releases). The app
128
+ is unsigned for now: on macOS, a copy downloaded with a browser is blocked
129
+ until you run `xattr -dr com.apple.quarantine /Applications/DeltaDeck.app`
130
+ (see [docs/install.md](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md#download-from-releases)). Details in
131
+ [docs/desktop.md](https://github.com/dharmen8980/deltadeck/blob/main/docs/desktop.md); all the ways to install are in
132
+ [docs/install.md](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md).
133
+
134
+ **From source** (needs [uv](https://docs.astral.sh/uv/) and Node.js):
135
+
136
+ ```sh
137
+ git clone https://github.com/dharmen8980/deltadeck.git
138
+ cd deltadeck
139
+ uv sync
140
+ cd web && npm ci && npm run build && cd ..
141
+ uv run deltadeck # http://127.0.0.1:8765/ (choose a folder in the browser)
142
+ uv run deltadeck --root ~/notes # or start on a given folder
143
+ ```
144
+
145
+ ## Documentation
146
+
147
+ | Topic | |
148
+ |---|---|
149
+ | [Installing](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md) | One-line install, building from source, `uvx` / `pipx`, Releases downloads, updating, uninstalling, where data lives |
150
+ | [Development](https://github.com/dharmen8980/deltadeck/blob/main/docs/development.md) | Prerequisites, install, build and run, dev mode with hot reload, tests |
151
+ | [Configuration](https://github.com/dharmen8980/deltadeck/blob/main/docs/configuration.md) | Flags and environment variables; choosing and switching folders; `/api/roots` |
152
+ | [Editing](https://github.com/dharmen8980/deltadeck/blob/main/docs/editing.md) | Editing on by default, `--read-only`, history, trash, the recovery data dir, backups, limits, how writes are protected |
153
+ | [Changes](https://github.com/dharmen8980/deltadeck/blob/main/docs/changes.md) | "Changed since you last looked": dots, the filter, the What's new feed, the banner, highlights, where the history is kept |
154
+ | [Review basket](https://github.com/dharmen8980/deltadeck/blob/main/docs/review.md) | Picking highlighted changes, a note each, and copying them as one prompt for an AI agent |
155
+ | [Git](https://github.com/dharmen8980/deltadeck/blob/main/docs/git.md) | Read-only git views: since last commit, the Uncommitted list, blame; which git is used; `/api/git/*` |
156
+ | [Find in the file](https://github.com/dharmen8980/deltadeck/blob/main/docs/find.md) | Cmd/Ctrl+F: shortcuts, what each viewer searches, the editor's search panel, limits |
157
+ | [Code outline](https://github.com/dharmen8980/deltadeck/blob/main/docs/outline.md) | The symbols panel for source code: languages, what is listed, how and when it is computed, bundle size |
158
+ | [Layout](https://github.com/dharmen8980/deltadeck/blob/main/docs/layout.md) | Resizing the sidebar and the contents / outline panel, keyboard, reading width, where it is saved |
159
+ | [Word documents](https://github.com/dharmen8980/deltadeck/blob/main/docs/docx.md) | How `.docx` files are converted and shown, `/api/docx`, its limits |
160
+ | [PDF export](https://github.com/dharmen8980/deltadeck/blob/main/docs/pdf-export.md) | How **Download PDF** renders markdown, mermaid and `.docx` |
161
+ | [Desktop app](https://github.com/dharmen8980/deltadeck/blob/main/docs/desktop.md) | Installing, first launch, data and logs, building the app, desktop mode |
162
+ | [Security model](https://github.com/dharmen8980/deltadeck/blob/main/docs/security.md) | What the server allows, refuses and why |
163
+ | [Known limits](https://github.com/dharmen8980/deltadeck/blob/main/docs/known-limits.md) | Things that do not work (yet) |
164
+
165
+ ## License
166
+
167
+ [MIT](https://github.com/dharmen8980/deltadeck/blob/main/LICENSE)
@@ -0,0 +1,132 @@
1
+ <img src="site/public/logo.svg" alt="" width="72" height="72">
2
+
3
+ # DeltaDeck
4
+
5
+ Every change, stacked for review. DeltaDeck is a local-only viewer for one
6
+ folder of documents and code. Editing and file
7
+ management are on by default; `--read-only` turns them off
8
+ (see [Editing](https://github.com/dharmen8980/deltadeck/blob/main/docs/editing.md)). The folder is given with `--root` /
9
+ `DELTADECK_ROOT`, or chosen in the browser with the native folder dialog and
10
+ switched at runtime from a list of recent folders (see [Choosing and switching
11
+ folders](https://github.com/dharmen8980/deltadeck/blob/main/docs/configuration.md#choosing-and-switching-folders)). A FastAPI server (`server/deltadeck/`)
12
+ reads the folder and serves a static Next.js single-page app (`web/`, built to
13
+ `web/out`) on `http://127.0.0.1:8765/`.
14
+
15
+ ## Install
16
+
17
+ Desktop app, macOS and Linux x86_64 (downloads the latest release, checks it
18
+ and installs it for you only):
19
+
20
+ ```sh
21
+ curl -fsSL https://raw.githubusercontent.com/dharmen8980/deltadeck/main/install.sh | bash
22
+ ```
23
+
24
+ Browser version, macOS and Linux (Windows: use WSL; needs [uv](https://docs.astral.sh/uv/)):
25
+
26
+ ```sh
27
+ uvx deltadeck --root . # then open http://127.0.0.1:8765/
28
+ ```
29
+
30
+ Building from source, pipx, direct downloads, updating and uninstalling:
31
+ [Installing](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md).
32
+
33
+ What it does:
34
+
35
+ - A file tree with sorting by name or modified time, a filter box and a
36
+ "Recently changed" list.
37
+ - Files git ignores are hidden like the viewer's own ignore list. **Show
38
+ hidden files** lists them dimmed; protected files like `.env` open read-only
39
+ after a confirmation. See [Layout](https://github.com/dharmen8980/deltadeck/blob/main/docs/layout.md#hidden-files).
40
+ - Viewers for each file type:
41
+ - Markdown: GFM, a table of contents, mermaid diagrams, shiki highlighting,
42
+ and relative links and images that resolve inside the folder.
43
+ - `.mmd` diagrams and source code with line anchors.
44
+ - A code outline next to source code (Python, JavaScript / TypeScript,
45
+ CSS / SCSS / LESS, HTML, Java, C#, shell): classes, functions, methods,
46
+ selectors, headings and so on, with jump-to-line; see [Code
47
+ outline](https://github.com/dharmen8980/deltadeck/blob/main/docs/outline.md).
48
+ - JSON as a tree or as source.
49
+ - CSV and xlsx as sortable tables.
50
+ - Word `.docx`, view-only: converted on the server (mammoth) to sanitized
51
+ HTML in the markdown typography, with a table of contents, search,
52
+ change highlights and PDF export. Layout and styling are not kept; see
53
+ [Word documents](https://github.com/dharmen8980/deltadeck/blob/main/docs/docx.md).
54
+ - Images and PDFs.
55
+ - Large logs, loaded in chunks with real line numbers. The whole file is
56
+ never loaded.
57
+ - Full-text search (SQLite FTS5, a contentless index on disk) with folder and type filters.
58
+ Match lines are ranked (whole phrase, then most distinct terms, then
59
+ whole-word hits). Choosing a markdown/mermaid match opens
60
+ `/?p=...&hl=<query>&hll=<match line>` and scrolls to the rendered block that
61
+ best matches that line.
62
+ - Live updates through Server-Sent Events: new, modified, renamed and deleted
63
+ files and folders.
64
+ - Changed since you last looked: files that changed since you last opened them
65
+ get a dot in the sidebar (and their folders too). Opening one shows what
66
+ changed, with highlighted markdown blocks or a line diff. A **What's new**
67
+ feed in the sidebar lists them all, newest first, with what changed in each.
68
+ The history is kept in the server's data dir, never in the folder; see
69
+ [Changes](https://github.com/dharmen8980/deltadeck/blob/main/docs/changes.md).
70
+ - Read-only git awareness, when the folder is inside a git repository: what
71
+ changed since the last commit (same banner, highlights and diff), an
72
+ **Uncommitted** list in What's new with M/A/D/R/?? and +/- lines, and blame.
73
+ Nothing is ever written to the repository; see [Git](https://github.com/dharmen8980/deltadeck/blob/main/docs/git.md).
74
+ - Find in the open file (Cmd/Ctrl+F, also in the desktop Edit menu): live
75
+ matches with match case, whole word and regex, across the whole text of large
76
+ files, every CSV cell and rendered markdown; see [Find in the file](https://github.com/dharmen8980/deltadeck/blob/main/docs/find.md).
77
+ - Deep links (`/?p=<path>#<heading>` or `#L<line>`), light/dark themes and a
78
+ print stylesheet for markdown.
79
+ - Resizable panels: drag (or use the arrow keys on) the edge of the file sidebar
80
+ and of the contents / outline panel; double-click resets. A **Reading width**
81
+ menu (Narrow, Medium, Wide, Full width; Full is the default) sets the markdown
82
+ and `.docx` column. Both are remembered; see [Layout](https://github.com/dharmen8980/deltadeck/blob/main/docs/layout.md).
83
+ - **Download PDF** for markdown, `.mmd` and `.docx` files: a properly paginated PDF
84
+ rendered by headless Google Chrome on the server (see [PDF export](https://github.com/dharmen8980/deltadeck/blob/main/docs/pdf-export.md)).
85
+ - Editing (on by default, `--read-only` turns it off): a CodeMirror editor with live preview, file
86
+ management (new, rename, move, duplicate, upload, delete to Trash), version
87
+ history and undo (see [Editing](https://github.com/dharmen8980/deltadeck/blob/main/docs/editing.md)).
88
+
89
+ ## Get it
90
+
91
+ **Desktop app (macOS, Linux):** download the `.dmg`, `.AppImage` or `.deb` from
92
+ [Releases](https://github.com/dharmen8980/deltadeck/releases). The app
93
+ is unsigned for now: on macOS, a copy downloaded with a browser is blocked
94
+ until you run `xattr -dr com.apple.quarantine /Applications/DeltaDeck.app`
95
+ (see [docs/install.md](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md#download-from-releases)). Details in
96
+ [docs/desktop.md](https://github.com/dharmen8980/deltadeck/blob/main/docs/desktop.md); all the ways to install are in
97
+ [docs/install.md](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md).
98
+
99
+ **From source** (needs [uv](https://docs.astral.sh/uv/) and Node.js):
100
+
101
+ ```sh
102
+ git clone https://github.com/dharmen8980/deltadeck.git
103
+ cd deltadeck
104
+ uv sync
105
+ cd web && npm ci && npm run build && cd ..
106
+ uv run deltadeck # http://127.0.0.1:8765/ (choose a folder in the browser)
107
+ uv run deltadeck --root ~/notes # or start on a given folder
108
+ ```
109
+
110
+ ## Documentation
111
+
112
+ | Topic | |
113
+ |---|---|
114
+ | [Installing](https://github.com/dharmen8980/deltadeck/blob/main/docs/install.md) | One-line install, building from source, `uvx` / `pipx`, Releases downloads, updating, uninstalling, where data lives |
115
+ | [Development](https://github.com/dharmen8980/deltadeck/blob/main/docs/development.md) | Prerequisites, install, build and run, dev mode with hot reload, tests |
116
+ | [Configuration](https://github.com/dharmen8980/deltadeck/blob/main/docs/configuration.md) | Flags and environment variables; choosing and switching folders; `/api/roots` |
117
+ | [Editing](https://github.com/dharmen8980/deltadeck/blob/main/docs/editing.md) | Editing on by default, `--read-only`, history, trash, the recovery data dir, backups, limits, how writes are protected |
118
+ | [Changes](https://github.com/dharmen8980/deltadeck/blob/main/docs/changes.md) | "Changed since you last looked": dots, the filter, the What's new feed, the banner, highlights, where the history is kept |
119
+ | [Review basket](https://github.com/dharmen8980/deltadeck/blob/main/docs/review.md) | Picking highlighted changes, a note each, and copying them as one prompt for an AI agent |
120
+ | [Git](https://github.com/dharmen8980/deltadeck/blob/main/docs/git.md) | Read-only git views: since last commit, the Uncommitted list, blame; which git is used; `/api/git/*` |
121
+ | [Find in the file](https://github.com/dharmen8980/deltadeck/blob/main/docs/find.md) | Cmd/Ctrl+F: shortcuts, what each viewer searches, the editor's search panel, limits |
122
+ | [Code outline](https://github.com/dharmen8980/deltadeck/blob/main/docs/outline.md) | The symbols panel for source code: languages, what is listed, how and when it is computed, bundle size |
123
+ | [Layout](https://github.com/dharmen8980/deltadeck/blob/main/docs/layout.md) | Resizing the sidebar and the contents / outline panel, keyboard, reading width, where it is saved |
124
+ | [Word documents](https://github.com/dharmen8980/deltadeck/blob/main/docs/docx.md) | How `.docx` files are converted and shown, `/api/docx`, its limits |
125
+ | [PDF export](https://github.com/dharmen8980/deltadeck/blob/main/docs/pdf-export.md) | How **Download PDF** renders markdown, mermaid and `.docx` |
126
+ | [Desktop app](https://github.com/dharmen8980/deltadeck/blob/main/docs/desktop.md) | Installing, first launch, data and logs, building the app, desktop mode |
127
+ | [Security model](https://github.com/dharmen8980/deltadeck/blob/main/docs/security.md) | What the server allows, refuses and why |
128
+ | [Known limits](https://github.com/dharmen8980/deltadeck/blob/main/docs/known-limits.md) | Things that do not work (yet) |
129
+
130
+ ## License
131
+
132
+ [MIT](https://github.com/dharmen8980/deltadeck/blob/main/LICENSE)
@@ -0,0 +1,20 @@
1
+ """Wheel build hook: ship the built web UI (web/out) as deltadeck/ui.
2
+
3
+ Editable installs (uv sync) skip this and read web/out in place."""
4
+
5
+ import os
6
+
7
+ from hatchling.builders.hooks.plugin.interface import BuildHookInterface
8
+
9
+
10
+ class UiBuildHook(BuildHookInterface):
11
+ PLUGIN_NAME = "custom"
12
+
13
+ def initialize(self, version, build_data):
14
+ if version == "editable":
15
+ return
16
+ out = os.path.join(self.root, "web", "out")
17
+ if not os.path.isfile(os.path.join(out, "index.html")):
18
+ raise RuntimeError(f"web UI not built ({out}/index.html missing): "
19
+ "run 'npm ci && npm run build' in web/ before building the wheel")
20
+ build_data["force_include"][out] = "deltadeck/ui"
@@ -0,0 +1,80 @@
1
+ [project]
2
+ name = "deltadeck"
3
+ version = "0.2.0"
4
+ description = "Review what your AI changed, and hand it back. A local viewer for docs and code that highlights what changed."
5
+ readme = "README.md"
6
+ requires-python = ">=3.13"
7
+ license = "MIT"
8
+ license-files = ["LICENSE"]
9
+ authors = [{ name = "Dharmendra Sharma" }]
10
+ keywords = ["markdown", "viewer", "docs", "diff", "code-review", "ai", "local", "fastapi"]
11
+ classifiers = [
12
+ "Development Status :: 4 - Beta",
13
+ "Environment :: Web Environment",
14
+ "Framework :: FastAPI",
15
+ "Intended Audience :: Developers",
16
+ "Operating System :: MacOS",
17
+ "Operating System :: POSIX :: Linux",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3 :: Only",
20
+ "Programming Language :: Python :: 3.13",
21
+ "Topic :: Documentation",
22
+ "Topic :: Software Development :: Quality Assurance",
23
+ "Topic :: Text Processing :: Markup :: Markdown",
24
+ ]
25
+ dependencies = [
26
+ "fastapi>=0.115",
27
+ "uvicorn>=0.30",
28
+ "sse-starlette>=2.1",
29
+ "watchfiles>=0.24",
30
+ "openpyxl>=3.1",
31
+ "playwright>=1.64.0",
32
+ "python-multipart>=0.0.32",
33
+ "mammoth>=1.8",
34
+ ]
35
+
36
+ [project.urls]
37
+ Homepage = "https://github.com/dharmen8980/deltadeck"
38
+ Repository = "https://github.com/dharmen8980/deltadeck"
39
+ Issues = "https://github.com/dharmen8980/deltadeck/issues"
40
+ Documentation = "https://github.com/dharmen8980/deltadeck/tree/main/docs"
41
+
42
+ [project.scripts]
43
+ deltadeck = "deltadeck.cli:main"
44
+
45
+ [dependency-groups]
46
+ # Desktop build only (desktop/scripts/build-server.sh, uv run --group build --locked): exact pins,
47
+ # hashes in uv.lock. Not installed by a plain `uv sync`.
48
+ build = [
49
+ "pyinstaller==6.22.3",
50
+ "pyinstaller-hooks-contrib==2026.9",
51
+ ]
52
+ dev = [
53
+ "pytest>=8",
54
+ "httpx>=0.27",
55
+ ]
56
+
57
+ [build-system]
58
+ requires = ["hatchling"]
59
+ build-backend = "hatchling.build"
60
+
61
+ [tool.hatch.build.targets.wheel]
62
+ packages = ["server/deltadeck"]
63
+
64
+ # The built web UI ships inside the wheel as deltadeck/ui (hatch_build.py; found by
65
+ # deltadeck.config.find_ui_dir). Run `npm run build` in web/ first. Editable installs (uv sync)
66
+ # use web/out in place.
67
+ [tool.hatch.build.targets.wheel.hooks.custom]
68
+ path = "hatch_build.py"
69
+
70
+ # The sdist carries the server and the built UI, so a wheel can be built from it without Node.
71
+ [tool.hatch.build.targets.sdist]
72
+ include = ["/server/deltadeck", "/hatch_build.py", "/README.md", "/LICENSE", "/pyproject.toml"]
73
+
74
+ [tool.hatch.build.targets.sdist.force-include]
75
+ "web/out" = "web/out"
76
+
77
+ [tool.pytest.ini_options]
78
+ testpaths = ["server/tests"]
79
+ addopts = "-p no:cacheprovider"
80
+ filterwarnings = ["ignore::DeprecationWarning:fastapi.testclient", "ignore:Using `httpx`"]
@@ -0,0 +1,3 @@
1
+ """DeltaDeck viewer server (FastAPI backend)."""
2
+
3
+ __version__ = "0.2.0"
@@ -0,0 +1,6 @@
1
+ """`python -m deltadeck` (also the PyInstaller entry point): same as `uv run deltadeck`."""
2
+
3
+ from deltadeck.cli import main # absolute: PyInstaller runs this file as a top-level script
4
+
5
+ if __name__ == "__main__":
6
+ main()