datacharter 0.3.3__tar.gz → 0.3.4__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 (241) hide show
  1. {datacharter-0.3.3 → datacharter-0.3.4}/.github/workflows/test.yml +2 -0
  2. {datacharter-0.3.3 → datacharter-0.3.4}/CHANGELOG.md +9 -0
  3. {datacharter-0.3.3 → datacharter-0.3.4}/PKG-INFO +1 -1
  4. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/__init__.py +1 -1
  5. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/cli.py +3 -31
  6. datacharter-0.3.4/src/datacharter/demo.py +43 -0
  7. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/app.py +23 -2
  8. datacharter-0.3.4/src/datacharter/server/static/assets/index-B_FrSWR_.js +298 -0
  9. datacharter-0.3.3/src/datacharter/server/static/assets/index-CX4OWOHb.css → datacharter-0.3.4/src/datacharter/server/static/assets/index-DaS_YQZd.css +1 -1
  10. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/index.html +2 -2
  11. {datacharter-0.3.3 → datacharter-0.3.4}/tests/server/test_cold_start.py +17 -0
  12. {datacharter-0.3.3 → datacharter-0.3.4}/ui/package-lock.json +1202 -37
  13. {datacharter-0.3.3 → datacharter-0.3.4}/ui/package.json +9 -2
  14. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/App.tsx +42 -31
  15. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/api.ts +2 -0
  16. datacharter-0.3.4/ui/src/components/EmptyState.test.tsx +31 -0
  17. datacharter-0.3.4/ui/src/components/EmptyState.tsx +53 -0
  18. datacharter-0.3.4/ui/src/onboarding.test.ts +20 -0
  19. datacharter-0.3.4/ui/src/onboarding.ts +21 -0
  20. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/styles.css +14 -0
  21. datacharter-0.3.4/ui/src/test/setup.ts +1 -0
  22. {datacharter-0.3.3 → datacharter-0.3.4}/ui/vite.config.ts +6 -1
  23. datacharter-0.3.3/src/datacharter/server/static/assets/index-CHFhM_Tn.js +0 -298
  24. {datacharter-0.3.3 → datacharter-0.3.4}/.github/workflows/banned-terms.yml +0 -0
  25. {datacharter-0.3.3 → datacharter-0.3.4}/.github/workflows/release.yml +0 -0
  26. {datacharter-0.3.3 → datacharter-0.3.4}/.gitignore +0 -0
  27. {datacharter-0.3.3 → datacharter-0.3.4}/CODE_OF_CONDUCT.md +0 -0
  28. {datacharter-0.3.3 → datacharter-0.3.4}/CONTRIBUTING.md +0 -0
  29. {datacharter-0.3.3 → datacharter-0.3.4}/LICENSE +0 -0
  30. {datacharter-0.3.3 → datacharter-0.3.4}/README.md +0 -0
  31. {datacharter-0.3.3 → datacharter-0.3.4}/SECURITY.md +0 -0
  32. {datacharter-0.3.3 → datacharter-0.3.4}/THIRD-PARTY-NOTICES.md +0 -0
  33. {datacharter-0.3.3 → datacharter-0.3.4}/TRADEMARKS.md +0 -0
  34. {datacharter-0.3.3 → datacharter-0.3.4}/brand/README.md +0 -0
  35. {datacharter-0.3.3 → datacharter-0.3.4}/brand/demo.gif +0 -0
  36. {datacharter-0.3.3 → datacharter-0.3.4}/brand/hero.png +0 -0
  37. {datacharter-0.3.3 → datacharter-0.3.4}/brand/mark.svg +0 -0
  38. {datacharter-0.3.3 → datacharter-0.3.4}/brand/screenshot-m4-agent.png +0 -0
  39. {datacharter-0.3.3 → datacharter-0.3.4}/brand/screenshot-m5-complete.png +0 -0
  40. {datacharter-0.3.3 → datacharter-0.3.4}/brand/screenshot-m5-core.png +0 -0
  41. {datacharter-0.3.3 → datacharter-0.3.4}/brand/screenshot-m5-features.png +0 -0
  42. {datacharter-0.3.3 → datacharter-0.3.4}/compose.yaml +0 -0
  43. {datacharter-0.3.3 → datacharter-0.3.4}/docs/_config.yml +0 -0
  44. {datacharter-0.3.3 → datacharter-0.3.4}/docs/about.md +0 -0
  45. {datacharter-0.3.3 → datacharter-0.3.4}/docs/agent.md +0 -0
  46. {datacharter-0.3.3 → datacharter-0.3.4}/docs/assets/add-source.gif +0 -0
  47. {datacharter-0.3.3 → datacharter-0.3.4}/docs/assets/drag-drop.gif +0 -0
  48. {datacharter-0.3.3 → datacharter-0.3.4}/docs/assets/hero.png +0 -0
  49. {datacharter-0.3.3 → datacharter-0.3.4}/docs/assets/screenshot.png +0 -0
  50. {datacharter-0.3.3 → datacharter-0.3.4}/docs/assets/snapshot.gif +0 -0
  51. {datacharter-0.3.3 → datacharter-0.3.4}/docs/charter-yaml.md +0 -0
  52. {datacharter-0.3.3 → datacharter-0.3.4}/docs/cli.md +0 -0
  53. {datacharter-0.3.3 → datacharter-0.3.4}/docs/faq.md +0 -0
  54. {datacharter-0.3.3 → datacharter-0.3.4}/docs/index.html +0 -0
  55. {datacharter-0.3.3 → datacharter-0.3.4}/docs/mcp.md +0 -0
  56. {datacharter-0.3.3 → datacharter-0.3.4}/docs/quickstart.md +0 -0
  57. {datacharter-0.3.3 → datacharter-0.3.4}/docs/security.md +0 -0
  58. {datacharter-0.3.3 → datacharter-0.3.4}/docs/sources.md +0 -0
  59. {datacharter-0.3.3 → datacharter-0.3.4}/docs/workspace.md +0 -0
  60. {datacharter-0.3.3 → datacharter-0.3.4}/pyproject.toml +0 -0
  61. {datacharter-0.3.3 → datacharter-0.3.4}/scripts/build_ui.sh +0 -0
  62. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/agent/__init__.py +0 -0
  63. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/agent/cache.py +0 -0
  64. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/agent/llm.py +0 -0
  65. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/agent/loop.py +0 -0
  66. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/agent/tools.py +0 -0
  67. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/contracts/__init__.py +0 -0
  68. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/contracts/loader.py +0 -0
  69. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/contracts/metrics.py +0 -0
  70. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/contracts/pii.py +0 -0
  71. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/contracts/resolve.py +0 -0
  72. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/contracts/secrets.py +0 -0
  73. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/contracts/writer.py +0 -0
  74. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/__init__.py +0 -0
  75. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/aggregate.py +0 -0
  76. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/guard.py +0 -0
  77. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/provenance.py +0 -0
  78. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/pushdown.py +0 -0
  79. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/scrub.py +0 -0
  80. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/session.py +0 -0
  81. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/snowflake.py +0 -0
  82. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/sources.py +0 -0
  83. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/engine/statekey.py +0 -0
  84. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/mcp/__init__.py +0 -0
  85. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/mcp/server.py +0 -0
  86. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/models.py +0 -0
  87. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/__init__.py +0 -0
  88. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/llm_admin.py +0 -0
  89. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/security.py +0 -0
  90. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/source_admin.py +0 -0
  91. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/abap-DLDM7-KI.js +0 -0
  92. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/apex-DNDY2TF8.js +0 -0
  93. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/azcli-Y6nb8tq_.js +0 -0
  94. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/bat-BwHxbl9M.js +0 -0
  95. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/bicep-CFznDFnq.js +0 -0
  96. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/cameligo-Bf6VGUru.js +0 -0
  97. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/clojure-Dnu-v4kV.js +0 -0
  98. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/codicon-Brq4_Ui5.ttf +0 -0
  99. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/coffee-Bd8akH9Z.js +0 -0
  100. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/cpp-BbWJElDN.js +0 -0
  101. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/csharp-Co3qMtFm.js +0 -0
  102. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/csp-D-4FJmMZ.js +0 -0
  103. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/css-DdJfP1eB.js +0 -0
  104. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/css.worker-CqwWTjeG.js +0 -0
  105. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/cssMode-BuAVOLr4.js +0 -0
  106. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/cypher-cTPe9QuQ.js +0 -0
  107. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/dart-BOtBlQCF.js +0 -0
  108. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/dockerfile-BG73LgW2.js +0 -0
  109. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/ecl-BEgZUVRK.js +0 -0
  110. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/editor.worker-DCKwvLbM.js +0 -0
  111. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/elixir-BkW5O-1t.js +0 -0
  112. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/flow9-BeJ5waoc.js +0 -0
  113. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/freemarker2-DM0thzwF.js +0 -0
  114. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/fsharp-PahG7c26.js +0 -0
  115. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/go-acbASCJo.js +0 -0
  116. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/graphql-BxJiqAUM.js +0 -0
  117. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/handlebars-BkMf3Qj4.js +0 -0
  118. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/hcl-DtV1sZF8.js +0 -0
  119. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/html-KeNy2AFd.js +0 -0
  120. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/html.worker-DhJ4VZMp.js +0 -0
  121. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/htmlMode-CN5rSB9p.js +0 -0
  122. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/ini-Kd9XrMLS.js +0 -0
  123. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/java-CXBNlu9o.js +0 -0
  124. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/javascript-CZu1iw4q.js +0 -0
  125. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/json.worker-BF9eV5mS.js +0 -0
  126. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/jsonMode-BtMXpE2Q.js +0 -0
  127. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/julia-cl7-CwDS.js +0 -0
  128. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/kotlin-s7OhZKlX.js +0 -0
  129. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/less-9HpZscsL.js +0 -0
  130. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/lexon-OrD6JF1K.js +0 -0
  131. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/liquid-mhqehfbE.js +0 -0
  132. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/lspLanguageFeatures-D1NXFkgg.js +0 -0
  133. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/lua-Cyyb5UIc.js +0 -0
  134. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/m3-B8OfTtLu.js +0 -0
  135. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/markdown-BFxVWTOG.js +0 -0
  136. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/mdx-69yOd9f1.js +0 -0
  137. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/mips-CiqrrVzr.js +0 -0
  138. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/monaco-CB2SckMT.css +0 -0
  139. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/monaco-DNze5gXB.js +0 -0
  140. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/msdax-DmeGPVcC.js +0 -0
  141. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/mysql-C_tMU-Nz.js +0 -0
  142. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/objective-c-BDtDVThU.js +0 -0
  143. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/pascal-vHIfCaH5.js +0 -0
  144. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/pascaligo-DtZ0uQbO.js +0 -0
  145. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/perl-Ub6l9XKa.js +0 -0
  146. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/pgsql-BlNEE0v7.js +0 -0
  147. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/php-BBUBE1dy.js +0 -0
  148. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/pla-DSh2-awV.js +0 -0
  149. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/postiats-CocnycG-.js +0 -0
  150. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/powerquery-tScXyioY.js +0 -0
  151. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/powershell-COWaemsV.js +0 -0
  152. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/protobuf-Brw8urJB.js +0 -0
  153. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/pug-8SOpv6rk.js +0 -0
  154. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/python-C5qpjWC4.js +0 -0
  155. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/qsharp-Bw9ernYp.js +0 -0
  156. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/r-j7ic8hl3.js +0 -0
  157. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/razor-fg0l3XC9.js +0 -0
  158. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/redis-Bu5POkcn.js +0 -0
  159. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/redshift-Bs9aos_-.js +0 -0
  160. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/restructuredtext-CqXO7rUv.js +0 -0
  161. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/ruby-zBfavPgS.js +0 -0
  162. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/rust-BzKRNQWT.js +0 -0
  163. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/sb-BBc9UKZt.js +0 -0
  164. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/scala-D9hQfWCl.js +0 -0
  165. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/scheme-BPhDTwHR.js +0 -0
  166. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/scss-CBJaRo0y.js +0 -0
  167. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/shell-DiJ1NA_G.js +0 -0
  168. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/solidity-Db0IVjzk.js +0 -0
  169. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/sophia-CnS9iZB_.js +0 -0
  170. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/sparql-CJmd_6j2.js +0 -0
  171. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/sql-ClhHkBeG.js +0 -0
  172. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/st-CHwy0fLd.js +0 -0
  173. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/swift-Bqt4WxQ4.js +0 -0
  174. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/systemverilog-Bs9z6M-B.js +0 -0
  175. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/tcl-Dm6ycUr_.js +0 -0
  176. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/ts.worker-DTZAwq0V.js +0 -0
  177. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/tsMode-CaXNdXrQ.js +0 -0
  178. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/twig-Csy3S7wG.js +0 -0
  179. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/typescript-CCbVPqil.js +0 -0
  180. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/typespec-Btyra-wh.js +0 -0
  181. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/vb-Db0cS2oM.js +0 -0
  182. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/wgsl-BTesnYfV.js +0 -0
  183. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/workers-CwEVRSMl.js +0 -0
  184. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/xml-CIpcyvha.js +0 -0
  185. {datacharter-0.3.3 → datacharter-0.3.4}/src/datacharter/server/static/assets/yaml-CiikAWeE.js +0 -0
  186. {datacharter-0.3.3 → datacharter-0.3.4}/tests/agent/test_agent.py +0 -0
  187. {datacharter-0.3.3 → datacharter-0.3.4}/tests/agent/test_cache.py +0 -0
  188. {datacharter-0.3.3 → datacharter-0.3.4}/tests/agent/test_llm_wire.py +0 -0
  189. {datacharter-0.3.3 → datacharter-0.3.4}/tests/contracts/test_loader.py +0 -0
  190. {datacharter-0.3.3 → datacharter-0.3.4}/tests/contracts/test_metrics.py +0 -0
  191. {datacharter-0.3.3 → datacharter-0.3.4}/tests/contracts/test_pii.py +0 -0
  192. {datacharter-0.3.3 → datacharter-0.3.4}/tests/contracts/test_secrets_store.py +0 -0
  193. {datacharter-0.3.3 → datacharter-0.3.4}/tests/contracts/test_writer.py +0 -0
  194. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_aggregate.py +0 -0
  195. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_diff.py +0 -0
  196. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_federation.py +0 -0
  197. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_guard.py +0 -0
  198. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_provenance.py +0 -0
  199. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_pushdown.py +0 -0
  200. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_scrub.py +0 -0
  201. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_session.py +0 -0
  202. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_source_lifecycle.py +0 -0
  203. {datacharter-0.3.3 → datacharter-0.3.4}/tests/engine/test_sources.py +0 -0
  204. {datacharter-0.3.3 → datacharter-0.3.4}/tests/integration/seed/mysql.sql +0 -0
  205. {datacharter-0.3.3 → datacharter-0.3.4}/tests/integration/seed/postgres.sql +0 -0
  206. {datacharter-0.3.3 → datacharter-0.3.4}/tests/integration/test_live_sources.py +0 -0
  207. {datacharter-0.3.3 → datacharter-0.3.4}/tests/mcp/test_mcp_server.py +0 -0
  208. {datacharter-0.3.3 → datacharter-0.3.4}/tests/server/test_api.py +0 -0
  209. {datacharter-0.3.3 → datacharter-0.3.4}/tests/server/test_llm_admin.py +0 -0
  210. {datacharter-0.3.3 → datacharter-0.3.4}/tests/server/test_offline.py +0 -0
  211. {datacharter-0.3.3 → datacharter-0.3.4}/tests/server/test_security.py +0 -0
  212. {datacharter-0.3.3 → datacharter-0.3.4}/tests/server/test_source_admin.py +0 -0
  213. {datacharter-0.3.3 → datacharter-0.3.4}/tests/server/test_sources_api.py +0 -0
  214. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_agent_vidaimock_e2e.py +0 -0
  215. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_cli_init.py +0 -0
  216. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_drift.py +0 -0
  217. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_explain.py +0 -0
  218. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_packaging_e2e.py +0 -0
  219. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_sample.py +0 -0
  220. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_scaffold.py +0 -0
  221. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_secrets_cli.py +0 -0
  222. {datacharter-0.3.3 → datacharter-0.3.4}/tests/test_snapshot_recheck.py +0 -0
  223. {datacharter-0.3.3 → datacharter-0.3.4}/ui/index.html +0 -0
  224. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/ChartPanel.tsx +0 -0
  225. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/ChatPanel.tsx +0 -0
  226. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/HelpModal.tsx +0 -0
  227. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/LLMConfig.tsx +0 -0
  228. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/QueryFiles.tsx +0 -0
  229. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/ResultsGrid.tsx +0 -0
  230. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/SourceForm.tsx +0 -0
  231. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/SourceTree.tsx +0 -0
  232. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/SourcesView.tsx +0 -0
  233. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/components/Tutorial.tsx +0 -0
  234. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/lib/caption.ts +0 -0
  235. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/lib/chartSpec.ts +0 -0
  236. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/lib/columns.ts +0 -0
  237. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/lib/useResize.ts +0 -0
  238. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/main.tsx +0 -0
  239. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/monaco.ts +0 -0
  240. {datacharter-0.3.3 → datacharter-0.3.4}/ui/src/vite-env.d.ts +0 -0
  241. {datacharter-0.3.3 → datacharter-0.3.4}/ui/tsconfig.json +0 -0
@@ -71,6 +71,8 @@ jobs:
71
71
  run: cd ui && npm ci
72
72
  - name: Typecheck + build
73
73
  run: cd ui && npm run build
74
+ - name: Unit test UI
75
+ run: cd ui && npm test
74
76
 
75
77
  package:
76
78
  runs-on: ubuntu-latest
@@ -5,6 +5,15 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.3.4] - 2026-07-24
9
+
10
+ ### Added
11
+
12
+ - Empty workspaces get an "add your data" first-run launchpad (add a source / drop a
13
+ CSV / load the demo dataset) instead of the demo feature-tour, which now auto-shows
14
+ only when the workspace has sources. New `POST /api/demo` loads the demo `store` as a
15
+ normal, deletable source.
16
+
8
17
  ## [0.3.3] - 2026-07-24
9
18
 
10
19
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacharter
3
- Version: 0.3.3
3
+ Version: 0.3.4
4
4
  Summary: Charter your data — contract-governed local data exploration, powered by DuckDB
5
5
  Project-URL: Homepage, https://github.com/datacharter/datacharter
6
6
  Project-URL: Repository, https://github.com/datacharter/datacharter
@@ -1,3 +1,3 @@
1
1
  """DataCharter — contract-governed local data exploration."""
2
2
 
3
- __version__ = "0.3.3"
3
+ __version__ = "0.3.4"
@@ -7,6 +7,7 @@ import sys
7
7
  from pathlib import Path
8
8
 
9
9
  from datacharter import __version__
10
+ from datacharter.demo import write_demo_data
10
11
 
11
12
  CHARTER_TEMPLATE = """\
12
13
  # DataCharter workspace — https://github.com/datacharter/datacharter
@@ -72,7 +73,7 @@ def _cmd_init(args: argparse.Namespace) -> int:
72
73
  (ws / "queries").mkdir(exist_ok=True)
73
74
  _ensure_gitignore(ws)
74
75
  if args.demo:
75
- _write_demo_data(ws)
76
+ write_demo_data(ws)
76
77
  print(f"Workspace initialized in {ws}.")
77
78
  if args.demo:
78
79
  print("Demo data in demo/ — try: datacharter serve")
@@ -87,35 +88,6 @@ def _ensure_gitignore(ws: Path) -> None:
87
88
  gi.write_text(existing + joiner + GITIGNORE_BLOCK)
88
89
 
89
90
 
90
- def _write_demo_data(ws: Path) -> None:
91
- import sqlite3
92
-
93
- demo = ws / "demo"
94
- demo.mkdir(exist_ok=True)
95
- con = sqlite3.connect(str(demo / "store.db"))
96
- try:
97
- con.execute("CREATE TABLE customers (id INTEGER, email TEXT, tier TEXT)")
98
- con.executemany(
99
- "INSERT INTO customers VALUES (?, ?, ?)",
100
- [
101
- (1, "ada@example.com", "pro"),
102
- (2, "grace@example.com", "free"),
103
- (3, "edsger@example.com", "pro"),
104
- ],
105
- )
106
- con.execute("CREATE TABLE orders (customer_id INTEGER, total REAL, placed_on TEXT)")
107
- con.executemany(
108
- "INSERT INTO orders VALUES (?, ?, ?)",
109
- [
110
- ((i % 3) + 1, round((i * 37 % 200) + i * 0.5, 2), f"2026-01-{(i % 28) + 1:02d}")
111
- for i in range(90)
112
- ],
113
- )
114
- con.commit()
115
- finally:
116
- con.close()
117
-
118
-
119
91
  def _resolve_serve_workspace(directory: str) -> Path:
120
92
  """Workspace for serve; ephemeral demo when no charter.yaml (D3, no surprise writes)."""
121
93
  ws = Path(directory).resolve()
@@ -125,7 +97,7 @@ def _resolve_serve_workspace(directory: str) -> Path:
125
97
 
126
98
  demo_ws = Path(tempfile.mkdtemp(prefix="datacharter-demo-"))
127
99
  (demo_ws / "charter.yaml").write_text(DEMO_CHARTER)
128
- _write_demo_data(demo_ws)
100
+ write_demo_data(demo_ws)
129
101
  print(f"No charter.yaml in {ws} — serving an ephemeral demo workspace ({demo_ws}).")
130
102
  print("Run `datacharter init` here to start a real workspace.")
131
103
  return demo_ws
@@ -0,0 +1,43 @@
1
+ """The demo dataset: a small sqlite `store` (customers + orders) for onboarding."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sqlite3
6
+ from pathlib import Path
7
+
8
+ # Descriptor for registering the demo as a real, deletable source (see POST /api/demo).
9
+ DEMO_SOURCE = {
10
+ "name": "store",
11
+ "type": "sqlite",
12
+ "path": "demo/store.db",
13
+ "tables": ["customers", "orders"],
14
+ "pii": {"customers": ["email"]},
15
+ }
16
+
17
+
18
+ def write_demo_data(workspace: Path) -> None:
19
+ """Write the demo `store.db` (customers + orders) under `<workspace>/demo/`."""
20
+ demo = workspace / "demo"
21
+ demo.mkdir(exist_ok=True)
22
+ con = sqlite3.connect(str(demo / "store.db"))
23
+ try:
24
+ con.execute("CREATE TABLE customers (id INTEGER, email TEXT, tier TEXT)")
25
+ con.executemany(
26
+ "INSERT INTO customers VALUES (?, ?, ?)",
27
+ [
28
+ (1, "ada@example.com", "pro"),
29
+ (2, "grace@example.com", "free"),
30
+ (3, "edsger@example.com", "pro"),
31
+ ],
32
+ )
33
+ con.execute("CREATE TABLE orders (customer_id INTEGER, total REAL, placed_on TEXT)")
34
+ con.executemany(
35
+ "INSERT INTO orders VALUES (?, ?, ?)",
36
+ [
37
+ ((i % 3) + 1, round((i * 37 % 200) + i * 0.5, 2), f"2026-01-{(i % 28) + 1:02d}")
38
+ for i in range(90)
39
+ ],
40
+ )
41
+ con.commit()
42
+ finally:
43
+ con.close()
@@ -146,8 +146,7 @@ def create_app(
146
146
  app.state.charter = load_charter(workspace)
147
147
  app.state.toolbox = ToolBox(app.state.engine, app.state.charter.sources)
148
148
 
149
- @app.get("/api/sources")
150
- async def sources() -> dict:
149
+ def _sources_payload() -> dict:
151
150
  # Credentials intentionally omitted — this payload reaches the browser.
152
151
  return {
153
152
  "warnings": app.state.charter.warnings,
@@ -165,12 +164,34 @@ def create_app(
165
164
  ],
166
165
  }
167
166
 
167
+ @app.get("/api/sources")
168
+ async def sources() -> dict:
169
+ return _sources_payload()
170
+
168
171
  @app.post("/api/sources")
169
172
  async def add_source(form: source_admin.SourceForm) -> dict:
170
173
  await asyncio.to_thread(source_admin.create_source, app.state.engine, workspace, form)
171
174
  _refresh_charter()
172
175
  return {"name": form.name}
173
176
 
177
+ @app.post("/api/demo")
178
+ async def load_demo() -> dict:
179
+ """Populate the workspace with the demo `store` source (idempotent)."""
180
+ if not any(s.name == "store" for s in app.state.charter.sources):
181
+ from datacharter.demo import write_demo_data
182
+
183
+ write_demo_data(workspace)
184
+ form = source_admin.SourceForm(
185
+ name="store",
186
+ type="sqlite",
187
+ path="demo/store.db",
188
+ tables=["customers", "orders"],
189
+ pii={"customers": ["email"]},
190
+ )
191
+ await asyncio.to_thread(source_admin.create_source, app.state.engine, workspace, form)
192
+ _refresh_charter()
193
+ return _sources_payload()
194
+
174
195
  @app.put("/api/sources/{name}")
175
196
  async def edit_source(name: str, form: source_admin.SourceForm):
176
197
  if name != form.name: