vita-tree 1.0.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 (246) hide show
  1. vita_tree-1.0.0/CHANGELOG.md +27 -0
  2. vita_tree-1.0.0/LICENSE +21 -0
  3. vita_tree-1.0.0/MANIFEST.in +8 -0
  4. vita_tree-1.0.0/PKG-INFO +176 -0
  5. vita_tree-1.0.0/README.md +128 -0
  6. vita_tree-1.0.0/THIRD_PARTY_NOTICES.md +25 -0
  7. vita_tree-1.0.0/package-lock.json +288 -0
  8. vita_tree-1.0.0/package.json +10 -0
  9. vita_tree-1.0.0/pyproject.toml +58 -0
  10. vita_tree-1.0.0/scripts/check_package.py +59 -0
  11. vita_tree-1.0.0/scripts/check_privacy.py +93 -0
  12. vita_tree-1.0.0/scripts/validate_release.py +30 -0
  13. vita_tree-1.0.0/scripts/vendor-pdf.mjs +11 -0
  14. vita_tree-1.0.0/setup.cfg +4 -0
  15. vita_tree-1.0.0/src/vita_tree/__init__.py +3 -0
  16. vita_tree-1.0.0/src/vita_tree/__main__.py +3 -0
  17. vita_tree-1.0.0/src/vita_tree/ai_runner.py +50 -0
  18. vita_tree-1.0.0/src/vita_tree/cli.py +61 -0
  19. vita_tree-1.0.0/src/vita_tree/latex.py +196 -0
  20. vita_tree-1.0.0/src/vita_tree/pdf.py +104 -0
  21. vita_tree-1.0.0/src/vita_tree/providers.py +112 -0
  22. vita_tree-1.0.0/src/vita_tree/server.py +370 -0
  23. vita_tree-1.0.0/src/vita_tree/static/app.js +234 -0
  24. vita_tree-1.0.0/src/vita_tree/static/favicon.svg +1 -0
  25. vita_tree-1.0.0/src/vita_tree/static/index.html +42 -0
  26. vita_tree-1.0.0/src/vita_tree/static/styles.css +20 -0
  27. vita_tree-1.0.0/src/vita_tree/static/theme.js +21 -0
  28. vita_tree-1.0.0/src/vita_tree/static/vendor/PDFJS-LICENSE +177 -0
  29. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78-EUC-H.bcmap +0 -0
  30. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78-EUC-V.bcmap +0 -0
  31. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78-H.bcmap +0 -0
  32. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78-RKSJ-H.bcmap +0 -0
  33. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78-RKSJ-V.bcmap +0 -0
  34. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78-V.bcmap +0 -0
  35. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78ms-RKSJ-H.bcmap +0 -0
  36. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/78ms-RKSJ-V.bcmap +0 -0
  37. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/83pv-RKSJ-H.bcmap +0 -0
  38. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/90ms-RKSJ-H.bcmap +0 -0
  39. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/90ms-RKSJ-V.bcmap +0 -0
  40. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/90msp-RKSJ-H.bcmap +0 -0
  41. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/90msp-RKSJ-V.bcmap +0 -0
  42. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/90pv-RKSJ-H.bcmap +0 -0
  43. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/90pv-RKSJ-V.bcmap +0 -0
  44. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Add-H.bcmap +0 -0
  45. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Add-RKSJ-H.bcmap +0 -0
  46. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Add-RKSJ-V.bcmap +0 -0
  47. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Add-V.bcmap +0 -0
  48. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-0.bcmap +0 -0
  49. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-1.bcmap +0 -0
  50. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-2.bcmap +0 -0
  51. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-3.bcmap +0 -0
  52. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-4.bcmap +0 -0
  53. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-5.bcmap +0 -0
  54. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-6.bcmap +0 -0
  55. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  56. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-GB1-0.bcmap +0 -0
  57. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-GB1-1.bcmap +0 -0
  58. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-GB1-2.bcmap +0 -0
  59. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-GB1-3.bcmap +0 -0
  60. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-GB1-4.bcmap +0 -0
  61. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-GB1-5.bcmap +0 -0
  62. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  63. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-0.bcmap +0 -0
  64. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-1.bcmap +0 -0
  65. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-2.bcmap +0 -0
  66. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-3.bcmap +0 -0
  67. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-4.bcmap +0 -0
  68. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-5.bcmap +0 -0
  69. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-6.bcmap +0 -0
  70. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  71. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Korea1-0.bcmap +0 -0
  72. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Korea1-1.bcmap +0 -0
  73. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Korea1-2.bcmap +0 -0
  74. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  75. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/B5-H.bcmap +0 -0
  76. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/B5-V.bcmap +0 -0
  77. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/B5pc-H.bcmap +0 -0
  78. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/B5pc-V.bcmap +0 -0
  79. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/CNS-EUC-H.bcmap +0 -0
  80. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/CNS-EUC-V.bcmap +0 -0
  81. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/CNS1-H.bcmap +0 -0
  82. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/CNS1-V.bcmap +0 -0
  83. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/CNS2-H.bcmap +0 -0
  84. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/CNS2-V.bcmap +3 -0
  85. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/ETHK-B5-H.bcmap +0 -0
  86. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/ETHK-B5-V.bcmap +0 -0
  87. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/ETen-B5-H.bcmap +0 -0
  88. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/ETen-B5-V.bcmap +0 -0
  89. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/ETenms-B5-H.bcmap +3 -0
  90. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/ETenms-B5-V.bcmap +0 -0
  91. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/EUC-H.bcmap +0 -0
  92. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/EUC-V.bcmap +0 -0
  93. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Ext-H.bcmap +0 -0
  94. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Ext-RKSJ-H.bcmap +0 -0
  95. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Ext-RKSJ-V.bcmap +0 -0
  96. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Ext-V.bcmap +0 -0
  97. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GB-EUC-H.bcmap +0 -0
  98. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GB-EUC-V.bcmap +0 -0
  99. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GB-H.bcmap +4 -0
  100. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GB-V.bcmap +0 -0
  101. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBK-EUC-H.bcmap +0 -0
  102. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBK-EUC-V.bcmap +0 -0
  103. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBK2K-H.bcmap +0 -0
  104. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBK2K-V.bcmap +0 -0
  105. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBKp-EUC-H.bcmap +0 -0
  106. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBKp-EUC-V.bcmap +0 -0
  107. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBT-EUC-H.bcmap +0 -0
  108. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBT-EUC-V.bcmap +0 -0
  109. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBT-H.bcmap +0 -0
  110. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBT-V.bcmap +0 -0
  111. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBTpc-EUC-H.bcmap +0 -0
  112. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBTpc-EUC-V.bcmap +0 -0
  113. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBpc-EUC-H.bcmap +0 -0
  114. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/GBpc-EUC-V.bcmap +0 -0
  115. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/H.bcmap +0 -0
  116. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKdla-B5-H.bcmap +0 -0
  117. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKdla-B5-V.bcmap +0 -0
  118. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKdlb-B5-H.bcmap +0 -0
  119. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKdlb-B5-V.bcmap +0 -0
  120. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKgccs-B5-H.bcmap +0 -0
  121. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKgccs-B5-V.bcmap +0 -0
  122. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKm314-B5-H.bcmap +0 -0
  123. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKm314-B5-V.bcmap +0 -0
  124. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKm471-B5-H.bcmap +0 -0
  125. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKm471-B5-V.bcmap +0 -0
  126. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKscs-B5-H.bcmap +0 -0
  127. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/HKscs-B5-V.bcmap +0 -0
  128. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Hankaku.bcmap +0 -0
  129. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Hiragana.bcmap +0 -0
  130. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSC-EUC-H.bcmap +0 -0
  131. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSC-EUC-V.bcmap +0 -0
  132. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSC-H.bcmap +0 -0
  133. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSC-Johab-H.bcmap +0 -0
  134. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSC-Johab-V.bcmap +0 -0
  135. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSC-V.bcmap +0 -0
  136. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSCms-UHC-H.bcmap +0 -0
  137. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  138. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  139. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSCms-UHC-V.bcmap +0 -0
  140. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSCpc-EUC-H.bcmap +0 -0
  141. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/KSCpc-EUC-V.bcmap +0 -0
  142. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Katakana.bcmap +0 -0
  143. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/LICENSE +36 -0
  144. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/NWP-H.bcmap +0 -0
  145. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/NWP-V.bcmap +0 -0
  146. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/RKSJ-H.bcmap +0 -0
  147. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/RKSJ-V.bcmap +0 -0
  148. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/Roman.bcmap +0 -0
  149. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  150. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  151. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  152. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  153. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  154. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  155. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  156. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  157. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UCS2-H.bcmap +0 -0
  158. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UCS2-V.bcmap +0 -0
  159. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UTF16-H.bcmap +0 -0
  160. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UTF16-V.bcmap +0 -0
  161. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UTF32-H.bcmap +0 -0
  162. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UTF32-V.bcmap +0 -0
  163. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UTF8-H.bcmap +0 -0
  164. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniGB-UTF8-V.bcmap +0 -0
  165. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  166. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  167. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  168. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  169. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  170. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  171. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  172. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  173. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  174. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  175. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  176. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  177. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  178. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  179. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  180. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  181. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  182. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  183. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  184. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  185. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  186. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  187. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  188. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UCS2-H.bcmap +0 -0
  189. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UCS2-V.bcmap +0 -0
  190. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UTF16-H.bcmap +0 -0
  191. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UTF16-V.bcmap +0 -0
  192. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UTF32-H.bcmap +0 -0
  193. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UTF32-V.bcmap +0 -0
  194. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UTF8-H.bcmap +0 -0
  195. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/UniKS-UTF8-V.bcmap +0 -0
  196. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/V.bcmap +0 -0
  197. vita_tree-1.0.0/src/vita_tree/static/vendor/cmaps/WP-Symbol.bcmap +0 -0
  198. vita_tree-1.0.0/src/vita_tree/static/vendor/pdf.mjs +28211 -0
  199. vita_tree-1.0.0/src/vita_tree/static/vendor/pdf.worker.mjs +64908 -0
  200. vita_tree-1.0.0/src/vita_tree/static/vendor/pdf_viewer.css +6463 -0
  201. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitDingbats.pfb +0 -0
  202. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitFixed.pfb +0 -0
  203. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitFixedBold.pfb +0 -0
  204. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  205. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitFixedItalic.pfb +0 -0
  206. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitSerif.pfb +0 -0
  207. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitSerifBold.pfb +0 -0
  208. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  209. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitSerifItalic.pfb +0 -0
  210. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/FoxitSymbol.pfb +0 -0
  211. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/LICENSE_FOXIT +27 -0
  212. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/LICENSE_LIBERATION +363 -0
  213. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/LiberationSans-Bold.ttf +0 -0
  214. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  215. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/LiberationSans-Italic.ttf +0 -0
  216. vita_tree-1.0.0/src/vita_tree/static/vendor/standard_fonts/LiberationSans-Regular.ttf +0 -0
  217. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/LICENSE_JBIG2 +196 -0
  218. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/LICENSE_OPENJPEG +39 -0
  219. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  220. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
  221. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/LICENSE_PDFJS_QCMS +19 -0
  222. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/LICENSE_QCMS +21 -0
  223. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/jbig2.wasm +0 -0
  224. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/jbig2_nowasm_fallback.js +15 -0
  225. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/openjpeg.wasm +0 -0
  226. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/openjpeg_nowasm_fallback.js +17 -0
  227. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/qcms_bg.wasm +0 -0
  228. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/quickjs-eval.js +16 -0
  229. vita_tree-1.0.0/src/vita_tree/static/vendor/wasm/quickjs-eval.wasm +0 -0
  230. vita_tree-1.0.0/src/vita_tree/workspace.py +311 -0
  231. vita_tree-1.0.0/src/vita_tree.egg-info/PKG-INFO +176 -0
  232. vita_tree-1.0.0/src/vita_tree.egg-info/SOURCES.txt +244 -0
  233. vita_tree-1.0.0/src/vita_tree.egg-info/dependency_links.txt +1 -0
  234. vita_tree-1.0.0/src/vita_tree.egg-info/entry_points.txt +3 -0
  235. vita_tree-1.0.0/src/vita_tree.egg-info/requires.txt +12 -0
  236. vita_tree-1.0.0/src/vita_tree.egg-info/top_level.txt +1 -0
  237. vita_tree-1.0.0/tests/browser_check.py +186 -0
  238. vita_tree-1.0.0/tests/smoke/installed_check.py +67 -0
  239. vita_tree-1.0.0/tests/smoke/run_installed_package.py +45 -0
  240. vita_tree-1.0.0/tests/support.py +65 -0
  241. vita_tree-1.0.0/tests/test_latex.py +48 -0
  242. vita_tree-1.0.0/tests/test_privacy.py +25 -0
  243. vita_tree-1.0.0/tests/test_providers.py +83 -0
  244. vita_tree-1.0.0/tests/test_release.py +33 -0
  245. vita_tree-1.0.0/tests/test_server.py +66 -0
  246. vita_tree-1.0.0/tests/test_workspace.py +150 -0
@@ -0,0 +1,27 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0 (2026-10-11)
4
+
5
+ First public package release.
6
+
7
+ - Browse and search local and remote CV branches in a centered, responsive UI.
8
+ - Compare the original CV and edited version side by side, with a source diff.
9
+ - Read LaTeX as structured, selectable text. Edit supported text in place or use
10
+ the source editor; saves update the branch's `main.tex` and detect conflicts.
11
+ - Create branches in linked Git worktrees and save job descriptions to `job.md`.
12
+ - Run VITA analyze and adapt commands, review their reports, and compare the
13
+ generated CV with the version captured before the run.
14
+ - Select providers and models discovered across branches, with supported Codex
15
+ reasoning levels.
16
+ - Compile and compare real PDFs using the bundled offline PDF.js viewer, with
17
+ selectable text, zoom, and page navigation.
18
+ - Choose light, dark, or system appearance.
19
+ - Install with pipx or uv; add `vita-tree[ai]` for VITA integration.
20
+ - Automate subsequent version updates and release notes with Release Please.
21
+ Releases pass code, browser/PDF, package installation, and privacy checks
22
+ before publishing through TestPyPI to PyPI.
23
+
24
+ The structured view supports common CV templates; arbitrary LaTeX macros and
25
+ exact page layout require the compiled PDF. PDF previews are read-only. AI
26
+ commands require configured providers; Git and a TeX installation are separate
27
+ system dependencies.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Vita Tree contributors
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,8 @@
1
+ include README.md LICENSE THIRD_PARTY_NOTICES.md CHANGELOG.md pyproject.toml
2
+ include package.json package-lock.json
3
+ recursive-include scripts *.mjs *.py
4
+ recursive-include tests *.py
5
+ recursive-exclude * __pycache__ *.py[cod]
6
+ prune .test-artifacts
7
+ prune .venv
8
+ prune node_modules
@@ -0,0 +1,176 @@
1
+ Metadata-Version: 2.4
2
+ Name: vita-tree
3
+ Version: 1.0.0
4
+ Summary: A local Git and LaTeX CV workspace with branch comparison, editing, and PDF previews
5
+ Author: Vita Tree contributors
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/ABDELLAH-Hallou/vita-tree
8
+ Project-URL: Repository, https://github.com/ABDELLAH-Hallou/vita-tree
9
+ Project-URL: Issues, https://github.com/ABDELLAH-Hallou/vita-tree/issues
10
+ Project-URL: Changelog, https://github.com/ABDELLAH-Hallou/vita-tree/blob/main/CHANGELOG.md
11
+ Keywords: git,latex,resume,dashboard
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Console
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Operating System :: OS Independent
22
+ Classifier: Topic :: Text Processing :: Markup :: LaTeX
23
+ Classifier: Topic :: Software Development :: Version Control :: Git
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ License-File: THIRD_PARTY_NOTICES.md
28
+ License-File: src/vita_tree/static/vendor/PDFJS-LICENSE
29
+ License-File: src/vita_tree/static/vendor/cmaps/LICENSE
30
+ License-File: src/vita_tree/static/vendor/standard_fonts/LICENSE_FOXIT
31
+ License-File: src/vita_tree/static/vendor/standard_fonts/LICENSE_LIBERATION
32
+ License-File: src/vita_tree/static/vendor/wasm/LICENSE_JBIG2
33
+ License-File: src/vita_tree/static/vendor/wasm/LICENSE_OPENJPEG
34
+ License-File: src/vita_tree/static/vendor/wasm/LICENSE_PDFJS_JBIG2
35
+ License-File: src/vita_tree/static/vendor/wasm/LICENSE_PDFJS_OPENJPEG
36
+ License-File: src/vita_tree/static/vendor/wasm/LICENSE_PDFJS_QCMS
37
+ License-File: src/vita_tree/static/vendor/wasm/LICENSE_QCMS
38
+ Requires-Dist: pylatexenc==2.10
39
+ Provides-Extra: ai
40
+ Requires-Dist: vita-cv<3,>=2.3; extra == "ai"
41
+ Provides-Extra: test
42
+ Requires-Dist: playwright<2,>=1.50; extra == "test"
43
+ Requires-Dist: pypdf<7,>=6; extra == "test"
44
+ Provides-Extra: release
45
+ Requires-Dist: build<2,>=1.2; extra == "release"
46
+ Requires-Dist: twine<7,>=6; extra == "release"
47
+ Dynamic: license-file
48
+
49
+ # Vita Tree
50
+
51
+ Browse, edit, and adapt LaTeX CVs across Git branches. Compare versions side by side, keep a job description with each branch, and preview the compiled PDFs.
52
+
53
+ ## Install and run
54
+
55
+ Requires **Python 3.10+**, **Git**, and a Git repository containing a LaTeX CV.
56
+ Install the CLI in an isolated environment with pipx:
57
+
58
+ ```sh
59
+ pipx install "vita-tree[ai]"
60
+ vt run /path/to/your/cv-repository
61
+ ```
62
+
63
+ Or use uv:
64
+
65
+ ```sh
66
+ uv tool install "vita-tree[ai]"
67
+ vt run /path/to/your/cv-repository
68
+ ```
69
+
70
+ `vita-tree` is also available as an alias for `vt`; `python -m vita_tree` works
71
+ inside the environment where the package is installed. Use `pipx upgrade vita-tree` or `uv tool upgrade vita-tree` to update a published installation.
72
+
73
+ The optional `[ai]` extra installs the compatible VITA CLI and enables provider
74
+ and reasoning integration automatically. Install plain `vita-tree` if you only
75
+ need browsing, editing, and PDF previews. AI calls still require your VITA
76
+ configuration and provider credentials or Codex login. See
77
+ [VITA](https://github.com/ABDELLAH-Hallou/vita-cv) for CV initialization and provider
78
+ setup. VITA can also be used from a local checkout with `--vita-source`.
79
+
80
+ **PDF previews:** install MiKTeX (Windows) or TeX Live (Linux/macOS), including your
81
+ template's packages and fonts, and put its executables on PATH. Git and TeX are
82
+ system requirements and are not installed by pip. Browser assets, PDF.js, fonts,
83
+ and character maps are bundled; no Node installation or CDN is needed at runtime.
84
+
85
+ To run from source:
86
+
87
+ ```sh
88
+ git clone https://github.com/ABDELLAH-Hallou/vita-tree.git
89
+ cd vita-tree
90
+ python -m pip install -e ".[ai]"
91
+ vt run /path/to/your/cv-repository
92
+ ```
93
+
94
+ On Windows use a path such as `vt run "C:\path\to\cv-repository"`.
95
+
96
+ ```text
97
+ vt run [REPOSITORY] [--port 8765] [--file main.tex] [--no-browser] [--vita-source PATH]
98
+ ```
99
+
100
+ The server accepts localhost connections only. It can modify the chosen repository, so do not expose it through a network proxy. Compile only trusted local LaTeX: disabling shell escape is not an operating-system sandbox.
101
+
102
+ ## Workflow
103
+
104
+ 1. Open a branch. Existing checked-out branches display working files, including uncommitted `main.tex`, `job.md`, and `.vita/results/*.md`. Other branches display committed files.
105
+ 2. Choose **Branch from this**, name the branch, and paste the job description. Vita Tree creates a Git linked worktree below the repository's Git common directory at `vita-tree/worktrees/`. The original checkout is not switched. The viewed main document and the new `job.md` are written to the new worktree.
106
+ 3. In **Structure**, select/copy text normally, or double-click text in the new version to edit it. The parser maps text to its exact source range and escapes LaTeX special characters. **LaTeX** provides the full editable source for other changes. Save writes the branch worktree's real file.
107
+ 4. In **Job & AI**, save `job.md`, select a provider, model, reasoning level, and language, and run **Analyze & adapt**. The app runs `vita analyze --auto`, then `vita adapt --auto`, in a separate snapshot. It checks the reports and a changed, parseable `main.tex` before applying output. The exact pre-run CV becomes the original comparison. Failed and conflicting results remain in the run folder shown in the error.
108
+ 5. Review `.vita/results/analyze.md`, `.vita/results/adapt.md`, the source diff, and both PDFs. The PDF view uses the actual TeX output with PDF.js canvas rendering and its text layer. Choose a different engine if your template requires it.
109
+
110
+ **Saves are local and uncommitted.** No commit, push, or VITA company-registry update happens automatically. The workspace footer gives the directory to use with Git/VITA. Commit the CV and job description from that directory when ready. Linked worktrees persist across server restarts; Git will refuse to check out their branch elsewhere until you remove the worktree with Git after preserving your edits.
111
+
112
+ For existing branches without a recorded baseline, Original means that branch's committed CV. New branches retain the viewed base CV; AI runs retain the pre-run CV. Reload imports changes made by a terminal/editor. Saving with a stale revision returns a conflict and preserves the user's editor text.
113
+
114
+ VITA's local `config.json`, `extensions.json`, and `cv.yaml` are supplied to isolated AI runs. API-key/token values from `.vita/.env` are passed in child-process memory. Existing reports are branch-local. The UI does not expose credentials or raw provider logs.
115
+
116
+ Provider/model dropdowns scan `.vita/extensions.json` on every local and remote branch ref and in linked working trees. Duplicate choices are combined; hovering over Model lists their sources. Reload rescans the repository. Choosing a model from another branch overrides only the isolated run, leaving your branch configuration intact. These are discovered configurations, not a guarantee that historical model names remain available to your account.
117
+
118
+ With the `[ai]` extra or `--vita-source`, the child-process adapter makes environment credentials available to VITA and forwards Codex reasoning as an explicit `-c model_reasoning_effort` override for both steps. Available levels come from the selected model's entry in `$CODEX_HOME/models_cache.json` (default `~/.codex`). Models absent from that catalog and non-Codex providers offer **Provider default** only; unsupported settings are rejected by the server. No parent VITA source files or global Codex settings are changed.
119
+
120
+ The **Appearance** selector in the header offers Light, Dark, and System. Your preference is saved in this browser; System follows OS appearance changes. Reading pages and compiled PDFs remain white in dark mode.
121
+
122
+ For a pipx editable installation, source changes take effect when you restart `vt`; no reinstall is needed. To reinstall its environment explicitly, run `pipx reinstall vita-tree`, then restart the command above.
123
+
124
+ ## What is supported and what is limited
125
+
126
+ | Capability | Status |
127
+ | --- | --- |
128
+ | Centered, responsive branch list and original/new comparison | Implemented |
129
+ | Actual LaTeX syntax parsing with positions | `pylatexenc` AST, not regex stripping |
130
+ | Common `resume.cls` content: names, addresses, rSection/rSubsection, formatting, bullets, tabularx | Structured reading view supported |
131
+ | Text selection and mapped editing | HTML reading view and PDF text layer; edits made in Structure/LaTeX update the source |
132
+ | Exact fonts, spacing, line breaks, page breaks | Compiled PDF is authoritative |
133
+ | Arbitrary macro expansion / exact HTML reproduction of every LaTeX package | Not supported; use PDF and source editing |
134
+ | Editing directly inside the compiled PDF | Not supported; PDF is read-only, then recompiled after source edits |
135
+ | `\\input` / `\\include`, custom classes, images | Included in compilation when present in the repository snapshot; included files are not visually editable in Structure |
136
+ | Multi-file uncommitted changes when creating a branch | Only the displayed main document is copied; other files come from the base commit |
137
+ | Bibliography, makeindex, minted/shell-escape builds | Not orchestrated; current compiler runs the selected TeX engine twice |
138
+ | Guaranteed perfect PDF reading order for arbitrary templates/fonts | Not possible; depends on the PDF's text encoding and layout |
139
+ | Successful AI generation for every provider | Depends on VITA credentials/provider availability; failed runs do not replace the CV |
140
+
141
+ Structure preserves unsupported source and explicitly reports unknown commands/environments. It is a reading/editing aid, not a TeX engine. Source edits can temporarily be invalid; the UI reports parse/compile failures instead of pretending a stale PDF is current. AI results are syntax-checked but still require PDF compilation and factual review.
142
+
143
+ PDF previews and AI snapshots are stored under the repository Git common directory's `vita-tree/pdf/` and `vita-tree/runs/`. These can accumulate; keep the server stopped before manually cleaning old cache folders. Do not delete `worktrees/` directly; use Git's worktree commands.
144
+
145
+ ## Development and verification
146
+
147
+ ```powershell
148
+ python -m pip install -e ".[test]"
149
+ python -m unittest discover -s tests -v
150
+ python -m playwright install chromium
151
+ python tests/browser_check.py --browser chromium
152
+ ```
153
+
154
+ Browser tests cover editing, branch creation, provider settings, themes, conflicts,
155
+ and real PDF compilation and text selection. They use synthetic CVs and a fake AI
156
+ provider. Screenshots and PDFs are saved in ignored `.test-artifacts/`.
157
+
158
+ PDF.js is pinned in `package-lock.json`; browser assets and its Apache license are vendored into the Python package. Node is only needed to refresh these assets:
159
+
160
+ ```powershell
161
+ npm ci
162
+ npm run vendor
163
+ ```
164
+
165
+ Use Node 22.13+ or 24+ when updating PDF.js. The application itself runs on Python 3.10+.
166
+
167
+ ## Releases
168
+
169
+ Use `feat:` and `fix:` commit messages. Release Please opens a PR updating the
170
+ version and changelog; merging it creates the release tag. Code, browser/PDF,
171
+ package installation, and privacy checks run before TestPyPI and PyPI uploads.
172
+ Publishing uses `PYPI_API_TOKEN` in the `pypi` environment,
173
+ `TEST_PYPI_API_TOKEN` in `testpypi`, and the repository's `RELEASE_PLEASE_TOKEN`.
174
+
175
+ Vita Tree is MIT licensed. Bundled PDF.js components retain their original licenses;
176
+ see [third-party notices](https://github.com/ABDELLAH-Hallou/vita-tree/blob/main/THIRD_PARTY_NOTICES.md).
@@ -0,0 +1,128 @@
1
+ # Vita Tree
2
+
3
+ Browse, edit, and adapt LaTeX CVs across Git branches. Compare versions side by side, keep a job description with each branch, and preview the compiled PDFs.
4
+
5
+ ## Install and run
6
+
7
+ Requires **Python 3.10+**, **Git**, and a Git repository containing a LaTeX CV.
8
+ Install the CLI in an isolated environment with pipx:
9
+
10
+ ```sh
11
+ pipx install "vita-tree[ai]"
12
+ vt run /path/to/your/cv-repository
13
+ ```
14
+
15
+ Or use uv:
16
+
17
+ ```sh
18
+ uv tool install "vita-tree[ai]"
19
+ vt run /path/to/your/cv-repository
20
+ ```
21
+
22
+ `vita-tree` is also available as an alias for `vt`; `python -m vita_tree` works
23
+ inside the environment where the package is installed. Use `pipx upgrade vita-tree` or `uv tool upgrade vita-tree` to update a published installation.
24
+
25
+ The optional `[ai]` extra installs the compatible VITA CLI and enables provider
26
+ and reasoning integration automatically. Install plain `vita-tree` if you only
27
+ need browsing, editing, and PDF previews. AI calls still require your VITA
28
+ configuration and provider credentials or Codex login. See
29
+ [VITA](https://github.com/ABDELLAH-Hallou/vita-cv) for CV initialization and provider
30
+ setup. VITA can also be used from a local checkout with `--vita-source`.
31
+
32
+ **PDF previews:** install MiKTeX (Windows) or TeX Live (Linux/macOS), including your
33
+ template's packages and fonts, and put its executables on PATH. Git and TeX are
34
+ system requirements and are not installed by pip. Browser assets, PDF.js, fonts,
35
+ and character maps are bundled; no Node installation or CDN is needed at runtime.
36
+
37
+ To run from source:
38
+
39
+ ```sh
40
+ git clone https://github.com/ABDELLAH-Hallou/vita-tree.git
41
+ cd vita-tree
42
+ python -m pip install -e ".[ai]"
43
+ vt run /path/to/your/cv-repository
44
+ ```
45
+
46
+ On Windows use a path such as `vt run "C:\path\to\cv-repository"`.
47
+
48
+ ```text
49
+ vt run [REPOSITORY] [--port 8765] [--file main.tex] [--no-browser] [--vita-source PATH]
50
+ ```
51
+
52
+ The server accepts localhost connections only. It can modify the chosen repository, so do not expose it through a network proxy. Compile only trusted local LaTeX: disabling shell escape is not an operating-system sandbox.
53
+
54
+ ## Workflow
55
+
56
+ 1. Open a branch. Existing checked-out branches display working files, including uncommitted `main.tex`, `job.md`, and `.vita/results/*.md`. Other branches display committed files.
57
+ 2. Choose **Branch from this**, name the branch, and paste the job description. Vita Tree creates a Git linked worktree below the repository's Git common directory at `vita-tree/worktrees/`. The original checkout is not switched. The viewed main document and the new `job.md` are written to the new worktree.
58
+ 3. In **Structure**, select/copy text normally, or double-click text in the new version to edit it. The parser maps text to its exact source range and escapes LaTeX special characters. **LaTeX** provides the full editable source for other changes. Save writes the branch worktree's real file.
59
+ 4. In **Job & AI**, save `job.md`, select a provider, model, reasoning level, and language, and run **Analyze & adapt**. The app runs `vita analyze --auto`, then `vita adapt --auto`, in a separate snapshot. It checks the reports and a changed, parseable `main.tex` before applying output. The exact pre-run CV becomes the original comparison. Failed and conflicting results remain in the run folder shown in the error.
60
+ 5. Review `.vita/results/analyze.md`, `.vita/results/adapt.md`, the source diff, and both PDFs. The PDF view uses the actual TeX output with PDF.js canvas rendering and its text layer. Choose a different engine if your template requires it.
61
+
62
+ **Saves are local and uncommitted.** No commit, push, or VITA company-registry update happens automatically. The workspace footer gives the directory to use with Git/VITA. Commit the CV and job description from that directory when ready. Linked worktrees persist across server restarts; Git will refuse to check out their branch elsewhere until you remove the worktree with Git after preserving your edits.
63
+
64
+ For existing branches without a recorded baseline, Original means that branch's committed CV. New branches retain the viewed base CV; AI runs retain the pre-run CV. Reload imports changes made by a terminal/editor. Saving with a stale revision returns a conflict and preserves the user's editor text.
65
+
66
+ VITA's local `config.json`, `extensions.json`, and `cv.yaml` are supplied to isolated AI runs. API-key/token values from `.vita/.env` are passed in child-process memory. Existing reports are branch-local. The UI does not expose credentials or raw provider logs.
67
+
68
+ Provider/model dropdowns scan `.vita/extensions.json` on every local and remote branch ref and in linked working trees. Duplicate choices are combined; hovering over Model lists their sources. Reload rescans the repository. Choosing a model from another branch overrides only the isolated run, leaving your branch configuration intact. These are discovered configurations, not a guarantee that historical model names remain available to your account.
69
+
70
+ With the `[ai]` extra or `--vita-source`, the child-process adapter makes environment credentials available to VITA and forwards Codex reasoning as an explicit `-c model_reasoning_effort` override for both steps. Available levels come from the selected model's entry in `$CODEX_HOME/models_cache.json` (default `~/.codex`). Models absent from that catalog and non-Codex providers offer **Provider default** only; unsupported settings are rejected by the server. No parent VITA source files or global Codex settings are changed.
71
+
72
+ The **Appearance** selector in the header offers Light, Dark, and System. Your preference is saved in this browser; System follows OS appearance changes. Reading pages and compiled PDFs remain white in dark mode.
73
+
74
+ For a pipx editable installation, source changes take effect when you restart `vt`; no reinstall is needed. To reinstall its environment explicitly, run `pipx reinstall vita-tree`, then restart the command above.
75
+
76
+ ## What is supported and what is limited
77
+
78
+ | Capability | Status |
79
+ | --- | --- |
80
+ | Centered, responsive branch list and original/new comparison | Implemented |
81
+ | Actual LaTeX syntax parsing with positions | `pylatexenc` AST, not regex stripping |
82
+ | Common `resume.cls` content: names, addresses, rSection/rSubsection, formatting, bullets, tabularx | Structured reading view supported |
83
+ | Text selection and mapped editing | HTML reading view and PDF text layer; edits made in Structure/LaTeX update the source |
84
+ | Exact fonts, spacing, line breaks, page breaks | Compiled PDF is authoritative |
85
+ | Arbitrary macro expansion / exact HTML reproduction of every LaTeX package | Not supported; use PDF and source editing |
86
+ | Editing directly inside the compiled PDF | Not supported; PDF is read-only, then recompiled after source edits |
87
+ | `\\input` / `\\include`, custom classes, images | Included in compilation when present in the repository snapshot; included files are not visually editable in Structure |
88
+ | Multi-file uncommitted changes when creating a branch | Only the displayed main document is copied; other files come from the base commit |
89
+ | Bibliography, makeindex, minted/shell-escape builds | Not orchestrated; current compiler runs the selected TeX engine twice |
90
+ | Guaranteed perfect PDF reading order for arbitrary templates/fonts | Not possible; depends on the PDF's text encoding and layout |
91
+ | Successful AI generation for every provider | Depends on VITA credentials/provider availability; failed runs do not replace the CV |
92
+
93
+ Structure preserves unsupported source and explicitly reports unknown commands/environments. It is a reading/editing aid, not a TeX engine. Source edits can temporarily be invalid; the UI reports parse/compile failures instead of pretending a stale PDF is current. AI results are syntax-checked but still require PDF compilation and factual review.
94
+
95
+ PDF previews and AI snapshots are stored under the repository Git common directory's `vita-tree/pdf/` and `vita-tree/runs/`. These can accumulate; keep the server stopped before manually cleaning old cache folders. Do not delete `worktrees/` directly; use Git's worktree commands.
96
+
97
+ ## Development and verification
98
+
99
+ ```powershell
100
+ python -m pip install -e ".[test]"
101
+ python -m unittest discover -s tests -v
102
+ python -m playwright install chromium
103
+ python tests/browser_check.py --browser chromium
104
+ ```
105
+
106
+ Browser tests cover editing, branch creation, provider settings, themes, conflicts,
107
+ and real PDF compilation and text selection. They use synthetic CVs and a fake AI
108
+ provider. Screenshots and PDFs are saved in ignored `.test-artifacts/`.
109
+
110
+ PDF.js is pinned in `package-lock.json`; browser assets and its Apache license are vendored into the Python package. Node is only needed to refresh these assets:
111
+
112
+ ```powershell
113
+ npm ci
114
+ npm run vendor
115
+ ```
116
+
117
+ Use Node 22.13+ or 24+ when updating PDF.js. The application itself runs on Python 3.10+.
118
+
119
+ ## Releases
120
+
121
+ Use `feat:` and `fix:` commit messages. Release Please opens a PR updating the
122
+ version and changelog; merging it creates the release tag. Code, browser/PDF,
123
+ package installation, and privacy checks run before TestPyPI and PyPI uploads.
124
+ Publishing uses `PYPI_API_TOKEN` in the `pypi` environment,
125
+ `TEST_PYPI_API_TOKEN` in `testpypi`, and the repository's `RELEASE_PLEASE_TOKEN`.
126
+
127
+ Vita Tree is MIT licensed. Bundled PDF.js components retain their original licenses;
128
+ see [third-party notices](https://github.com/ABDELLAH-Hallou/vita-tree/blob/main/THIRD_PARTY_NOTICES.md).
@@ -0,0 +1,25 @@
1
+ # Third-party components
2
+
3
+ Vita Tree's own source code is licensed under the MIT license in `LICENSE`.
4
+
5
+ The offline PDF viewer bundles files from Mozilla PDF.js (`pdfjs-dist` 6.4.299).
6
+ Their original notices are preserved under `vita_tree/static/vendor/` in the
7
+ installed package, and also included in the distribution's license metadata:
8
+
9
+ | Component | License/notice file relative to `static/vendor/` |
10
+ | --- | --- |
11
+ | PDF.js viewer and worker | `PDFJS-LICENSE` (Apache-2.0) |
12
+ | Adobe character maps | `cmaps/LICENSE` |
13
+ | Foxit/PDFium standard fonts | `standard_fonts/LICENSE_FOXIT` |
14
+ | Liberation fonts | `standard_fonts/LICENSE_LIBERATION` |
15
+ | JBIG2 decoder and PDF.js integration | `wasm/LICENSE_JBIG2`, `wasm/LICENSE_PDFJS_JBIG2` |
16
+ | OpenJPEG decoder and PDF.js integration | `wasm/LICENSE_OPENJPEG`, `wasm/LICENSE_PDFJS_OPENJPEG` |
17
+ | QCMS color management and PDF.js integration | `wasm/LICENSE_QCMS`, `wasm/LICENSE_PDFJS_QCMS` |
18
+
19
+ The pinned upstream source and refresh command are in `package-lock.json` and
20
+ `scripts/vendor-pdf.mjs`. Node is needed only to refresh vendored browser assets.
21
+ No upstream license is replaced by the MIT license of Vita Tree.
22
+
23
+ `pylatexenc` and the optional `vita-cv` integration are installed as Python
24
+ dependencies; their source is not copied into Vita Tree. They retain their own
25
+ licenses and metadata.