calkit-python 0.44.0__tar.gz → 0.45.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 (905) hide show
  1. {calkit_python-0.44.0 → calkit_python-0.45.0}/.gitmodules +3 -0
  2. {calkit_python-0.44.0 → calkit_python-0.45.0}/.pre-commit-config.yaml +16 -3
  3. {calkit_python-0.44.0 → calkit_python-0.45.0}/CONTRIBUTING.md +9 -0
  4. {calkit_python-0.44.0 → calkit_python-0.45.0}/Makefile +6 -3
  5. {calkit_python-0.44.0 → calkit_python-0.45.0}/PKG-INFO +1 -1
  6. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/check.py +13 -1
  7. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/main/core.py +281 -22
  8. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/main/xr.py +291 -3
  9. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/new.py +76 -16
  10. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/core.py +59 -0
  11. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/dvc/core.py +74 -0
  12. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/environments.py +68 -6
  13. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/git.py +106 -0
  14. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/package.json +1 -1
  15. calkit_python-0.45.0/calkit/labextension/static/909.6d8285ce7c45878ac508.js +1 -0
  16. calkit_python-0.44.0/calkit/labextension/static/remoteEntry.ac9035764d5b2adbb542.js → calkit_python-0.45.0/calkit/labextension/static/remoteEntry.d7a43c7948f690d37d19.js +1 -1
  17. calkit_python-0.45.0/calkit/markdown.py +2720 -0
  18. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/models/pipeline.py +78 -7
  19. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/pipeline.py +330 -6
  20. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/main/test_core.py +99 -0
  21. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/main/test_xr.py +172 -0
  22. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_check.py +49 -0
  23. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_new.py +22 -0
  24. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/dvc/test_core.py +53 -0
  25. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_core.py +68 -0
  26. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_git.py +76 -0
  27. calkit_python-0.45.0/calkit/tests/test_markdown.py +1449 -0
  28. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_pipeline.py +534 -1
  29. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/calkit-yaml.md +12 -0
  30. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/cli-reference.md +13 -11
  31. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/examples.md +15 -0
  32. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/notebooks.md +4 -0
  33. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/pipeline/index.md +32 -0
  34. calkit_python-0.45.0/docs/pipeline/markdown.md +331 -0
  35. {calkit_python-0.44.0/vscode-ext → calkit_python-0.45.0/docs}/schemas/calkit.json +139 -0
  36. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/index.md +1 -0
  37. calkit_python-0.45.0/docs/tutorials/runnable-readme.md +104 -0
  38. calkit_python-0.45.0/examples/markdown/.calkit/envs/jl/Manifest.toml +315 -0
  39. calkit_python-0.45.0/examples/markdown/.calkit/envs/jl/Project.toml +6 -0
  40. calkit_python-0.45.0/examples/markdown/.calkit/envs/py/.python-version +1 -0
  41. calkit_python-0.45.0/examples/markdown/.calkit/envs/py/pyproject.toml +8 -0
  42. calkit_python-0.45.0/examples/markdown/.calkit/envs/py/uv.lock +392 -0
  43. calkit_python-0.45.0/examples/markdown/.calkit/envs/r/.Rbuildignore +2 -0
  44. calkit_python-0.45.0/examples/markdown/.calkit/envs/r/.Rprofile +1 -0
  45. calkit_python-0.45.0/examples/markdown/.calkit/envs/r/DESCRIPTION +4 -0
  46. calkit_python-0.45.0/examples/markdown/.calkit/envs/r/renv/.gitignore +7 -0
  47. calkit_python-0.45.0/examples/markdown/.calkit/envs/r/renv/activate.R +1334 -0
  48. calkit_python-0.45.0/examples/markdown/.calkit/envs/r/renv/settings.json +19 -0
  49. calkit_python-0.45.0/examples/markdown/.calkit/envs/r/renv.lock +736 -0
  50. calkit_python-0.45.0/examples/markdown/.dvc/.gitignore +3 -0
  51. calkit_python-0.45.0/examples/markdown/.dvc/config +2 -0
  52. calkit_python-0.45.0/examples/markdown/.dvcignore +3 -0
  53. calkit_python-0.45.0/examples/markdown/.gitignore +6 -0
  54. calkit_python-0.45.0/examples/markdown/README.md +243 -0
  55. calkit_python-0.45.0/examples/markdown/calkit.yaml +30 -0
  56. calkit_python-0.45.0/examples/markdown/data/data.csv +51 -0
  57. calkit_python-0.45.0/examples/markdown/data/data2.csv +42 -0
  58. calkit_python-0.45.0/examples/markdown/dvc.lock +98 -0
  59. calkit_python-0.45.0/examples/markdown/dvc.yaml +55 -0
  60. calkit_python-0.45.0/examples/markdown/figures/data2.png +0 -0
  61. calkit_python-0.45.0/examples/markdown/figures/figure.png +0 -0
  62. calkit_python-0.45.0/examples/markdown/results/fit.json +1 -0
  63. calkit_python-0.45.0/examples/markdown-python/.dvc/.gitignore +3 -0
  64. calkit_python-0.45.0/examples/markdown-python/.dvc/config +2 -0
  65. calkit_python-0.45.0/examples/markdown-python/.dvcignore +3 -0
  66. calkit_python-0.45.0/examples/markdown-python/.gitignore +4 -0
  67. calkit_python-0.45.0/examples/markdown-python/.python-version +1 -0
  68. calkit_python-0.45.0/examples/markdown-python/README.md +101 -0
  69. calkit_python-0.45.0/examples/markdown-python/calkit.yaml +12 -0
  70. calkit_python-0.45.0/examples/markdown-python/dvc.lock +55 -0
  71. calkit_python-0.45.0/examples/markdown-python/dvc.yaml +26 -0
  72. calkit_python-0.45.0/examples/markdown-python/figures/waves.png +0 -0
  73. calkit_python-0.45.0/examples/markdown-python/pyproject.toml +10 -0
  74. calkit_python-0.45.0/examples/markdown-python/src/wavetools/__init__.py +19 -0
  75. calkit_python-0.45.0/examples/markdown-python/uv.lock +392 -0
  76. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/AGENTS.md +80 -0
  77. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/README.md +10 -2
  78. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/projects/core.py +270 -0
  79. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/models/core.py +19 -0
  80. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/pipeline.py +53 -37
  81. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/projects/test_core.py +150 -0
  82. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_pipeline.py +57 -0
  83. calkit_python-0.45.0/hub/backend/prestart.sh +16 -0
  84. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/index.ts +6 -0
  85. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/schemas.gen.ts +84 -0
  86. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/sdk.gen.ts +46 -0
  87. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/types.gen.ts +91 -0
  88. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/ArtifactCompareModal.tsx +17 -11
  89. calkit_python-0.45.0/hub/frontend/src/components/Common/Markdown.test.tsx +60 -0
  90. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/Markdown.tsx +55 -27
  91. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/SidebarItems.tsx +3 -1
  92. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/EditQuestion.tsx +30 -3
  93. calkit_python-0.45.0/hub/frontend/src/components/Tables/TableThumbnail.tsx +172 -0
  94. calkit_python-0.45.0/hub/frontend/src/components/Tables/TableView.test.tsx +117 -0
  95. calkit_python-0.45.0/hub/frontend/src/components/Tables/TableView.tsx +550 -0
  96. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/hooks/useProject.ts +27 -0
  97. calkit_python-0.45.0/hub/frontend/src/lib/tables.test.ts +286 -0
  98. calkit_python-0.45.0/hub/frontend/src/lib/tables.ts +477 -0
  99. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routeTree.gen.ts +23 -0
  100. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/figures.tsx +11 -6
  101. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/index.tsx +51 -2
  102. calkit_python-0.45.0/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/tables.tsx +366 -0
  103. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/notebook-toolbar.tsx +6 -3
  104. {calkit_python-0.44.0 → calkit_python-0.45.0}/mkdocs.yml +2 -0
  105. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/package.json +10 -1
  106. {calkit_python-0.44.0/docs → calkit_python-0.45.0/vscode-ext}/schemas/calkit.json +139 -0
  107. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/extension.ts +83 -26
  108. calkit_python-0.45.0/vscode-ext/src/markdown/core.ts +243 -0
  109. calkit_python-0.45.0/vscode-ext/src/markdown/view.ts +75 -0
  110. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/sidebar.ts +107 -38
  111. calkit_python-0.45.0/vscode-ext/src/test/markdown.test.ts +260 -0
  112. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/test/sidebar.test.ts +71 -0
  113. calkit_python-0.44.0/calkit/labextension/static/909.e3f9cc3408834a7fdcc3.js +0 -1
  114. calkit_python-0.44.0/hub/backend/prestart.sh +0 -10
  115. {calkit_python-0.44.0 → calkit_python-0.45.0}/.claude-plugin/marketplace.json +0 -0
  116. {calkit_python-0.44.0 → calkit_python-0.45.0}/.dockerignore +0 -0
  117. {calkit_python-0.44.0 → calkit_python-0.45.0}/.gitattributes +0 -0
  118. {calkit_python-0.44.0 → calkit_python-0.45.0}/.gitignore +0 -0
  119. {calkit_python-0.44.0 → calkit_python-0.45.0}/.prettierignore +0 -0
  120. {calkit_python-0.44.0 → calkit_python-0.45.0}/.prettierrc.json +0 -0
  121. {calkit_python-0.44.0 → calkit_python-0.45.0}/.python-version +0 -0
  122. {calkit_python-0.44.0 → calkit_python-0.45.0}/.vscode/launch.json +0 -0
  123. {calkit_python-0.44.0 → calkit_python-0.45.0}/.vscode/tasks.json +0 -0
  124. {calkit_python-0.44.0 → calkit_python-0.45.0}/AGENTS.md +0 -0
  125. {calkit_python-0.44.0 → calkit_python-0.45.0}/CITATION.cff +0 -0
  126. {calkit_python-0.44.0 → calkit_python-0.45.0}/CODE_OF_CONDUCT.md +0 -0
  127. {calkit_python-0.44.0 → calkit_python-0.45.0}/LICENSE +0 -0
  128. {calkit_python-0.44.0 → calkit_python-0.45.0}/README.md +0 -0
  129. {calkit_python-0.44.0 → calkit_python-0.45.0}/actions/run/README.md +0 -0
  130. {calkit_python-0.44.0 → calkit_python-0.45.0}/actions/run/action.yml +0 -0
  131. {calkit_python-0.44.0 → calkit_python-0.45.0}/actions/run/example.yml +0 -0
  132. {calkit_python-0.44.0 → calkit_python-0.45.0}/agent-plugin/.claude-plugin/plugin.json +0 -0
  133. {calkit_python-0.44.0 → calkit_python-0.45.0}/agent-plugin/skills/add-pipeline-stage/SKILL.md +0 -0
  134. {calkit_python-0.44.0 → calkit_python-0.45.0}/agent-plugin/skills/conventions/SKILL.md +0 -0
  135. {calkit_python-0.44.0 → calkit_python-0.45.0}/agent-plugin/skills/create-pipeline/SKILL.md +0 -0
  136. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/.gitignore +0 -0
  137. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/README.md +0 -0
  138. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/options.html +0 -0
  139. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/package-lock.json +0 -0
  140. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/package.json +0 -0
  141. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/popup.html +0 -0
  142. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/public/icons/calkit-128.png +0 -0
  143. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/public/icons/calkit-16.png +0 -0
  144. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/public/icons/calkit-32.png +0 -0
  145. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/public/icons/calkit-48.png +0 -0
  146. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/public/icons/calkit.svg +0 -0
  147. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/public/manifest.json +0 -0
  148. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/scripts/build-content.mjs +0 -0
  149. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/scripts/package-manifest.mjs +0 -0
  150. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/scripts/store-screenshots.py +0 -0
  151. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/scripts/watch.mjs +0 -0
  152. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/background/index.ts +0 -0
  153. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/content/github.ts +0 -0
  154. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/content/overleaf.ts +0 -0
  155. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/content/references.ts +0 -0
  156. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/api.ts +0 -0
  157. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/auth.ts +0 -0
  158. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/calkit-yaml.test.ts +0 -0
  159. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/calkit-yaml.ts +0 -0
  160. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/detect.test.ts +0 -0
  161. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/detect.ts +0 -0
  162. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/hub-url.ts +0 -0
  163. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/hubs.test.ts +0 -0
  164. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/hubs.ts +0 -0
  165. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/latex.test.ts +0 -0
  166. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/latex.ts +0 -0
  167. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/lifecycle.ts +0 -0
  168. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/messages.test.ts +0 -0
  169. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/messages.ts +0 -0
  170. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/pickers.ts +0 -0
  171. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/storage.ts +0 -0
  172. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/types.ts +0 -0
  173. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/ui.test.ts +0 -0
  174. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/core/ui.ts +0 -0
  175. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/options/options.ts +0 -0
  176. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/popup/popup.css +0 -0
  177. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/popup/popup.ts +0 -0
  178. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/src/viewer/viewer.ts +0 -0
  179. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/tsconfig.json +0 -0
  180. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/viewer.html +0 -0
  181. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/vite.config.ts +0 -0
  182. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/vite.content.config.ts +0 -0
  183. {calkit_python-0.44.0 → calkit_python-0.45.0}/browser-ext/vitest.config.ts +0 -0
  184. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/__init__.py +0 -0
  185. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/__main__.py +0 -0
  186. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/calc.py +0 -0
  187. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/check.py +0 -0
  188. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/__init__.py +0 -0
  189. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/config.py +0 -0
  190. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/core.py +0 -0
  191. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/delete.py +0 -0
  192. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/describe.py +0 -0
  193. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/dev.py +0 -0
  194. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/hub.py +0 -0
  195. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/import_.py +0 -0
  196. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/latex.py +0 -0
  197. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/list.py +0 -0
  198. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/main/__init__.py +0 -0
  199. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/notebooks.py +0 -0
  200. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/office.py +0 -0
  201. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/overleaf.py +0 -0
  202. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/scheduler.py +0 -0
  203. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/sync.py +0 -0
  204. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/cli/update.py +0 -0
  205. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/conda.py +0 -0
  206. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/config.py +0 -0
  207. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/datasets.py +0 -0
  208. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/dependencies.py +0 -0
  209. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/detect.py +0 -0
  210. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/docker.py +0 -0
  211. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/dvc/__init__.py +0 -0
  212. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/dvc/zip.py +0 -0
  213. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/fs.py +0 -0
  214. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/github.py +0 -0
  215. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/gui.py +0 -0
  216. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/hub.py +0 -0
  217. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/install.py +0 -0
  218. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/invenio.py +0 -0
  219. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/julia.py +0 -0
  220. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/jupyter.py +0 -0
  221. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/jupyterlab/__init__.py +0 -0
  222. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/jupyterlab/routes.py +0 -0
  223. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
  224. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/schemas/calkit/plugin.json +0 -0
  225. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
  226. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
  227. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
  228. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
  229. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  230. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
  231. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/style.js +0 -0
  232. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/labextension/static/third-party-licenses.json +0 -0
  233. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/latex.py +0 -0
  234. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/licenses.py +0 -0
  235. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/magics.py +0 -0
  236. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/matlab.py +0 -0
  237. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/models/__init__.py +0 -0
  238. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/models/core.py +0 -0
  239. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/models/io.py +0 -0
  240. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/models/iteration.py +0 -0
  241. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/notebooks.py +0 -0
  242. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/office.py +0 -0
  243. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/ops.py +0 -0
  244. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/overleaf.py +0 -0
  245. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/releases.py +0 -0
  246. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/README.md +0 -0
  247. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/__init__.py +0 -0
  248. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/Dockerfile +0 -0
  249. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/README.md +0 -0
  250. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/base.json +0 -0
  251. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/devcontainer.json +0 -0
  252. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/scripts/check-envs.sh +0 -0
  253. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/scripts/post-create.sh +0 -0
  254. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/scripts/post-start.sh +0 -0
  255. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/devcontainer/scripts/update-content.sh +0 -0
  256. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/github-actions/example.yml +0 -0
  257. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/vscode/README.md +0 -0
  258. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/vscode/extensions.json +0 -0
  259. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/resources/vscode/settings.json +0 -0
  260. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/schema.py +0 -0
  261. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/server.py +0 -0
  262. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/__init__.py +0 -0
  263. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/core.py +0 -0
  264. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/__init__.py +0 -0
  265. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/article/paper.tex +0 -0
  266. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/core.py +0 -0
  267. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/jfm/jfm.bst +0 -0
  268. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/jfm/jfm.cls +0 -0
  269. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  270. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/jfm/paper.tex +0 -0
  271. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/templates/latex/jfm/upmath.sty +0 -0
  272. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/__init__.py +0 -0
  273. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/__init__.py +0 -0
  274. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/main/__init__.py +0 -0
  275. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/main/test_lock.py +0 -0
  276. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/main/test_subprojects.py +0 -0
  277. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_config.py +0 -0
  278. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_core.py +0 -0
  279. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_delete.py +0 -0
  280. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_describe.py +0 -0
  281. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_hub.py +0 -0
  282. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_import.py +0 -0
  283. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_latex.py +0 -0
  284. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_list.py +0 -0
  285. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_notebooks.py +0 -0
  286. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_overleaf.py +0 -0
  287. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_scheduler.py +0 -0
  288. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_sync.py +0 -0
  289. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/cli/test_update.py +0 -0
  290. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/dvc/__init__.py +0 -0
  291. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/dvc/test_zip.py +0 -0
  292. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/jupyterlab/__init__.py +0 -0
  293. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/jupyterlab/conftest.py +0 -0
  294. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/jupyterlab/test_routes.py +0 -0
  295. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/models/__init__.py +0 -0
  296. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/models/test_core.py +0 -0
  297. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/models/test_iteration.py +0 -0
  298. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/models/test_pipeline.py +0 -0
  299. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_calc.py +0 -0
  300. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_check.py +0 -0
  301. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_conda.py +0 -0
  302. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_config.py +0 -0
  303. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_dependencies.py +0 -0
  304. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_detect.py +0 -0
  305. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_docker.py +0 -0
  306. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_docs_references.py +0 -0
  307. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_environments.py +0 -0
  308. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_fs.py +0 -0
  309. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_hub.py +0 -0
  310. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_install.py +0 -0
  311. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_invenio.py +0 -0
  312. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_julia.py +0 -0
  313. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_jupyter.py +0 -0
  314. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_keyring_windows.py +0 -0
  315. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_licenses.py +0 -0
  316. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_magics.py +0 -0
  317. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_matlab.py +0 -0
  318. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_notebooks.py +0 -0
  319. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_overleaf.py +0 -0
  320. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_releases.py +0 -0
  321. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_resources.py +0 -0
  322. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_schema.py +0 -0
  323. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_templates.py +0 -0
  324. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/tests/test_workspace.py +0 -0
  325. {calkit_python-0.44.0 → calkit_python-0.45.0}/calkit/workspace.py +0 -0
  326. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/CNAME +0 -0
  327. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/acknowledgements.md +0 -0
  328. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/ai-tools.md +0 -0
  329. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/apps.md +0 -0
  330. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/browser-ext/index.md +0 -0
  331. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/browser-ext/privacy.md +0 -0
  332. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/calculations.md +0 -0
  333. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/cloud-integration.md +0 -0
  334. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/datasets.md +0 -0
  335. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/environments.md +0 -0
  336. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/governance.md +0 -0
  337. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/help.md +0 -0
  338. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/hpc.md +0 -0
  339. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/hub/index.md +0 -0
  340. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/hub/self-hosting.md +0 -0
  341. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/c-to-the-k-white.svg +0 -0
  342. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/calkit-fragmentation-compendium.png +0 -0
  343. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/calkit-no-bg.png +0 -0
  344. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/caltech.png +0 -0
  345. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/connect-zenodo.png +0 -0
  346. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/jupyterlab/all-green.png +0 -0
  347. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/jupyterlab/collect-data-stale.png +0 -0
  348. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/jupyterlab/new-env.png +0 -0
  349. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/jupyterlab/new-notebook.png +0 -0
  350. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/jupyterlab/pipeline-badge.png +0 -0
  351. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/jupyterlab-params.png +0 -0
  352. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/pipeline.png +0 -0
  353. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/plos-osi-code-2024-03.png +0 -0
  354. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/schmidt-sciences.png +0 -0
  355. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/img/vscode-nb-params.png +0 -0
  356. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/index.md +0 -0
  357. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/installation.md +0 -0
  358. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/jupyterlab.md +0 -0
  359. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/latex.md +0 -0
  360. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/local-server.md +0 -0
  361. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/overleaf.md +0 -0
  362. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/pipeline/manual-steps.md +0 -0
  363. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/pipeline/running-and-logging.md +0 -0
  364. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/questions.md +0 -0
  365. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/quickstart.md +0 -0
  366. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/references.md +0 -0
  367. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/releases.md +0 -0
  368. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/reproducibility.md +0 -0
  369. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/requirements.md +0 -0
  370. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/subprojects.md +0 -0
  371. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  372. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/ai-agents.md +0 -0
  373. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/conda-envs.md +0 -0
  374. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/existing-project.md +0 -0
  375. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/first-project.md +0 -0
  376. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/github-actions.md +0 -0
  377. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/actions-repo-secrets.png +0 -0
  378. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  379. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  380. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  381. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  382. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  383. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  384. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  385. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  386. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  387. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  388. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  389. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  390. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  391. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  392. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/create-project.png +0 -0
  393. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  394. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/excel-chart.png +0 -0
  395. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/excel-data.png +0 -0
  396. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  397. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/needs-clone.png +0 -0
  398. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/new-stage.png +0 -0
  399. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  400. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  401. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/status-more-rows.png +0 -0
  402. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  403. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/untracked-data.png +0 -0
  404. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/updated-publication.png +0 -0
  405. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  406. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/office/workflow-page.png +0 -0
  407. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/clone.png +0 -0
  408. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/create-project.png +0 -0
  409. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  410. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  411. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  412. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/new-token.png +0 -0
  413. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/reclone.png +0 -0
  414. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  415. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/quick-actions.png +0 -0
  416. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/run-proc.png +0 -0
  417. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/vscode-slurm-notebook/create-calkit-env.png +0 -0
  418. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/vscode-slurm-notebook/create-inner-env.png +0 -0
  419. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/vscode-slurm-notebook/create-new-calkit-env.png +0 -0
  420. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/vscode-slurm-notebook/select-calkit-env.png +0 -0
  421. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/vscode-slurm-notebook/slurm-job-running.png +0 -0
  422. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/vscode-slurm-notebook/slurm-launch-options.png +0 -0
  423. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/img/vscode-slurm-notebook/starting-slurm-job.png +0 -0
  424. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/jupyterlab.md +0 -0
  425. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/latex-codespaces.md +0 -0
  426. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/matlab.md +0 -0
  427. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/notebook-pipeline.md +0 -0
  428. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/office.md +0 -0
  429. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/openfoam.md +0 -0
  430. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/procedures.md +0 -0
  431. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/tutorials/vscode-slurm-notebook.md +0 -0
  432. {calkit_python-0.44.0 → calkit_python-0.45.0}/docs/version-control.md +0 -0
  433. {calkit_python-0.44.0 → calkit_python-0.45.0}/flake.lock +0 -0
  434. {calkit_python-0.44.0 → calkit_python-0.45.0}/flake.nix +0 -0
  435. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/.env.example +0 -0
  436. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/.gitattributes +0 -0
  437. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/.gitignore +0 -0
  438. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/.vscode/launch.json +0 -0
  439. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/LICENSE +0 -0
  440. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/Makefile +0 -0
  441. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/README.md +0 -0
  442. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/.gitignore +0 -0
  443. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/.python-version +0 -0
  444. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/Dockerfile +0 -0
  445. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/Makefile +0 -0
  446. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/alembic.ini +0 -0
  447. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/__init__.py +0 -0
  448. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/README +0 -0
  449. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/env.py +0 -0
  450. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/script.py.mako +0 -0
  451. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/.keep +0 -0
  452. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/07c8236476c4_add_fields_to_usertoken.py +0 -0
  453. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/10a05eaedfbd_add_dataset_table.py +0 -0
  454. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/1546aa334cd5_make_project_description_nullable.py +0 -0
  455. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/1a31ce608336_add_cascade_delete_relationships.py +0 -0
  456. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/1fb6e38eb0e9_add_deviceauth_table.py +0 -0
  457. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/208e7457f3ba_add_title_to_project.py +0 -0
  458. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/2e7c25a00842_add_is_public_to_project.py +0 -0
  459. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/38e178698db2_update_subscription_model_to_use_plan_.py +0 -0
  460. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/3b1e67e9c318_add_usertoken_table.py +0 -0
  461. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/4dac15c0282a_add_stripe_customer_id_to_user.py +0 -0
  462. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/4e1c917fcca4_add_status_columns_to_project_table.py +0 -0
  463. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/5ba89308431f_add_project_table.py +0 -0
  464. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/5d6f8217c890_add_subscriber_user_id_to_org_.py +0 -0
  465. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/65b2d15cc702_add_github_username_field_to_user.py +0 -0
  466. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/697c3c1a8a27_add_git_repo_url_to_project.py +0 -0
  467. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/6f3a3afbea8b_add_number_field_to_question.py +0 -0
  468. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/7076d9b5c887_use_account_for_project_owner.py +0 -0
  469. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/71e1d1e69bbd_add_table_for_storing_user_github_tokens.py +0 -0
  470. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/799476973bce_add_created_ts_to_user_github_token_.py +0 -0
  471. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/7cacee34034c_add_parent_child_relationship_to_.py +0 -0
  472. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/9c0a54914c78_add_max_length_for_string_varchar_.py +0 -0
  473. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/9c4f70636d73_add_fields_to_usertoken.py +0 -0
  474. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/a333fc5aa994_index_project_folders_synced_with_.py +0 -0
  475. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/a4af19842927_create_table_to_store_user_zenodo_tokens.py +0 -0
  476. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/ab7816be480b_drop_items.py +0 -0
  477. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/ac622559475f_save_timestamps_for_github_token_.py +0 -0
  478. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/af024967630d_lowercase_account_names.py +0 -0
  479. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/c1f9a3e27d48_consolidate_comment_tables.py +0 -0
  480. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/c46a78ba506c_add_created_column_to_account.py +0 -0
  481. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/c749b39072d3_add_figurecomment.py +0 -0
  482. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/c7c41c3f0d22_add_user_external_credential_table.py +0 -0
  483. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/d01ce914143d_make_question_a_table.py +0 -0
  484. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/d21ed1c9537e_add_zenodo_user_id_column_to_user.py +0 -0
  485. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/d3a8021fb433_add_table_for_user_project_access.py +0 -0
  486. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/d4e5f6a7b8c9_ghless_membership_and_invitations.py +0 -0
  487. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/d6366015af35_add_discount_code_table.py +0 -0
  488. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/d98dd8ec85a3_edit_replace_id_integers_in_all_models_.py +0 -0
  489. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/dcef842dee10_add_refreshtoken_table.py +0 -0
  490. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/e1b0fa2a6d34_backfill_external_credentials_from_legacy_.py +0 -0
  491. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/e2412789c190_initialize_models.py +0 -0
  492. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/e7671197c00b_add_account_table.py +0 -0
  493. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/ed74edb0a9e6_create_table_for_user_overleaf_token.py +0 -0
  494. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/edcabfca98df_add_subscription_and_org_membership_.py +0 -0
  495. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/f0e23e048b1b_add_fields_to_project.py +0 -0
  496. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/f3a9c1b7e240_add_releases_feature.py +0 -0
  497. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/f5ad6445ad03_enable_user_project_access_to_be_null.py +0 -0
  498. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/alembic/versions/f74a96172dbd_add_table_for_locking_project_files.py +0 -0
  499. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/__init__.py +0 -0
  500. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/deps.py +0 -0
  501. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/main.py +0 -0
  502. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/__init__.py +0 -0
  503. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/accounts.py +0 -0
  504. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/datasets.py +0 -0
  505. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/feature_votes.py +0 -0
  506. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/login.py +0 -0
  507. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/misc.py +0 -0
  508. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/orgs.py +0 -0
  509. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/projects/__init__.py +0 -0
  510. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/projects/dvc.py +0 -0
  511. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/projects/fs.py +0 -0
  512. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/projects/releases.py +0 -0
  513. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/references.py +0 -0
  514. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/api/routes/users.py +0 -0
  515. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/arxiv.py +0 -0
  516. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/client.py +0 -0
  517. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/config.py +0 -0
  518. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/core.py +0 -0
  519. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/db.py +0 -0
  520. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/dvc.py +0 -0
  521. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/build/new_account.html +0 -0
  522. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/build/project_invitation.html +0 -0
  523. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/build/release_share.html +0 -0
  524. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/build/reset_password.html +0 -0
  525. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/build/test_email.html +0 -0
  526. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/src/new_account.mjml +0 -0
  527. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/src/project_invitation.mjml +0 -0
  528. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/src/release_share.mjml +0 -0
  529. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/src/reset_password.mjml +0 -0
  530. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/email-templates/src/test_email.mjml +0 -0
  531. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/git.py +0 -0
  532. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/github.py +0 -0
  533. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/main.py +0 -0
  534. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/messaging.py +0 -0
  535. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/mixpanel.py +0 -0
  536. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/models/__init__.py +0 -0
  537. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/models/projects.py +0 -0
  538. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/models/releases.py +0 -0
  539. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/orgs.py +0 -0
  540. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/pdftext.py +0 -0
  541. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/projects.py +0 -0
  542. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/security.py +0 -0
  543. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/storage.py +0 -0
  544. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/stripe.py +0 -0
  545. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/subscriptions.py +0 -0
  546. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/__init__.py +0 -0
  547. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/__init__.py +0 -0
  548. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/__init__.py +0 -0
  549. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/projects/__init__.py +0 -0
  550. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/projects/test_dvc.py +0 -0
  551. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/projects/test_fs.py +0 -0
  552. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/projects/test_overleaf_links.py +0 -0
  553. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/test_feature_votes.py +0 -0
  554. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/test_login.py +0 -0
  555. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/test_misc.py +0 -0
  556. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/test_releases.py +0 -0
  557. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/api/routes/test_users.py +0 -0
  558. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/conftest.py +0 -0
  559. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_arxiv.py +0 -0
  560. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_client.py +0 -0
  561. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_core.py +0 -0
  562. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_db.py +0 -0
  563. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_dvc.py +0 -0
  564. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_git.py +0 -0
  565. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_pdftext.py +0 -0
  566. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_projects.py +0 -0
  567. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_users.py +0 -0
  568. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/tests/test_version.py +0 -0
  569. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/users.py +0 -0
  570. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/version.py +0 -0
  571. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/zenodo.py +0 -0
  572. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/app/zotero.py +0 -0
  573. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/pyproject.toml +0 -0
  574. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/scripts/backend-pre-start.py +0 -0
  575. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/scripts/create-initial-data.py +0 -0
  576. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/scripts/format.sh +0 -0
  577. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/scripts/generate-client.py +0 -0
  578. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/scripts/lint.sh +0 -0
  579. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/scripts/rotate-fernet-secrets.py +0 -0
  580. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/scripts/test.sh +0 -0
  581. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/backend/tests-start.sh +0 -0
  582. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/config/alloy/config.alloy +0 -0
  583. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/config/grafana/provisioning/dashboards/dashboards.yml +0 -0
  584. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/config/grafana/provisioning/dashboards/fastapi.json +0 -0
  585. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/config/grafana/provisioning/datasources/datasources.yml +0 -0
  586. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/config/loki/loki.yml +0 -0
  587. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/config/prometheus/prometheus.yml +0 -0
  588. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/docker-compose.override.yml +0 -0
  589. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/docker-compose.traefik.yml +0 -0
  590. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/docker-compose.yml +0 -0
  591. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/docs/dev/database-migrations.md +0 -0
  592. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/docs/dev/deployment.md +0 -0
  593. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/docs/dev/development.md +0 -0
  594. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/.dockerignore +0 -0
  595. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/.gitignore +0 -0
  596. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/.nvmrc +0 -0
  597. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/Dockerfile +0 -0
  598. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/Makefile +0 -0
  599. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/README.md +0 -0
  600. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/biome.json +0 -0
  601. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/index.html +0 -0
  602. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/modify-openapi-operationids.js +0 -0
  603. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/nginx-backend-not-found.conf +0 -0
  604. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/nginx.conf +0 -0
  605. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/openapi-ts.config.ts +0 -0
  606. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/package-lock.json +0 -0
  607. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/package.json +0 -0
  608. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/playwright.config.ts +0 -0
  609. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/assets/images/c-to-the-k.svg +0 -0
  610. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/assets/images/calkit-no-bg.svg +0 -0
  611. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/assets/images/calkit.svg +0 -0
  612. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/assets/images/fastapi-logo.svg +0 -0
  613. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/assets/images/favicon.png +0 -0
  614. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/assets/images/kdot.svg +0 -0
  615. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/tex/.gitignore +0 -0
  616. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/tex/LICENSE-busytex +0 -0
  617. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/tex/busytex.js +0 -0
  618. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/tex/busytex.wasm +0 -0
  619. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/tex/busytex_pipeline.js +0 -0
  620. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/public/tex/busytex_worker.js +0 -0
  621. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/scripts/download-tex-engine.sh +0 -0
  622. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/client/client.gen.ts +0 -0
  623. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/client/index.ts +0 -0
  624. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/client/types.gen.ts +0 -0
  625. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/client/utils.gen.ts +0 -0
  626. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/client.gen.ts +0 -0
  627. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/auth.gen.ts +0 -0
  628. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/bodySerializer.gen.ts +0 -0
  629. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/params.gen.ts +0 -0
  630. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/pathSerializer.gen.ts +0 -0
  631. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/queryKeySerializer.gen.ts +0 -0
  632. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/serverSentEvents.gen.ts +0 -0
  633. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/types.gen.ts +0 -0
  634. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/client/core/utils.gen.ts +0 -0
  635. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Admin/AddUser.tsx +0 -0
  636. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Admin/EditUser.tsx +0 -0
  637. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/ActionsMenu.tsx +0 -0
  638. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/ClearableInput.tsx +0 -0
  639. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/CodeEditorPane.tsx +0 -0
  640. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/CommentsPanel.tsx +0 -0
  641. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/ConnectGitHubPrompt.tsx +0 -0
  642. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/ConnectZoteroPrompt.tsx +0 -0
  643. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/DeleteAlert.tsx +0 -0
  644. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/GlobalSearch.tsx +0 -0
  645. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/LoadingSpinner.tsx +0 -0
  646. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/Mermaid.tsx +0 -0
  647. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/Navbar.tsx +0 -0
  648. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/NotBuiltAlert.tsx +0 -0
  649. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/NotFound.tsx +0 -0
  650. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/NotificationBell.tsx +0 -0
  651. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/PageMenu.tsx +0 -0
  652. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/PdfCanvas.tsx +0 -0
  653. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/PdfDocumentViewer.tsx +0 -0
  654. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/ProjectCommandPalette.tsx +0 -0
  655. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/RefPicker.tsx +0 -0
  656. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/Sidebar.tsx +0 -0
  657. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/Tooltip.tsx +0 -0
  658. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/Topbar.tsx +0 -0
  659. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Common/UserMenu.tsx +0 -0
  660. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Datasets/DatasetFromExisting.tsx +0 -0
  661. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Datasets/UploadDataset.tsx +0 -0
  662. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Environments/ViewEnvironment.tsx +0 -0
  663. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Figures/FigureFromExisting.tsx +0 -0
  664. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Figures/FigureView.tsx +0 -0
  665. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Figures/UploadFigure.tsx +0 -0
  666. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Files/EditFileInfo.tsx +0 -0
  667. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Files/FileContent.tsx +0 -0
  668. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Files/FileEditorModal.tsx +0 -0
  669. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Files/SelectedItemInfo.tsx +0 -0
  670. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Files/UploadFile.tsx +0 -0
  671. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Local/AddPath.tsx +0 -0
  672. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Local/DiscardChanges.tsx +0 -0
  673. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Local/IgnorePath.tsx +0 -0
  674. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Local/NewStage.tsx +0 -0
  675. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Local/SaveFiles.tsx +0 -0
  676. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Notebooks/NotebookView.tsx +0 -0
  677. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Orgs/AddMember.tsx +0 -0
  678. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Orgs/NewOrg.tsx +0 -0
  679. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Pipeline/StageEditorModal.tsx +0 -0
  680. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Presentations/PresentationView.tsx +0 -0
  681. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/AddCollaborator.tsx +0 -0
  682. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/CloneProject.tsx +0 -0
  683. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/CreateIssue.tsx +0 -0
  684. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/CreateQuestion.tsx +0 -0
  685. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/EditProject.tsx +0 -0
  686. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/HelpContent.tsx +0 -0
  687. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/InviteLinks.tsx +0 -0
  688. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/MakeProjectPublic.tsx +0 -0
  689. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/NewProject.tsx +0 -0
  690. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/ProjectShowcase.tsx +0 -0
  691. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Projects/ProjectStatus.tsx +0 -0
  692. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Publications/ImportOverleaf.tsx +0 -0
  693. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Publications/LatexEditor.tsx +0 -0
  694. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Publications/NewPublication.tsx +0 -0
  695. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Publications/PdfAnnotator.tsx +0 -0
  696. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Publications/PublicationView.tsx +0 -0
  697. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/DeleteReferenceItemDialog.tsx +0 -0
  698. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/DeleteReferencesCollectionDialog.tsx +0 -0
  699. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/EditReferenceItemModal.tsx +0 -0
  700. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/FileViewModal.tsx +0 -0
  701. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/ImportFromZoteroModal.tsx +0 -0
  702. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/LabelExistingReferences.tsx +0 -0
  703. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/NewReferencesCollection.tsx +0 -0
  704. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/ReferenceItemModal.tsx +0 -0
  705. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/References/ReferencesInfoPanel.tsx +0 -0
  706. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/ArtifactReleasesPanel.tsx +0 -0
  707. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/NewRelease.tsx +0 -0
  708. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/PathPicker.tsx +0 -0
  709. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/ReleasePdfAnnotator.tsx +0 -0
  710. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/ReleaseViewer.tsx +0 -0
  711. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/ReleasesTable.tsx +0 -0
  712. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/ShareDialog.tsx +0 -0
  713. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/Releases/releaseSort.ts +0 -0
  714. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/Appearance.tsx +0 -0
  715. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/ChangePassword.tsx +0 -0
  716. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/ConnectedAccounts.tsx +0 -0
  717. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/DeleteAccount.tsx +0 -0
  718. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/DeleteConfirmation.tsx +0 -0
  719. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/NewToken.tsx +0 -0
  720. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/PickSubscription.tsx +0 -0
  721. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/Subscription.tsx +0 -0
  722. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/UpdateOverleafToken.tsx +0 -0
  723. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/UserInformation.tsx +0 -0
  724. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/components/UserSettings/UserTokens.tsx +0 -0
  725. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/hooks/useAuth.ts +0 -0
  726. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/hooks/useCustomToast.ts +0 -0
  727. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/analytics.test.ts +0 -0
  728. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/analytics.ts +0 -0
  729. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/api.test.ts +0 -0
  730. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/api.ts +0 -0
  731. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/auth.test.ts +0 -0
  732. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/auth.ts +0 -0
  733. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/bibtex.test.ts +0 -0
  734. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/bibtex.ts +0 -0
  735. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/core.ts +0 -0
  736. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/errors.ts +0 -0
  737. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/github.test.ts +0 -0
  738. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/github.ts +0 -0
  739. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/google.ts +0 -0
  740. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/keyboard.ts +0 -0
  741. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/latexCompiler.ts +0 -0
  742. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/latexProject.mapPaths.test.ts +0 -0
  743. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/latexProject.test.ts +0 -0
  744. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/latexProject.ts +0 -0
  745. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/layout.ts +0 -0
  746. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/pipelineYaml.test.ts +0 -0
  747. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/pipelineYaml.ts +0 -0
  748. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/releases.ts +0 -0
  749. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/staleChunks.test.ts +0 -0
  750. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/staleChunks.ts +0 -0
  751. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/strings.test.ts +0 -0
  752. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/strings.ts +0 -0
  753. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/zenodo.ts +0 -0
  754. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/lib/zotero.ts +0 -0
  755. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/main.tsx +0 -0
  756. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/__root.tsx +0 -0
  757. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/app.tsx +0 -0
  758. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/apps/$appName.tsx +0 -0
  759. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/apps/index.tsx +0 -0
  760. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/apps.tsx +0 -0
  761. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/collaborators.tsx +0 -0
  762. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/datasets.tsx +0 -0
  763. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/environments.tsx +0 -0
  764. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/files.tsx +0 -0
  765. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/history.tsx +0 -0
  766. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/local.tsx +0 -0
  767. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/notebooks.tsx +0 -0
  768. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/pipeline.tsx +0 -0
  769. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/presentations.tsx +0 -0
  770. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/publications.tsx +0 -0
  771. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/references.tsx +0 -0
  772. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/releases.tsx +0 -0
  773. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout/software.tsx +0 -0
  774. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/_layout.tsx +0 -0
  775. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/$projectName/releases/$releaseName.tsx +0 -0
  776. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/$accountName/index.tsx +0 -0
  777. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/admin.tsx +0 -0
  778. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/datasets.tsx +0 -0
  779. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/index.tsx +0 -0
  780. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/learn.tsx +0 -0
  781. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/orgs.tsx +0 -0
  782. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/projects.tsx +0 -0
  783. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout/settings.tsx +0 -0
  784. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/_layout.tsx +0 -0
  785. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/auth/google.tsx +0 -0
  786. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/auth/zenodo.tsx +0 -0
  787. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/auth/zotero.tsx +0 -0
  788. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/checkout.tsx +0 -0
  789. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/join/$token.tsx +0 -0
  790. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/login/device.tsx +0 -0
  791. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/login/index.tsx +0 -0
  792. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/recover-password.tsx +0 -0
  793. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/reset-password.tsx +0 -0
  794. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/routes/signup.tsx +0 -0
  795. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/theme.tsx +0 -0
  796. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/src/vite-env.d.ts +0 -0
  797. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/auth.setup.ts +0 -0
  798. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/config.ts +0 -0
  799. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/figures-pagination.spec.ts +0 -0
  800. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/login.spec.ts +0 -0
  801. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/reset-password.spec.ts +0 -0
  802. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/user-settings.spec.ts +0 -0
  803. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/utils/mailcatcher.ts +0 -0
  804. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/utils/random.ts +0 -0
  805. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tests/utils/user.ts +0 -0
  806. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tsconfig.json +0 -0
  807. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/tsconfig.node.json +0 -0
  808. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/vite.config.ts +0 -0
  809. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/frontend/vitest.config.ts +0 -0
  810. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/scripts/build-push.sh +0 -0
  811. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/scripts/build.sh +0 -0
  812. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/scripts/deploy.sh +0 -0
  813. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/scripts/pem-to-env.sh +0 -0
  814. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/scripts/test-local.sh +0 -0
  815. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/scripts/test.sh +0 -0
  816. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/texmf-proxy/Dockerfile +0 -0
  817. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/texmf-proxy/README.md +0 -0
  818. {calkit_python-0.44.0 → calkit_python-0.45.0}/hub/texmf-proxy/proxy.py +0 -0
  819. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/.yarnrc.yml +0 -0
  820. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/babel.config.js +0 -0
  821. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/install.json +0 -0
  822. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/jest.config.js +0 -0
  823. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/jupyter-config/server-config/calkit.json +0 -0
  824. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/package.json +0 -0
  825. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/schema/plugin.json +0 -0
  826. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/__tests__/useQueries.spec.ts +0 -0
  827. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/calkit-config.ts +0 -0
  828. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/cell-output-marker.ts +0 -0
  829. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/commit-dialog.tsx +0 -0
  830. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/environment-editor.tsx +0 -0
  831. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/notebook-registration.tsx +0 -0
  832. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/pipeline-status-bar.tsx +0 -0
  833. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/project-info-editor.tsx +0 -0
  834. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/sidebar-settings.tsx +0 -0
  835. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/sidebar.tsx +0 -0
  836. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/components/stage-editor.tsx +0 -0
  837. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/feature-flags.ts +0 -0
  838. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/file-browser-menu.ts +0 -0
  839. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/hooks/__tests__/useQueries.test.tsx +0 -0
  840. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/hooks/useQueries.ts +0 -0
  841. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/icons.ts +0 -0
  842. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/index.ts +0 -0
  843. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/io-tracker.ts +0 -0
  844. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/pipeline-state.ts +0 -0
  845. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/queryClient.ts +0 -0
  846. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/request.ts +0 -0
  847. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/src/shims-mainmenu.d.ts +0 -0
  848. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/base.css +0 -0
  849. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/cell-output-marker.css +0 -0
  850. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/environment-editor.css +0 -0
  851. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/environment-selector.css +0 -0
  852. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/img/calkit-no-bg.png +0 -0
  853. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/index.css +0 -0
  854. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/index.js +0 -0
  855. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/notebook-toolbar.css +0 -0
  856. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/pipeline-status-bar.css +0 -0
  857. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/style/sidebar.css +0 -0
  858. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/tsconfig.json +0 -0
  859. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/tsconfig.test.json +0 -0
  860. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/ui-tests/.gitignore +0 -0
  861. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/ui-tests/README.md +0 -0
  862. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/ui-tests/jupyter_server_test_config.py +0 -0
  863. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/ui-tests/package.json +0 -0
  864. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/ui-tests/playwright.config.js +0 -0
  865. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/ui-tests/tests/calkit.spec.ts +0 -0
  866. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/ui-tests/yarn.lock +0 -0
  867. {calkit_python-0.44.0 → calkit_python-0.45.0}/jupyterlab-ext/yarn.lock +0 -0
  868. {calkit_python-0.44.0 → calkit_python-0.45.0}/pyproject.toml +0 -0
  869. {calkit_python-0.44.0 → calkit_python-0.45.0}/scripts/generate-docs-references.py +0 -0
  870. {calkit_python-0.44.0 → calkit_python-0.45.0}/scripts/install.ps1 +0 -0
  871. {calkit_python-0.44.0 → calkit_python-0.45.0}/scripts/install.sh +0 -0
  872. {calkit_python-0.44.0 → calkit_python-0.45.0}/scripts/list-changes.py +0 -0
  873. {calkit_python-0.44.0 → calkit_python-0.45.0}/scripts/make-calk9.sh +0 -0
  874. {calkit_python-0.44.0 → calkit_python-0.45.0}/scripts/sync-docs.py +0 -0
  875. {calkit_python-0.44.0 → calkit_python-0.45.0}/scripts/sync-resources.py +0 -0
  876. {calkit_python-0.44.0 → calkit_python-0.45.0}/test/dvc-md5-dir/osx-arm64.txt +0 -0
  877. {calkit_python-0.44.0 → calkit_python-0.45.0}/test/nb-julia.ipynb +0 -0
  878. {calkit_python-0.44.0 → calkit_python-0.45.0}/test/nb-params.ipynb +0 -0
  879. {calkit_python-0.44.0 → calkit_python-0.45.0}/test/nb-subdir.ipynb +0 -0
  880. {calkit_python-0.44.0 → calkit_python-0.45.0}/test/pipeline.ipynb +0 -0
  881. {calkit_python-0.44.0 → calkit_python-0.45.0}/test/script.py +0 -0
  882. {calkit_python-0.44.0 → calkit_python-0.45.0}/test/test-log.log +0 -0
  883. {calkit_python-0.44.0 → calkit_python-0.45.0}/uv.lock +0 -0
  884. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/.gitignore +0 -0
  885. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/.vscodeignore +0 -0
  886. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/LICENSE +0 -0
  887. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/README.md +0 -0
  888. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/changelog-notes.md +0 -0
  889. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/images/calkit-icon.svg +0 -0
  890. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/images/calkit-no-bg.png +0 -0
  891. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/package-lock.json +0 -0
  892. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/scripts/gen-changelog.js +0 -0
  893. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/scripts/set-proposed-api.js +0 -0
  894. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/environments.ts +0 -0
  895. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/figures/core.ts +0 -0
  896. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/figures/view.ts +0 -0
  897. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/notebooks.ts +0 -0
  898. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/pipeline/core.ts +0 -0
  899. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/test/environments.test.ts +0 -0
  900. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/test/figures.test.ts +0 -0
  901. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/test/kernel-selection.test.ts +0 -0
  902. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/test/notebooks.test.ts +0 -0
  903. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/test/pipeline.test.ts +0 -0
  904. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/src/types.ts +0 -0
  905. {calkit_python-0.44.0 → calkit_python-0.45.0}/vscode-ext/tsconfig.json +0 -0
@@ -4,3 +4,6 @@
4
4
  [submodule "examples/ssh"]
5
5
  path = examples/ssh
6
6
  url = git@github.com:calkit/example-ssh.git
7
+ [submodule "examples/julia"]
8
+ path = examples/julia
9
+ url = https://github.com/calkit/example-julia.git
@@ -3,6 +3,9 @@
3
3
  # between packages. The hub frontend is formatted by its own pinned Biome
4
4
  # to match hub/frontend/biome.json exactly.
5
5
  repos:
6
+ # renv generates renv/activate.R and rewrites it whenever it activates,
7
+ # trailing whitespace and all. Trimming it here would only make the
8
+ # committed copy differ from what renv writes, so it is left alone.
6
9
  - repo: https://github.com/pre-commit/pre-commit-hooks
7
10
  rev: "v4.4.0"
8
11
  hooks:
@@ -11,10 +14,13 @@ repos:
11
14
  - id: check-merge-conflict
12
15
  exclude: ^docs/overleaf\.md$
13
16
  - id: check-toml
17
+ # The example projects' results files are stage outputs: a stage
18
+ # writes them, and a formatted copy is a changed output that makes
19
+ # the stage stale, so they are left exactly as written.
14
20
  - id: end-of-file-fixer
15
- exclude: ^hub/frontend/src/client/
21
+ exclude: ^hub/frontend/src/client/|(^|/)renv/activate\.R$|^examples/.*/results/
16
22
  - id: trailing-whitespace
17
- exclude: ^hub/frontend/src/client/
23
+ exclude: ^hub/frontend/src/client/|(^|/)renv/activate\.R$|^examples/.*/results/
18
24
  - id: check-yaml
19
25
  args: ["--unsafe"]
20
26
  - id: check-json
@@ -40,7 +46,14 @@ repos:
40
46
  rev: "v3.0.3"
41
47
  hooks:
42
48
  - id: prettier
43
- exclude: calkit|^hub/
49
+ # dvc.yaml and dvc.lock are generated---by calkit and DVC
50
+ # respectively---and are rewritten wholesale whenever the pipeline
51
+ # changes. Prettier and ruamel disagree about where a long 'desc:'
52
+ # value goes, so formatting them here just means the two take turns
53
+ # reformatting the same file.
54
+ # Likewise the example projects' results files, which are stage
55
+ # outputs and have to match what the stage wrote byte for byte.
56
+ exclude: calkit|^hub/|(^|/)dvc\.(yaml|lock)$|^examples/.*/results/
44
57
 
45
58
  - repo: local
46
59
  hooks:
@@ -27,6 +27,15 @@ This guide will help you get started.
27
27
  - [Miniforge](https://conda-forge.org/download/)
28
28
  - [uv](https://docs.astral.sh/uv/getting-started/installation/)
29
29
  - [Pixi](https://pixi.sh/latest/)
30
+ 1. **Create the virtual environment:**
31
+ ```bash
32
+ uv sync --all-packages
33
+ ```
34
+ This repo is a uv workspace: the hub backend is a member, and both it
35
+ and the `calkit` package share a single `.venv` at the repo root.
36
+ Always pass `--all-packages`, since a bare `uv sync` installs only one
37
+ member and uninstalls the other's dependencies, leaving either the
38
+ `calkit` CLI or the hub backend unable to import its dependencies.
30
39
  1. **Run tests** to ensure everything is working:
31
40
  ```bash
32
41
  uv run pytest
@@ -6,7 +6,10 @@ help: ## Show this help.
6
6
  .PHONY: install
7
7
  install: ## Create the project's virtual environment.
8
8
  @echo "🚀 Creating virtual environment"
9
- @uv sync
9
+ # --all-packages, since a bare `uv sync` would install only this
10
+ # package and uninstall the hub backend's dependencies from the
11
+ # workspace's single shared .venv
12
+ @uv sync --all-packages
10
13
 
11
14
  .PHONY: dev
12
15
  dev: ## Start up the hub containers for development.
@@ -57,8 +60,8 @@ sync-docs: schema ## Sync documentation content from docs/*.md into README.md.
57
60
  @echo "🚀 Syncing documentation"
58
61
  @uv run python scripts/sync-docs.py
59
62
 
60
- .PHONY: changes
61
- changes: ## List each product's commits since its last release.
63
+ .PHONY: unreleased
64
+ unreleased: ## List each product's commits since its last release.
62
65
  @uv run python scripts/list-changes.py
63
66
 
64
67
  .PHONY: sync-resources
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: calkit-python
3
- Version: 0.44.0
3
+ Version: 0.45.0
4
4
  Summary: Reproducibility simplified.
5
5
  Project-URL: Homepage, https://calkit.org
6
6
  Project-URL: Issues, https://github.com/calkit/calkit/issues
@@ -197,7 +197,19 @@ def _check_julia_env(
197
197
  cmd += [
198
198
  f"--project={env_dir}",
199
199
  "-e",
200
- "using Pkg; Pkg.instantiate();",
200
+ # Resolve only when the manifest no longer matches the project
201
+ # (e.g. a dependency was added, or the manifest was written by a
202
+ # different Julia version): plain instantiate would install it
203
+ # as-is and fail later at precompile. A current manifest is
204
+ # installed exactly as locked, with no registry involved---
205
+ # resolving one unconditionally can fail spuriously (and would
206
+ # rewrite the lock). Older Julias without the check keep the
207
+ # plain instantiate they always had.
208
+ "using Pkg; "
209
+ "if hasmethod(Pkg.is_manifest_current, Tuple{String}) && "
210
+ "Pkg.is_manifest_current(dirname(Base.active_project())) == false; "
211
+ "Pkg.resolve(); end; "
212
+ "Pkg.instantiate();",
201
213
  ]
202
214
  if julia_version:
203
215
  try:
@@ -125,6 +125,17 @@ def main(
125
125
  bool,
126
126
  typer.Option("--version", help="Show version and exit."),
127
127
  ] = False,
128
+ directory: Annotated[
129
+ Optional[str],
130
+ typer.Option(
131
+ "-C",
132
+ "--directory",
133
+ help=(
134
+ "Change to this directory before doing anything else, so a "
135
+ "project can be worked with from outside it."
136
+ ),
137
+ ),
138
+ ] = None,
128
139
  use_version: Annotated[
129
140
  Optional[str],
130
141
  typer.Option(
@@ -139,6 +150,13 @@ def main(
139
150
  if version:
140
151
  typer.echo(f"Calkit {calkit.__version__}")
141
152
  raise typer.Exit()
153
+ # Change directory first, so everything below---the project's .env, the
154
+ # config it reads, and whatever command runs next---sees the project
155
+ # rather than wherever the user happened to be standing.
156
+ if directory is not None:
157
+ if not os.path.isdir(directory):
158
+ raise_error(f"Directory does not exist: {directory}")
159
+ os.chdir(directory)
142
160
  if use_version:
143
161
  _exec_with_version(use_version)
144
162
  # Load the project's .env here rather than in the handful of commands
@@ -214,6 +232,21 @@ def _exec_with_version(version_spec: str) -> None:
214
232
  os.execvp(cmd[0], cmd)
215
233
 
216
234
 
235
+ def project_is_initialized() -> bool:
236
+ """Determine whether the working directory is a Calkit project."""
237
+ import git
238
+ from git.exc import InvalidGitRepositoryError
239
+
240
+ # Parent directories count, since a project can be a self-contained
241
+ # directory inside a larger repo and so has no .git of its own. What
242
+ # makes it initialized is its own DVC repo and calkit.yaml.
243
+ try:
244
+ git.Repo(".", search_parent_directories=True)
245
+ except InvalidGitRepositoryError:
246
+ return False
247
+ return os.path.isfile(".dvc/config") and os.path.isfile("calkit.yaml")
248
+
249
+
217
250
  @app.command(name="init")
218
251
  def init(
219
252
  force: Annotated[
@@ -224,43 +257,54 @@ def init(
224
257
  help="Re-initialize even if the project is already initialized.",
225
258
  ),
226
259
  ] = False,
260
+ no_commit: Annotated[
261
+ bool,
262
+ typer.Option(
263
+ "--no-commit",
264
+ help="Stage the initial files rather than committing them.",
265
+ ),
266
+ ] = False,
227
267
  ):
228
268
  """Initialize the current working directory."""
229
- import git
230
269
  from git.exc import InvalidGitRepositoryError
231
270
 
232
- def _project_is_initialized() -> bool:
233
- try:
234
- git.Repo(".", search_parent_directories=False)
235
- except InvalidGitRepositoryError:
236
- return False
237
- return os.path.isfile(".dvc/config") and os.path.isfile("calkit.yaml")
238
-
239
- if _project_is_initialized() and not force:
271
+ if project_is_initialized() and not force:
240
272
  raise_error(
241
273
  "This project is already initialized. "
242
274
  "Use --force to re-initialize."
243
275
  )
244
- subprocess.run(["git", "init"])
245
- result = calkit.dvc.run_dvc_command(
246
- ["init"] + (["--force"] if force else [])
247
- )
276
+ # Only create a Git repo if we're not already inside one; a project
277
+ # can be a self-contained directory within a larger repo, and nesting
278
+ # a second repo there hides its contents from the outer one.
279
+ try:
280
+ calkit.git.get_repo()
281
+ # A directory the enclosing repo ignores is not part of it, so it
282
+ # gets its own repo rather than being treated as a subdirectory of
283
+ # one that will never track it.
284
+ needs_own_repo = calkit.dvc.enclosing_repo_ignores()
285
+ except InvalidGitRepositoryError:
286
+ needs_own_repo = True
287
+ if needs_own_repo:
288
+ subprocess.run(["git", "init"])
289
+ result = calkit.dvc.init(force=force)
248
290
  if result != 0:
249
291
  raise_error("Failed to initialize DVC")
250
292
  # Ensure autostage is enabled for DVC
251
293
  result = calkit.dvc.run_dvc_command(["config", "core.autostage", "true"])
252
294
  if result != 0:
253
295
  raise_error("Failed to configure DVC autostage")
254
- # Commit the newly created .dvc directory
296
+ # Commit the newly created .dvc directory. Paths are made absolute
297
+ # because Git resolves them against the repo root, which is not this
298
+ # directory when the project is a subdirectory of a larger repo.
255
299
  repo = calkit.git.get_repo()
256
- repo.git.add(".dvc")
257
- if calkit.git.get_staged_files(repo=repo):
300
+ repo.git.add(os.path.abspath(".dvc"))
301
+ if not no_commit and calkit.git.get_staged_files(repo=repo):
258
302
  repo.git.commit("-m", "Initialize DVC")
259
303
  # Create an empty calkit.yaml if one doesn't already exist
260
304
  if not os.path.isfile("calkit.yaml"):
261
305
  calkit.schema.ensure_modeline("calkit.yaml")
262
- repo.git.add("calkit.yaml")
263
- if calkit.git.get_staged_files(repo=repo):
306
+ repo.git.add(os.path.abspath("calkit.yaml"))
307
+ if not no_commit and calkit.git.get_staged_files(repo=repo):
264
308
  repo.git.commit("-m", "Initialize Calkit")
265
309
  # TODO: Initialize `dvc.yaml`
266
310
  # TODO: Add a sane .gitignore file
@@ -485,7 +529,7 @@ def get_status(
485
529
  if not os.path.isfile(os.path.join(".dvc", "config")):
486
530
  typer.echo("Initializing DVC repository")
487
531
  try:
488
- result = calkit.dvc.run_dvc_command(["init", "-q"])
532
+ result = calkit.dvc.init(quiet=True)
489
533
  if result != 0:
490
534
  raise subprocess.CalledProcessError(result, "dvc init")
491
535
  except subprocess.CalledProcessError as e:
@@ -691,7 +735,17 @@ def get_status(
691
735
  if stale_stage.modified_inputs:
692
736
  typer.echo(" modified inputs:")
693
737
  for input_path in stale_stage.modified_inputs:
694
- typer.echo(f" {input_path}")
738
+ ignored = stale_stage.ignored_files_in_inputs.get(
739
+ input_path
740
+ )
741
+ if ignored:
742
+ warn(
743
+ f" {input_path} (contains "
744
+ f"Git-ignored files: {', '.join(ignored)})",
745
+ prefix="",
746
+ )
747
+ else:
748
+ typer.echo(f" {input_path}")
695
749
  if pipeline_status.always_run_stage_names:
696
750
  typer.echo("Always-run stages:")
697
751
  for stage_name in pipeline_status.always_run_stage_names:
@@ -702,6 +756,22 @@ def get_status(
702
756
  typer.echo("Always-run stages:")
703
757
  for stage_name in pipeline_status.always_run_stage_names:
704
758
  typer.echo(f" {typer.style(stage_name, fg='cyan')}")
759
+ # Ignored files aren't carried to other machines by Git, so the stage
760
+ # hashes its input differently there and looks stale, e.g., in CI
761
+ if pipeline_status and pipeline_status.ignored_files_in_inputs:
762
+ warn(
763
+ "Stage inputs contain Git-ignored files, which can make "
764
+ "stages stale on other machines, e.g., in CI:"
765
+ )
766
+ for (
767
+ stage_name,
768
+ inputs,
769
+ ) in pipeline_status.ignored_files_in_inputs.items():
770
+ warn(f" {stage_name}:", prefix="")
771
+ for input_path, files in inputs.items():
772
+ warn(f" {input_path}:", prefix="")
773
+ for path in files:
774
+ warn(f" {path}", prefix="")
705
775
 
706
776
 
707
777
  @app.command(name="diff")
@@ -814,9 +884,26 @@ def add(
814
884
  typer.echo(
815
885
  "This is not a DVC repository; would initialize DVC here"
816
886
  )
887
+ elif (
888
+ calkit.dvc.dvc_init_needs_subdir()
889
+ and not os.path.isfile("calkit.yaml")
890
+ and not os.path.isfile("dvc.yaml")
891
+ ):
892
+ # Bootstrapping a project from nothing is fine, and is what
893
+ # this does at the root of a new repo. What isn't fine is doing
894
+ # it in some subdirectory of an existing repo, which would put
895
+ # a .dvc directory wherever the user happened to be standing.
896
+ raise_error(
897
+ f"No calkit.yaml or dvc.yaml in {os.getcwd()}, which is a "
898
+ "subdirectory of an existing Git repository, so this is "
899
+ "not a project. Run 'calkit init' first, or change to the "
900
+ "project directory."
901
+ )
817
902
  else:
818
903
  warn("DVC not initialized yet; initializing")
819
- dvc_repo = dvc.repo.Repo.init()
904
+ dvc_repo = dvc.repo.Repo.init(
905
+ subdir=calkit.dvc.dvc_init_needs_subdir()
906
+ )
820
907
  if not dry_run:
821
908
  # Ensure autostage is enabled for DVC
822
909
  calkit.dvc.run_dvc_command(
@@ -1427,6 +1514,136 @@ STAGE_OUTPUT_START = "--- calkit stage output ---"
1427
1514
  STAGE_OUTPUT_END = "--- end calkit stage output ---"
1428
1515
 
1429
1516
 
1517
+ def _inject_markdown_stage_output(log_content: str) -> list[str]:
1518
+ """Write each stage's output into its Markdown file's output blocks.
1519
+
1520
+ This is post-processing rather than a stage output: two stages in one
1521
+ file would both claim the Markdown, and DVC forbids two stages
1522
+ producing the same path. Output blocks are never read back when
1523
+ extracting scripts, so writing one can't make its stage stale.
1524
+
1525
+ Returns the names of the DVC stages whose cached output changed. Each
1526
+ of those depends on its cache, which was hashed before the stage ran,
1527
+ so the caller has to record the new hash or the stage reads as stale.
1528
+ """
1529
+ import calkit.markdown
1530
+
1531
+ stdout_by_stage = _stage_stdout_from_log_content(log_content)
1532
+ if not stdout_by_stage:
1533
+ return []
1534
+ ck_info = calkit.load_calkit_info()
1535
+ md_stages = calkit.markdown.get_markdown_stages(ck_info)
1536
+ if not md_stages:
1537
+ return []
1538
+ sep = calkit.markdown.STAGE_NAME_SEPARATOR
1539
+ # Group by Markdown stage so each file is read and written once
1540
+ by_stage: dict[str, dict[str, str]] = {}
1541
+ for dvc_stage_name, output in stdout_by_stage.items():
1542
+ if sep not in dvc_stage_name:
1543
+ continue
1544
+ md_stage_name, block_name = dvc_stage_name.rsplit(sep, 1)
1545
+ if md_stage_name not in md_stages:
1546
+ continue
1547
+ by_stage.setdefault(md_stage_name, {})[block_name] = output
1548
+ changed_stages = []
1549
+ for md_stage_name, outputs in by_stage.items():
1550
+ md_path = md_stages[md_stage_name]
1551
+ if not os.path.isfile(md_path):
1552
+ continue
1553
+ with open(md_path, encoding="utf-8") as f:
1554
+ text = f.read()
1555
+ new_text, changed = calkit.markdown.set_output_blocks(text, outputs)
1556
+ if changed:
1557
+ with open(md_path, "w", encoding="utf-8", newline="\n") as f:
1558
+ f.write(new_text)
1559
+ # Keep each block's cache in step with the block itself. Read back
1560
+ # from the written text rather than from what was injected, so the
1561
+ # cache can only ever hold exactly what the file says.
1562
+ cached = calkit.markdown.extract_outputs(
1563
+ calkit.markdown.parse_markdown(new_text, path=md_path),
1564
+ md_path,
1565
+ )
1566
+ before = {}
1567
+ for block_name in cached:
1568
+ cache_path = calkit.markdown.get_output_cache_path(
1569
+ md_path, block_name
1570
+ )
1571
+ if os.path.isfile(cache_path):
1572
+ with open(cache_path, encoding="utf-8") as f:
1573
+ before[block_name] = f.read()
1574
+ cache_paths = calkit.markdown.write_output_caches(cached, md_path)
1575
+ for block_name, cache_path in cache_paths.items():
1576
+ with open(cache_path, encoding="utf-8") as f:
1577
+ if f.read() != before.get(block_name):
1578
+ changed_stages.append(md_stage_name + sep + block_name)
1579
+ return changed_stages
1580
+
1581
+
1582
+ def _inject_markdown_values() -> list[str]:
1583
+ """Bring each Markdown file's value markers into line with its results.
1584
+
1585
+ Done after every run rather than only for stages that ran: the
1586
+ results files are tracked outputs, so whatever they hold is what the
1587
+ prose should say. Returns the paths of the files that changed.
1588
+ """
1589
+ import calkit.markdown
1590
+
1591
+ ck_info = calkit.load_calkit_info()
1592
+ changed_paths = []
1593
+ for md_path in set(calkit.markdown.get_markdown_stages(ck_info).values()):
1594
+ if not os.path.isfile(md_path):
1595
+ continue
1596
+ with open(md_path, encoding="utf-8") as f:
1597
+ text = f.read()
1598
+ new_text, changed = calkit.markdown.set_values(text, md_path)
1599
+ if changed:
1600
+ with open(md_path, "w", encoding="utf-8", newline="\n") as f:
1601
+ f.write(new_text)
1602
+ changed_paths.append(md_path)
1603
+ return changed_paths
1604
+
1605
+
1606
+ def _stage_stdout_from_log_content(log_content: str) -> dict[str, str]:
1607
+ """Collect each stage's captured standard output from a run log.
1608
+
1609
+ The run log already brackets stage output with the markers above, so
1610
+ this reads what a stage printed without capturing it a second time.
1611
+ Stages that ran but printed nothing map to an empty string, which is
1612
+ what lets a stale output block be emptied rather than left wrong.
1613
+ """
1614
+ res: dict[str, list[str]] = {}
1615
+ current_stage_name: str | None = None
1616
+ in_stage_output = False
1617
+ for line in log_content.splitlines():
1618
+ if line == STAGE_OUTPUT_START:
1619
+ in_stage_output = True
1620
+ continue
1621
+ if line.endswith(STAGE_OUTPUT_END):
1622
+ # The marker shares its line with output that lacked a final
1623
+ # newline, so keep whatever came before it
1624
+ remainder = line.removesuffix(STAGE_OUTPUT_END)
1625
+ if remainder and current_stage_name is not None:
1626
+ res.setdefault(current_stage_name, []).append(remainder)
1627
+ in_stage_output = False
1628
+ continue
1629
+ if in_stage_output:
1630
+ if current_stage_name is not None:
1631
+ res.setdefault(current_stage_name, []).append(line)
1632
+ continue
1633
+ ls = line.split(" -", maxsplit=2)
1634
+ if len(ls) < 3:
1635
+ continue
1636
+ message = ls[2].strip()
1637
+ if message.startswith("Running stage "):
1638
+ current_stage_name = (
1639
+ message.removeprefix("Running stage ").rstrip(":").strip("'")
1640
+ )
1641
+ # Recorded now so a stage that printed nothing is still known
1642
+ # to have run
1643
+ res.setdefault(current_stage_name, [])
1644
+ return {name: "\n".join(lines) for name, lines in res.items()}
1645
+
1646
+
1430
1647
  def _stage_run_info_from_log_content(
1431
1648
  log_content: str, run_finished: bool = False
1432
1649
  ) -> dict:
@@ -2025,6 +2242,17 @@ def run(
2025
2242
  if mock_scheduler:
2026
2243
  os.environ[calkit.cli.scheduler.MOCK_ENV_VAR] = "1"
2027
2244
  dotenv.load_dotenv(dotenv_path=".env", verbose=verbose)
2245
+ # Refuse to run anywhere that isn't a project. Everything below
2246
+ # initializes Git and DVC as needed, so without this check a mistyped
2247
+ # path or a wrong working directory would silently scatter a .dvc
2248
+ # directory into an unrelated folder.
2249
+ if not os.path.isfile("calkit.yaml") and not os.path.isfile("dvc.yaml"):
2250
+ os.environ.pop("CALKIT_PIPELINE_RUNNING", None)
2251
+ raise_error(
2252
+ f"No calkit.yaml or dvc.yaml in {os.getcwd()}, so there is no "
2253
+ "pipeline to run here. Run 'calkit init' to make this a "
2254
+ "project, or change to the project directory."
2255
+ )
2028
2256
  ck_info = calkit.load_calkit_info()
2029
2257
  # Ensure Git is initialized so DVC can be used.
2030
2258
  # Use search_parent_directories so running from a subproject folder
@@ -2069,6 +2297,14 @@ def run(
2069
2297
  except Exception as e:
2070
2298
  os.environ.pop("CALKIT_PIPELINE_RUNNING", None)
2071
2299
  raise_error(str(e))
2300
+ # Extract anything the project's Markdown files declare before the
2301
+ # environments are checked, since an environment declared there must be
2302
+ # in calkit.yaml before it can be created or entered.
2303
+ try:
2304
+ calkit.pipeline.sync_markdown(ck_info=ck_info)
2305
+ except Exception as e:
2306
+ os.environ.pop("CALKIT_PIPELINE_RUNNING", None)
2307
+ raise_error(f"Failed to read markdown stages: {e}")
2072
2308
  # Check all environments in the pipeline (with caching)
2073
2309
  # If any failed, warn the user that we might have problems running
2074
2310
  calkit.echo("📦 Checking environments")
@@ -2163,7 +2399,7 @@ def run(
2163
2399
  except Exception:
2164
2400
  if not quiet:
2165
2401
  typer.echo("Initializing DVC repo")
2166
- result = calkit.dvc.run_dvc_command(["init"])
2402
+ result = calkit.dvc.init()
2167
2403
  if result != 0:
2168
2404
  raise_error("Failed to initialize DVC repo")
2169
2405
  # Convert deps into target stage names
@@ -2443,6 +2679,29 @@ def run(
2443
2679
  )
2444
2680
  else:
2445
2681
  failed = failed or res != 0
2682
+ # Write what each stage printed back into any 'calkit output' blocks
2683
+ # in the Markdown that declared it
2684
+ try:
2685
+ md_changed_stages = _inject_markdown_stage_output(log_content)
2686
+ except Exception as e:
2687
+ warn(f"Failed to write stage output into markdown: {e}")
2688
+ md_changed_stages = []
2689
+ if md_changed_stages:
2690
+ # A stage depends on its output cache, which DVC hashed before the
2691
+ # stage ran. Now that the cache holds what the stage just printed,
2692
+ # record it in the lock, or the stage would read as stale and run
2693
+ # again just to arrive at the same place.
2694
+ res_commit = calkit.dvc.run_dvc_command(
2695
+ ["commit", "--force", "--quiet"] + md_changed_stages
2696
+ )
2697
+ if res_commit != 0:
2698
+ warn("Failed to record markdown output in dvc.lock")
2699
+ # ...and bring any values the Markdown shows into line with the
2700
+ # results files the stages produced
2701
+ try:
2702
+ _inject_markdown_values()
2703
+ except Exception as e:
2704
+ warn(f"Failed to write values into markdown: {e}")
2446
2705
  # Zip dvc-zip outputs for stages that actually ran
2447
2706
  if stage_run_info:
2448
2707
  from calkit.models.io import PathOutput