datacharter 0.2.0__tar.gz → 0.3.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 (245) hide show
  1. {datacharter-0.2.0 → datacharter-0.3.0}/.github/workflows/banned-terms.yml +1 -1
  2. {datacharter-0.2.0 → datacharter-0.3.0}/.github/workflows/release.yml +5 -5
  3. {datacharter-0.2.0 → datacharter-0.3.0}/.github/workflows/test.yml +22 -9
  4. {datacharter-0.2.0 → datacharter-0.3.0}/CHANGELOG.md +69 -0
  5. datacharter-0.3.0/CODE_OF_CONDUCT.md +72 -0
  6. datacharter-0.3.0/CONTRIBUTING.md +124 -0
  7. {datacharter-0.2.0 → datacharter-0.3.0}/PKG-INFO +34 -3
  8. {datacharter-0.2.0 → datacharter-0.3.0}/README.md +33 -2
  9. datacharter-0.3.0/SECURITY.md +38 -0
  10. datacharter-0.3.0/THIRD-PARTY-NOTICES.md +56 -0
  11. datacharter-0.3.0/brand/demo.gif +0 -0
  12. {datacharter-0.2.0 → datacharter-0.3.0}/docs/_config.yml +2 -0
  13. {datacharter-0.2.0 → datacharter-0.3.0}/docs/about.md +1 -1
  14. {datacharter-0.2.0 → datacharter-0.3.0}/docs/agent.md +1 -1
  15. datacharter-0.3.0/docs/assets/add-source.gif +0 -0
  16. datacharter-0.3.0/docs/assets/drag-drop.gif +0 -0
  17. datacharter-0.3.0/docs/assets/snapshot.gif +0 -0
  18. {datacharter-0.2.0 → datacharter-0.3.0}/docs/charter-yaml.md +19 -1
  19. datacharter-0.3.0/docs/cli.md +75 -0
  20. {datacharter-0.2.0 → datacharter-0.3.0}/docs/faq.md +1 -1
  21. {datacharter-0.2.0 → datacharter-0.3.0}/docs/index.html +2 -0
  22. datacharter-0.3.0/docs/mcp.md +68 -0
  23. {datacharter-0.2.0 → datacharter-0.3.0}/docs/quickstart.md +37 -1
  24. {datacharter-0.2.0 → datacharter-0.3.0}/docs/sources.md +9 -1
  25. {datacharter-0.2.0 → datacharter-0.3.0}/docs/workspace.md +9 -0
  26. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/__init__.py +1 -1
  27. datacharter-0.3.0/src/datacharter/agent/cache.py +56 -0
  28. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/agent/loop.py +36 -0
  29. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/agent/tools.py +2 -0
  30. datacharter-0.3.0/src/datacharter/cli.py +701 -0
  31. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/contracts/loader.py +26 -2
  32. datacharter-0.3.0/src/datacharter/contracts/metrics.py +51 -0
  33. datacharter-0.3.0/src/datacharter/contracts/pii.py +81 -0
  34. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/contracts/writer.py +22 -1
  35. datacharter-0.3.0/src/datacharter/engine/provenance.py +132 -0
  36. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/session.py +93 -1
  37. datacharter-0.3.0/src/datacharter/engine/statekey.py +31 -0
  38. datacharter-0.3.0/src/datacharter/mcp/__init__.py +5 -0
  39. datacharter-0.3.0/src/datacharter/mcp/server.py +119 -0
  40. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/models.py +20 -1
  41. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/app.py +16 -23
  42. datacharter-0.3.0/src/datacharter/server/static/assets/index-CX4OWOHb.css +1 -0
  43. datacharter-0.3.0/src/datacharter/server/static/assets/index-CuaSFI7T.js +295 -0
  44. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/index.html +2 -2
  45. {datacharter-0.2.0 → datacharter-0.3.0}/tests/agent/test_agent.py +6 -4
  46. datacharter-0.3.0/tests/agent/test_cache.py +73 -0
  47. datacharter-0.3.0/tests/contracts/test_metrics.py +60 -0
  48. datacharter-0.3.0/tests/contracts/test_pii.py +83 -0
  49. datacharter-0.3.0/tests/engine/test_diff.py +74 -0
  50. datacharter-0.3.0/tests/engine/test_provenance.py +101 -0
  51. datacharter-0.3.0/tests/mcp/test_mcp_server.py +127 -0
  52. {datacharter-0.2.0 → datacharter-0.3.0}/tests/server/test_api.py +3 -3
  53. datacharter-0.3.0/tests/server/test_offline.py +40 -0
  54. datacharter-0.3.0/tests/test_agent_vidaimock_e2e.py +142 -0
  55. {datacharter-0.2.0 → datacharter-0.3.0}/tests/test_cli_init.py +3 -3
  56. datacharter-0.3.0/tests/test_drift.py +31 -0
  57. datacharter-0.3.0/tests/test_explain.py +14 -0
  58. datacharter-0.3.0/tests/test_sample.py +23 -0
  59. datacharter-0.3.0/tests/test_snapshot_recheck.py +30 -0
  60. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/App.tsx +55 -9
  61. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/api.ts +6 -0
  62. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/ChartPanel.tsx +4 -0
  63. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/ChatPanel.tsx +8 -1
  64. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/ResultsGrid.tsx +35 -7
  65. datacharter-0.3.0/ui/src/components/SourceTree.tsx +143 -0
  66. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/Tutorial.tsx +16 -12
  67. datacharter-0.3.0/ui/src/lib/caption.ts +20 -0
  68. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/styles.css +97 -4
  69. datacharter-0.2.0/.impeccable/hook.cache.json +0 -1
  70. datacharter-0.2.0/CLAUDE.md +0 -103
  71. datacharter-0.2.0/docs/DESIGN.md +0 -259
  72. datacharter-0.2.0/docs/PLAN.md +0 -126
  73. datacharter-0.2.0/docs/PROGRESS.md +0 -283
  74. datacharter-0.2.0/docs/SECURITY_AUDIT.md +0 -526
  75. datacharter-0.2.0/docs/TUTORIAL_MODE.md +0 -104
  76. datacharter-0.2.0/docs/superpowers/plans/2026-07-24-source-management-ui.md +0 -1232
  77. datacharter-0.2.0/docs/superpowers/specs/2026-07-24-source-management-ui-design.md +0 -193
  78. datacharter-0.2.0/src/datacharter/cli.py +0 -226
  79. datacharter-0.2.0/src/datacharter/server/static/assets/index-BT6qaEDg.css +0 -1
  80. datacharter-0.2.0/src/datacharter/server/static/assets/index-VhjZo8cS.js +0 -295
  81. datacharter-0.2.0/ui/.impeccable/hook.cache.json +0 -1
  82. datacharter-0.2.0/ui/src/components/SourceTree.tsx +0 -108
  83. {datacharter-0.2.0 → datacharter-0.3.0}/.gitignore +0 -0
  84. {datacharter-0.2.0 → datacharter-0.3.0}/LICENSE +0 -0
  85. {datacharter-0.2.0 → datacharter-0.3.0}/TRADEMARKS.md +0 -0
  86. {datacharter-0.2.0 → datacharter-0.3.0}/brand/README.md +0 -0
  87. {datacharter-0.2.0 → datacharter-0.3.0}/brand/hero.png +0 -0
  88. {datacharter-0.2.0 → datacharter-0.3.0}/brand/mark.svg +0 -0
  89. {datacharter-0.2.0 → datacharter-0.3.0}/brand/screenshot-m4-agent.png +0 -0
  90. {datacharter-0.2.0 → datacharter-0.3.0}/brand/screenshot-m5-complete.png +0 -0
  91. {datacharter-0.2.0 → datacharter-0.3.0}/brand/screenshot-m5-core.png +0 -0
  92. {datacharter-0.2.0 → datacharter-0.3.0}/brand/screenshot-m5-features.png +0 -0
  93. {datacharter-0.2.0 → datacharter-0.3.0}/compose.yaml +0 -0
  94. {datacharter-0.2.0 → datacharter-0.3.0}/docs/assets/hero.png +0 -0
  95. {datacharter-0.2.0 → datacharter-0.3.0}/docs/assets/screenshot.png +0 -0
  96. {datacharter-0.2.0 → datacharter-0.3.0}/docs/security.md +0 -0
  97. {datacharter-0.2.0 → datacharter-0.3.0}/pyproject.toml +0 -0
  98. {datacharter-0.2.0 → datacharter-0.3.0}/scripts/build_ui.sh +0 -0
  99. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/agent/__init__.py +0 -0
  100. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/agent/llm.py +0 -0
  101. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/contracts/__init__.py +0 -0
  102. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/contracts/resolve.py +0 -0
  103. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/contracts/secrets.py +0 -0
  104. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/__init__.py +0 -0
  105. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/aggregate.py +0 -0
  106. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/guard.py +0 -0
  107. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/pushdown.py +0 -0
  108. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/scrub.py +0 -0
  109. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/snowflake.py +0 -0
  110. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/engine/sources.py +0 -0
  111. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/__init__.py +0 -0
  112. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/llm_admin.py +0 -0
  113. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/source_admin.py +0 -0
  114. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/abap-DLDM7-KI.js +0 -0
  115. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/apex-DNDY2TF8.js +0 -0
  116. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/azcli-Y6nb8tq_.js +0 -0
  117. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/bat-BwHxbl9M.js +0 -0
  118. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/bicep-CFznDFnq.js +0 -0
  119. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/cameligo-Bf6VGUru.js +0 -0
  120. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/clojure-Dnu-v4kV.js +0 -0
  121. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/codicon-Brq4_Ui5.ttf +0 -0
  122. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/coffee-Bd8akH9Z.js +0 -0
  123. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/cpp-BbWJElDN.js +0 -0
  124. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/csharp-Co3qMtFm.js +0 -0
  125. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/csp-D-4FJmMZ.js +0 -0
  126. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/css-DdJfP1eB.js +0 -0
  127. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/css.worker-CqwWTjeG.js +0 -0
  128. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/cssMode-BuAVOLr4.js +0 -0
  129. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/cypher-cTPe9QuQ.js +0 -0
  130. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/dart-BOtBlQCF.js +0 -0
  131. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/dockerfile-BG73LgW2.js +0 -0
  132. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/ecl-BEgZUVRK.js +0 -0
  133. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/editor.worker-DCKwvLbM.js +0 -0
  134. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/elixir-BkW5O-1t.js +0 -0
  135. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/flow9-BeJ5waoc.js +0 -0
  136. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/freemarker2-DM0thzwF.js +0 -0
  137. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/fsharp-PahG7c26.js +0 -0
  138. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/go-acbASCJo.js +0 -0
  139. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/graphql-BxJiqAUM.js +0 -0
  140. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/handlebars-BkMf3Qj4.js +0 -0
  141. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/hcl-DtV1sZF8.js +0 -0
  142. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/html-KeNy2AFd.js +0 -0
  143. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/html.worker-DhJ4VZMp.js +0 -0
  144. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/htmlMode-CN5rSB9p.js +0 -0
  145. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/ini-Kd9XrMLS.js +0 -0
  146. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/java-CXBNlu9o.js +0 -0
  147. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/javascript-CZu1iw4q.js +0 -0
  148. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/json.worker-BF9eV5mS.js +0 -0
  149. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/jsonMode-BtMXpE2Q.js +0 -0
  150. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/julia-cl7-CwDS.js +0 -0
  151. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/kotlin-s7OhZKlX.js +0 -0
  152. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/less-9HpZscsL.js +0 -0
  153. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/lexon-OrD6JF1K.js +0 -0
  154. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/liquid-mhqehfbE.js +0 -0
  155. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/lspLanguageFeatures-D1NXFkgg.js +0 -0
  156. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/lua-Cyyb5UIc.js +0 -0
  157. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/m3-B8OfTtLu.js +0 -0
  158. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/markdown-BFxVWTOG.js +0 -0
  159. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/mdx-69yOd9f1.js +0 -0
  160. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/mips-CiqrrVzr.js +0 -0
  161. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/monaco-CB2SckMT.css +0 -0
  162. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/monaco-DNze5gXB.js +0 -0
  163. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/msdax-DmeGPVcC.js +0 -0
  164. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/mysql-C_tMU-Nz.js +0 -0
  165. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/objective-c-BDtDVThU.js +0 -0
  166. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/pascal-vHIfCaH5.js +0 -0
  167. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/pascaligo-DtZ0uQbO.js +0 -0
  168. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/perl-Ub6l9XKa.js +0 -0
  169. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/pgsql-BlNEE0v7.js +0 -0
  170. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/php-BBUBE1dy.js +0 -0
  171. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/pla-DSh2-awV.js +0 -0
  172. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/postiats-CocnycG-.js +0 -0
  173. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/powerquery-tScXyioY.js +0 -0
  174. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/powershell-COWaemsV.js +0 -0
  175. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/protobuf-Brw8urJB.js +0 -0
  176. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/pug-8SOpv6rk.js +0 -0
  177. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/python-C5qpjWC4.js +0 -0
  178. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/qsharp-Bw9ernYp.js +0 -0
  179. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/r-j7ic8hl3.js +0 -0
  180. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/razor-fg0l3XC9.js +0 -0
  181. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/redis-Bu5POkcn.js +0 -0
  182. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/redshift-Bs9aos_-.js +0 -0
  183. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/restructuredtext-CqXO7rUv.js +0 -0
  184. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/ruby-zBfavPgS.js +0 -0
  185. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/rust-BzKRNQWT.js +0 -0
  186. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/sb-BBc9UKZt.js +0 -0
  187. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/scala-D9hQfWCl.js +0 -0
  188. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/scheme-BPhDTwHR.js +0 -0
  189. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/scss-CBJaRo0y.js +0 -0
  190. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/shell-DiJ1NA_G.js +0 -0
  191. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/solidity-Db0IVjzk.js +0 -0
  192. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/sophia-CnS9iZB_.js +0 -0
  193. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/sparql-CJmd_6j2.js +0 -0
  194. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/sql-ClhHkBeG.js +0 -0
  195. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/st-CHwy0fLd.js +0 -0
  196. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/swift-Bqt4WxQ4.js +0 -0
  197. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/systemverilog-Bs9z6M-B.js +0 -0
  198. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/tcl-Dm6ycUr_.js +0 -0
  199. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/ts.worker-DTZAwq0V.js +0 -0
  200. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/tsMode-CaXNdXrQ.js +0 -0
  201. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/twig-Csy3S7wG.js +0 -0
  202. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/typescript-CCbVPqil.js +0 -0
  203. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/typespec-Btyra-wh.js +0 -0
  204. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/vb-Db0cS2oM.js +0 -0
  205. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/wgsl-BTesnYfV.js +0 -0
  206. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/workers-CwEVRSMl.js +0 -0
  207. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/xml-CIpcyvha.js +0 -0
  208. {datacharter-0.2.0 → datacharter-0.3.0}/src/datacharter/server/static/assets/yaml-CiikAWeE.js +0 -0
  209. {datacharter-0.2.0 → datacharter-0.3.0}/tests/agent/test_llm_wire.py +0 -0
  210. {datacharter-0.2.0 → datacharter-0.3.0}/tests/contracts/test_loader.py +0 -0
  211. {datacharter-0.2.0 → datacharter-0.3.0}/tests/contracts/test_secrets_store.py +0 -0
  212. {datacharter-0.2.0 → datacharter-0.3.0}/tests/contracts/test_writer.py +0 -0
  213. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_aggregate.py +0 -0
  214. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_federation.py +0 -0
  215. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_guard.py +0 -0
  216. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_pushdown.py +0 -0
  217. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_scrub.py +0 -0
  218. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_session.py +0 -0
  219. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_source_lifecycle.py +0 -0
  220. {datacharter-0.2.0 → datacharter-0.3.0}/tests/engine/test_sources.py +0 -0
  221. {datacharter-0.2.0 → datacharter-0.3.0}/tests/integration/seed/mysql.sql +0 -0
  222. {datacharter-0.2.0 → datacharter-0.3.0}/tests/integration/seed/postgres.sql +0 -0
  223. {datacharter-0.2.0 → datacharter-0.3.0}/tests/integration/test_live_sources.py +0 -0
  224. {datacharter-0.2.0 → datacharter-0.3.0}/tests/server/test_llm_admin.py +0 -0
  225. {datacharter-0.2.0 → datacharter-0.3.0}/tests/server/test_source_admin.py +0 -0
  226. {datacharter-0.2.0 → datacharter-0.3.0}/tests/server/test_sources_api.py +0 -0
  227. {datacharter-0.2.0 → datacharter-0.3.0}/tests/test_packaging_e2e.py +0 -0
  228. {datacharter-0.2.0 → datacharter-0.3.0}/tests/test_scaffold.py +0 -0
  229. {datacharter-0.2.0 → datacharter-0.3.0}/tests/test_secrets_cli.py +0 -0
  230. {datacharter-0.2.0 → datacharter-0.3.0}/ui/index.html +0 -0
  231. {datacharter-0.2.0 → datacharter-0.3.0}/ui/package-lock.json +0 -0
  232. {datacharter-0.2.0 → datacharter-0.3.0}/ui/package.json +0 -0
  233. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/HelpModal.tsx +0 -0
  234. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/LLMConfig.tsx +0 -0
  235. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/QueryFiles.tsx +0 -0
  236. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/SourceForm.tsx +0 -0
  237. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/components/SourcesView.tsx +0 -0
  238. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/lib/chartSpec.ts +0 -0
  239. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/lib/columns.ts +0 -0
  240. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/lib/useResize.ts +0 -0
  241. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/main.tsx +0 -0
  242. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/monaco.ts +0 -0
  243. {datacharter-0.2.0 → datacharter-0.3.0}/ui/src/vite-env.d.ts +0 -0
  244. {datacharter-0.2.0 → datacharter-0.3.0}/ui/tsconfig.json +0 -0
  245. {datacharter-0.2.0 → datacharter-0.3.0}/ui/vite.config.ts +0 -0
@@ -14,7 +14,7 @@ jobs:
14
14
  scan:
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@v4
17
+ - uses: actions/checkout@v5
18
18
  - name: Scan for banned terms
19
19
  run: |
20
20
  set -e
@@ -17,20 +17,20 @@ jobs:
17
17
  build:
18
18
  runs-on: ubuntu-latest
19
19
  steps:
20
- - uses: actions/checkout@v4
21
- - uses: actions/setup-node@v4
20
+ - uses: actions/checkout@v5
21
+ - uses: actions/setup-node@v5
22
22
  with:
23
23
  node-version: 22
24
24
  cache: npm
25
25
  cache-dependency-path: ui/package-lock.json
26
- - uses: astral-sh/setup-uv@v4
26
+ - uses: astral-sh/setup-uv@v7
27
27
  - name: Build UI into the package
28
28
  run: ./scripts/build_ui.sh
29
29
  - name: Build sdist + wheel
30
30
  run: uv build
31
31
  - name: Validate metadata and README rendering
32
32
  run: uvx twine check dist/*
33
- - uses: actions/upload-artifact@v4
33
+ - uses: actions/upload-artifact@v7
34
34
  with:
35
35
  name: dist
36
36
  path: dist/
@@ -44,7 +44,7 @@ jobs:
44
44
  permissions:
45
45
  id-token: write # OIDC token for PyPI Trusted Publishing
46
46
  steps:
47
- - uses: actions/download-artifact@v4
47
+ - uses: actions/download-artifact@v8
48
48
  with:
49
49
  name: dist
50
50
  path: dist/
@@ -8,8 +8,8 @@ jobs:
8
8
  test:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/checkout@v4
12
- - uses: astral-sh/setup-uv@v4
11
+ - uses: actions/checkout@v5
12
+ - uses: astral-sh/setup-uv@v7
13
13
  - name: Install
14
14
  run: uv venv && uv pip install -e ".[dev]"
15
15
  - name: Lint
@@ -44,8 +44,8 @@ jobs:
44
44
  --health-cmd "mysqladmin ping -h 127.0.0.1 -pcharter_test_pw -ucharter"
45
45
  --health-interval 2s --health-timeout 2s --health-retries 60
46
46
  steps:
47
- - uses: actions/checkout@v4
48
- - uses: astral-sh/setup-uv@v4
47
+ - uses: actions/checkout@v5
48
+ - uses: astral-sh/setup-uv@v7
49
49
  - name: Install
50
50
  run: uv venv && uv pip install -e ".[dev]"
51
51
  - name: Seed databases
@@ -61,8 +61,8 @@ jobs:
61
61
  ui:
62
62
  runs-on: ubuntu-latest
63
63
  steps:
64
- - uses: actions/checkout@v4
65
- - uses: actions/setup-node@v4
64
+ - uses: actions/checkout@v5
65
+ - uses: actions/setup-node@v5
66
66
  with:
67
67
  node-version: 22
68
68
  cache: npm
@@ -75,15 +75,28 @@ jobs:
75
75
  package:
76
76
  runs-on: ubuntu-latest
77
77
  steps:
78
- - uses: actions/checkout@v4
79
- - uses: actions/setup-node@v4
78
+ - uses: actions/checkout@v5
79
+ - uses: actions/setup-node@v5
80
80
  with:
81
81
  node-version: 22
82
82
  cache: npm
83
83
  cache-dependency-path: ui/package-lock.json
84
- - uses: astral-sh/setup-uv@v4
84
+ - uses: astral-sh/setup-uv@v7
85
85
  - name: Build UI into package
86
86
  run: ./scripts/build_ui.sh
87
+ - name: Fetch VidaiMock (e2e mock LLM; Apache-2.0, checksum-pinned)
88
+ run: |
89
+ ver=v0.2.9
90
+ base="https://github.com/vidaiUK/VidaiMock/releases/download/$ver"
91
+ curl -fsSL -o vm.tar.gz "$base/vidaimock-linux-x64.tar.gz"
92
+ curl -fsSL -o vm.sha256 "$base/vidaimock-linux-x64.sha256"
93
+ got=$(sha256sum vm.tar.gz | awk '{print $1}')
94
+ want=$(awk '{print $1}' vm.sha256)
95
+ test "$got" = "$want" || { echo "VidaiMock checksum mismatch: $got != $want"; exit 1; }
96
+ mkdir -p vidaimock-bin && tar -xzf vm.tar.gz -C vidaimock-bin
97
+ bin=$(find "$PWD/vidaimock-bin" -type f -name vidaimock | head -1)
98
+ chmod +x "$bin"
99
+ echo "VIDAIMOCK_BIN=$bin" >> "$GITHUB_ENV"
87
100
  - name: Install + e2e
88
101
  run: |
89
102
  uv venv
@@ -5,6 +5,75 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.3.0] - 2026-07-24
9
+
10
+ ### Added
11
+
12
+ - Agent view: a toggle on the results grid that masks the contract's PII columns
13
+ in place, showing exactly what the agent and MCP server see (the model never
14
+ sees raw PII) — right in the SQL editor, no LLM required.
15
+ - Source tree: collapsible `+`/`−` disclosure on every source and table, and
16
+ expand a table to see its columns inline.
17
+ - Instant SQL preview: results update live a beat after you stop typing (row-capped,
18
+ and errors stay silent until you press Run) — no Run click needed to see output.
19
+ - Chart captions: auto-detected charts (results) and agent-emitted charts (chat)
20
+ now show a one-line plain-language caption of what they show — e.g. "bar of
21
+ revenue by customer_id".
22
+ - `datacharter explain <sql>` — show a query's plan and row estimates without
23
+ running it: a pre-flight cost check that surfaces per-source scans and what
24
+ would push down.
25
+ - `datacharter sample <relation>` — print a PII-masked CSV sample of a relation
26
+ (columns marked PII in the contract come back as `•••`), safe to paste into a
27
+ bug ticket or share.
28
+ - Contract-scoped metrics: declare named `metrics:` in `charter.yaml` (a base
29
+ relation + an aggregate expression + optional dimensions); `datacharter metric
30
+ <name> [--by cols]` resolves each to one governed SELECT and runs it, so a
31
+ certified `revenue` always means the same thing. Joins across sources and time
32
+ grains are a later refinement.
33
+ - NL→SQL cache: when the agent answers via a query, its SQL is cached against a
34
+ contract fingerprint; a repeat or normalized-reworded question re-runs the
35
+ cached SQL on current data and skips the LLM round-trip (fresh data, no stale
36
+ answers). Embedding-based semantic similarity is a follow-up.
37
+ - `datacharter serve --offline` — no-egress mode: the LLM agent is disabled (no
38
+ data can reach any model endpoint) and connecting one at runtime is refused. It
39
+ prints and writes a no-egress attestation to `.datacharter/attestation.json`.
40
+ - `datacharter snapshot <name> <sql>` and `datacharter recheck <name>` — save a
41
+ query's result as `local.<name>` alongside its SQL, then later re-run it and
42
+ diff against the saved result to answer "did this number change?". `recheck`
43
+ exits non-zero when the result has changed.
44
+ - `datacharter drift` — report schema drift between the charter and the live
45
+ sources: declared tables or PII columns that no longer exist. A missing PII
46
+ column is a silent masking gap, so this is caught explicitly. Exits non-zero
47
+ when drift is found, for use in CI.
48
+ - `datacharter scan` — introspect the configured sources and suggest PII columns
49
+ for `charter.yaml`, both by column name and by sampled values (catches an
50
+ email/SSN/IP column whose name gives nothing away). Turns "author a contract"
51
+ into "review a generated one" for the PII map. Prints suggestions, or `--write`
52
+ merges them into `charter.yaml` (round-trip; credential refs left untouched).
53
+ - `datacharter diff <left> <right>` and `Engine.diff` — a full-row set difference
54
+ between two relations, across sources (postgres vs a file, prod vs staging, …)
55
+ via the federation engine. Reports rows only in each side plus the common count,
56
+ through the read-only guard. With `--key`, rows are matched by key and changed
57
+ rows (same key, differing values) are counted separately.
58
+ - Per-query provenance: query results (API, agent tool results) now report the
59
+ source relations and columns the query read — plus column lineage, mapping each
60
+ output column to the input columns that feed it — parsed from the same AST the
61
+ read-only guard uses. This is the trust signal for an agent answer: it shows
62
+ which real columns an answer came from.
63
+ - `datacharter mcp` — an MCP (Model Context Protocol) server over stdio that
64
+ exposes the four governed query tools (`list_sources`, `list_tables`,
65
+ `describe_table`, `query`) to any MCP client. The read-only guard, PII masking,
66
+ and credential scrubbing are inherited from the same toolbox the agent uses, so
67
+ an external agent can explore your data without seeing raw PII or being able to
68
+ write. Hand-rolled JSON-RPC 2.0, no new dependency.
69
+
70
+ ### Changed
71
+
72
+ - Toolbar: **Snapshot** moved next to the query actions (away from the export
73
+ format menu); hover tooltips on Run/Snapshot/Export/Explain.
74
+ - Demo workspace: bundled as one sqlite `store` contract holding `customers`
75
+ and `orders`, so the sidebar reads contract → table → columns.
76
+
8
77
  ## [0.2.0] - 2026-07-24
9
78
 
10
79
  ### Added
@@ -0,0 +1,72 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ - Demonstrating empathy and kindness toward other people
21
+ - Being respectful of differing opinions, viewpoints, and experiences
22
+ - Giving and gracefully accepting constructive feedback
23
+ - Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ - Focusing on what is best not just for us as individuals, but for the overall
26
+ community
27
+
28
+ Examples of unacceptable behavior include:
29
+
30
+ - The use of sexualized language or imagery, and sexual attention or advances of
31
+ any kind
32
+ - Trolling, insulting or derogatory comments, and personal or political attacks
33
+ - Public or private harassment
34
+ - Publishing others' private information, such as a physical or email address,
35
+ without their explicit permission
36
+ - Other conduct which could reasonably be considered inappropriate in a
37
+ professional setting
38
+
39
+ ## Enforcement Responsibilities
40
+
41
+ Community leaders are responsible for clarifying and enforcing our standards of
42
+ acceptable behavior and will take appropriate and fair corrective action in
43
+ response to any behavior that they deem inappropriate, threatening, offensive,
44
+ or harmful.
45
+
46
+ Community leaders have the right and responsibility to remove, edit, or reject
47
+ comments, commits, code, wiki edits, issues, and other contributions that are
48
+ not aligned to this Code of Conduct, and will communicate reasons for moderation
49
+ decisions when appropriate.
50
+
51
+ ## Scope
52
+
53
+ This Code of Conduct applies within all community spaces, and also applies when
54
+ an individual is officially representing the community in public spaces.
55
+
56
+ ## Enforcement
57
+
58
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
59
+ reported to the maintainers privately through GitHub's private reporting on the
60
+ repository (Security → Advisories, or a direct message to a maintainer). All
61
+ complaints will be reviewed and investigated promptly and fairly.
62
+
63
+ All community leaders are obligated to respect the privacy and security of the
64
+ reporter of any incident.
65
+
66
+ ## Attribution
67
+
68
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
69
+ version 2.1, available at
70
+ https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
71
+
72
+ [homepage]: https://www.contributor-covenant.org
@@ -0,0 +1,124 @@
1
+ # Contributing to DataCharter
2
+
3
+ Thanks for your interest in DataCharter. Contributions of all kinds — bug
4
+ reports, docs, tests, and code — are welcome. The project is licensed under
5
+ [Apache-2.0](LICENSE); contributions are accepted under the same license.
6
+
7
+ ## Ways to contribute
8
+
9
+ - **Report a bug or request a feature** — open an issue with steps to reproduce
10
+ or a clear description of the use case.
11
+ - **Improve docs** — fixes to the guides under `docs/` and the README are always
12
+ welcome.
13
+ - **Send a pull request** — for anything beyond a trivial fix, open (or comment
14
+ on) an issue first so we can agree on the approach before you invest the work.
15
+
16
+ ## Development setup
17
+
18
+ DataCharter is one Python package with a bundled web UI. You need Python 3.11+
19
+ and [uv](https://docs.astral.sh/uv/); UI work additionally needs Node.
20
+
21
+ ```sh
22
+ # Python environment (creates .venv)
23
+ uv sync
24
+
25
+ # Run the app from source
26
+ uv run datacharter serve
27
+
28
+ # Web UI (only if you're changing the frontend)
29
+ cd ui && npm ci && npm run build
30
+ ```
31
+
32
+ ## Tests and linting
33
+
34
+ Every change lands with tests, and the working tree must be lint-clean. These
35
+ are the same commands CI runs:
36
+
37
+ ```sh
38
+ uv run pytest -q # unit tests (fast; the default set)
39
+ uv run pytest -m integration -q # integration tests (require Docker)
40
+ uv run pytest -m e2e -q # end-to-end (see below)
41
+ uv run ruff check . # lint
42
+ cd ui && npm run build # type-check + build the UI
43
+ ```
44
+
45
+ The end-to-end agent test drives a real
46
+ [VidaiMock](https://github.com/vidaiUK/VidaiMock) server (an Apache-2.0 mock LLM);
47
+ it skips unless `VIDAIMOCK_BIN` points at the binary or `vidaimock` is on `PATH`.
48
+
49
+ Write tests that describe behavior, keep unit tests fast, and put anything that
50
+ needs Docker or a live server behind the `integration` / `e2e` markers so the
51
+ default run stays quick.
52
+
53
+ ## Commit and pull-request conventions
54
+
55
+ - **[Conventional Commits](https://www.conventionalcommits.org/)**:
56
+ `feat:`, `fix:`, `docs:`, `chore:`, `test:`, `refactor:`. Keep the subject
57
+ under ~72 characters, imperative mood.
58
+ - Small, focused commits over large omnibus ones. Every commit should build and
59
+ pass tests so history stays bisectable.
60
+ - Never commit secrets, tokens, or real hostnames — in code, tests, or fixtures.
61
+ - Keep the PR scoped to one change; describe the "why," not just the "what."
62
+
63
+ ## Developer Certificate of Origin (sign-off required)
64
+
65
+ DataCharter uses the **Developer Certificate of Origin (DCO)** instead of a CLA.
66
+ Every commit must be signed off, certifying that you wrote the change (or
67
+ otherwise have the right to submit it under Apache-2.0). This is a lightweight,
68
+ one-time habit — no separate agreement to sign.
69
+
70
+ Add the sign-off automatically with the `-s` flag:
71
+
72
+ ```sh
73
+ git commit -s -m "fix: correct off-by-one in row cap"
74
+ ```
75
+
76
+ That appends a line matching your configured `git` name and email:
77
+
78
+ ```
79
+ Signed-off-by: Jane Developer <jane@example.com>
80
+ ```
81
+
82
+ Use your real name and a valid email. If you forget the sign-off on your last
83
+ commit, amend it with `git commit --amend -s`; for a whole branch, use
84
+ `git rebase --signoff <base>`. PRs whose commits are not signed off cannot be
85
+ merged.
86
+
87
+ By signing off, you agree to the DCO, version 1.1:
88
+
89
+ ```
90
+ Developer Certificate of Origin
91
+ Version 1.1
92
+
93
+ Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
94
+
95
+ Everyone is permitted to copy and distribute verbatim copies of this
96
+ license document, but changing it is not allowed.
97
+
98
+
99
+ Developer's Certificate of Origin 1.1
100
+
101
+ By making a contribution to this project, I certify that:
102
+
103
+ (a) The contribution was created in whole or in part by me and I
104
+ have the right to submit it under the open source license
105
+ indicated in the file; or
106
+
107
+ (b) The contribution is based upon previous work that, to the best
108
+ of my knowledge, is covered under an appropriate open source
109
+ license and I have the right under that license to submit that
110
+ work with modifications, whether created in whole or in part
111
+ by me, under the same open source license (unless I am
112
+ permitted to submit under a different license), as indicated
113
+ in the file; or
114
+
115
+ (c) The contribution was provided directly to me by some other
116
+ person who certified (a), (b) or (c) and I have not modified
117
+ it.
118
+
119
+ (d) I understand and agree that this project and the contribution
120
+ are public and that a record of the contribution (including all
121
+ personal information I submit with it, including my sign-off) is
122
+ maintained indefinitely and may be redistributed consistent with
123
+ this project or the open source license(s) involved.
124
+ ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacharter
3
- Version: 0.2.0
3
+ Version: 0.3.0
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
@@ -46,12 +46,20 @@ Description-Content-Type: text/markdown
46
46
 
47
47
  > Explore all your data locally, in one place — contract-governed data exploration, powered by DuckDB
48
48
 
49
+ [![PyPI](https://img.shields.io/pypi/v/datacharter)](https://pypi.org/project/datacharter/)
50
+ [![Python](https://img.shields.io/pypi/pyversions/datacharter)](https://pypi.org/project/datacharter/)
51
+ [![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue)](LICENSE)
52
+
49
53
  Contract-governed local data exploration, **powered by [DuckDB](https://duckdb.org)**.
50
54
  Define your sources as data contracts
51
55
  ([ODCS](https://bitol-io.github.io/open-data-contract-standard/)-compatible YAML),
52
56
  query them through DuckDB's SQL federation engine with real source pushdowns,
53
- explore in a local web UI — charts, profiling, SQL editor and optionally ask
54
- questions in plain language with a fully local model.
57
+ and explore in a local web UI — SQL editor with live preview, auto-charts,
58
+ profiling. Every answer shows which source columns it read; ask questions in
59
+ plain language or serve the whole thing to an AI agent over [MCP](docs/mcp.md),
60
+ with PII masked from the model — all on your machine.
61
+
62
+ ![DataCharter — live SQL preview, auto-charts, per-query provenance, and PII masking](https://raw.githubusercontent.com/datacharter/datacharter/main/brand/demo.gif)
55
63
 
56
64
  **Status: pre-release.** V1 in development.
57
65
 
@@ -97,6 +105,21 @@ Drop a CSV, Parquet, or JSON file onto the window to query it instantly.
97
105
  `.env.example` — commit it, clone it, `datacharter serve`. Your team's whole
98
106
  exploration environment travels as a repo; secrets and local state never do.
99
107
 
108
+ ## More than a viewer
109
+
110
+ DataCharter governs and audits your data, not just displays it — see the
111
+ [CLI reference](docs/cli.md) for the full command set:
112
+
113
+ - **Governed MCP server** — `datacharter mcp` exposes read-only, PII-masked query
114
+ tools to any MCP client (Cursor, Cline, or your own agent).
115
+ - **Contracts you can check** — `datacharter drift` exits non-zero when a declared
116
+ table or PII column disappears; `datacharter scan` detects PII columns to add.
117
+ - **Answers that show their work** — every result reports the source columns it
118
+ read; `datacharter diff` compares relations across sources; `datacharter metric`
119
+ runs governed metric definitions.
120
+ - **Privacy-first** — `serve --offline` runs with no outbound network, and the
121
+ model never sees raw PII (flip **Agent view** in the UI to see exactly what it does).
122
+
100
123
  ## Built on
101
124
 
102
125
  DataCharter stands on excellent open-source foundations:
@@ -105,8 +128,16 @@ DataCharter stands on excellent open-source foundations:
105
128
  federation (`ATTACH`), file formats, Iceberg/Delta, encryption, autocomplete.
106
129
  - **[Open Data Contract Standard](https://bitol-io.github.io/open-data-contract-standard/)** /
107
130
  [datacontract.com](https://datacontract-specification.com/) — the contract format `charter.yaml` speaks.
131
+ - **[Model Context Protocol](https://modelcontextprotocol.io)** — the open protocol
132
+ the `datacharter mcp` server speaks to agents and MCP clients.
108
133
  - **[Vega-Lite](https://vega.github.io/vega-lite/)** — declarative charting.
109
134
  - **[Monaco Editor](https://microsoft.github.io/monaco-editor/)** — the SQL editor.
135
+ - **[TanStack Table & Virtual](https://tanstack.com/)** — the virtualized results grid.
136
+ - And the Python & React ecosystems — FastAPI, pydantic, httpx, keyring, and
137
+ ruamel.yaml on the backend; React and Vite on the front.
138
+
139
+ Testing uses **[VidaiMock](https://github.com/vidaiUK/VidaiMock)**, an
140
+ Apache-2.0 mock LLM server, as the offline agent endpoint in CI.
110
141
 
111
142
  DuckDB is a trademark of the DuckDB Foundation. DataCharter is an independent
112
143
  project and is not affiliated with or endorsed by the DuckDB Foundation.
@@ -2,12 +2,20 @@
2
2
 
3
3
  > Explore all your data locally, in one place — contract-governed data exploration, powered by DuckDB
4
4
 
5
+ [![PyPI](https://img.shields.io/pypi/v/datacharter)](https://pypi.org/project/datacharter/)
6
+ [![Python](https://img.shields.io/pypi/pyversions/datacharter)](https://pypi.org/project/datacharter/)
7
+ [![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue)](LICENSE)
8
+
5
9
  Contract-governed local data exploration, **powered by [DuckDB](https://duckdb.org)**.
6
10
  Define your sources as data contracts
7
11
  ([ODCS](https://bitol-io.github.io/open-data-contract-standard/)-compatible YAML),
8
12
  query them through DuckDB's SQL federation engine with real source pushdowns,
9
- explore in a local web UI — charts, profiling, SQL editor and optionally ask
10
- questions in plain language with a fully local model.
13
+ and explore in a local web UI — SQL editor with live preview, auto-charts,
14
+ profiling. Every answer shows which source columns it read; ask questions in
15
+ plain language or serve the whole thing to an AI agent over [MCP](docs/mcp.md),
16
+ with PII masked from the model — all on your machine.
17
+
18
+ ![DataCharter — live SQL preview, auto-charts, per-query provenance, and PII masking](https://raw.githubusercontent.com/datacharter/datacharter/main/brand/demo.gif)
11
19
 
12
20
  **Status: pre-release.** V1 in development.
13
21
 
@@ -53,6 +61,21 @@ Drop a CSV, Parquet, or JSON file onto the window to query it instantly.
53
61
  `.env.example` — commit it, clone it, `datacharter serve`. Your team's whole
54
62
  exploration environment travels as a repo; secrets and local state never do.
55
63
 
64
+ ## More than a viewer
65
+
66
+ DataCharter governs and audits your data, not just displays it — see the
67
+ [CLI reference](docs/cli.md) for the full command set:
68
+
69
+ - **Governed MCP server** — `datacharter mcp` exposes read-only, PII-masked query
70
+ tools to any MCP client (Cursor, Cline, or your own agent).
71
+ - **Contracts you can check** — `datacharter drift` exits non-zero when a declared
72
+ table or PII column disappears; `datacharter scan` detects PII columns to add.
73
+ - **Answers that show their work** — every result reports the source columns it
74
+ read; `datacharter diff` compares relations across sources; `datacharter metric`
75
+ runs governed metric definitions.
76
+ - **Privacy-first** — `serve --offline` runs with no outbound network, and the
77
+ model never sees raw PII (flip **Agent view** in the UI to see exactly what it does).
78
+
56
79
  ## Built on
57
80
 
58
81
  DataCharter stands on excellent open-source foundations:
@@ -61,8 +84,16 @@ DataCharter stands on excellent open-source foundations:
61
84
  federation (`ATTACH`), file formats, Iceberg/Delta, encryption, autocomplete.
62
85
  - **[Open Data Contract Standard](https://bitol-io.github.io/open-data-contract-standard/)** /
63
86
  [datacontract.com](https://datacontract-specification.com/) — the contract format `charter.yaml` speaks.
87
+ - **[Model Context Protocol](https://modelcontextprotocol.io)** — the open protocol
88
+ the `datacharter mcp` server speaks to agents and MCP clients.
64
89
  - **[Vega-Lite](https://vega.github.io/vega-lite/)** — declarative charting.
65
90
  - **[Monaco Editor](https://microsoft.github.io/monaco-editor/)** — the SQL editor.
91
+ - **[TanStack Table & Virtual](https://tanstack.com/)** — the virtualized results grid.
92
+ - And the Python & React ecosystems — FastAPI, pydantic, httpx, keyring, and
93
+ ruamel.yaml on the backend; React and Vite on the front.
94
+
95
+ Testing uses **[VidaiMock](https://github.com/vidaiUK/VidaiMock)**, an
96
+ Apache-2.0 mock LLM server, as the offline agent endpoint in CI.
66
97
 
67
98
  DuckDB is a trademark of the DuckDB Foundation. DataCharter is an independent
68
99
  project and is not affiliated with or endorsed by the DuckDB Foundation.
@@ -0,0 +1,38 @@
1
+ # Security Policy
2
+
3
+ DataCharter treats several of its boundaries as security-critical: the
4
+ parser-based read-only guard, contract-driven PII masking, credential scrubbing
5
+ on every error path, and encrypted local spill/state. We appreciate reports that
6
+ help keep those boundaries sound.
7
+
8
+ ## Reporting a vulnerability
9
+
10
+ Please report security issues **privately** through GitHub's private vulnerability
11
+ reporting — open the repository's **Security → Advisories → Report a vulnerability**.
12
+ Do not open a public issue for a security report.
13
+
14
+ We aim to acknowledge a report within three business days and to keep you updated
15
+ as we investigate and ship a fix.
16
+
17
+ ## Supported versions
18
+
19
+ DataCharter is pre-1.0; security fixes land on the latest release. Please run the
20
+ most recent version (`pip install -U datacharter`).
21
+
22
+ ## Scope
23
+
24
+ In scope:
25
+
26
+ - Bypasses of the read-only guard — any way to run a write, DDL/DML, or a
27
+ filesystem/remote function through a query.
28
+ - PII-mask bypasses — surfacing a masked column's raw values through the agent
29
+ tools or the MCP server.
30
+ - Credential leakage in error messages, logs, or on disk.
31
+ - The HTTP surface of `datacharter serve` — DNS-rebinding (Host header) or
32
+ cross-site (CSRF) weaknesses.
33
+
34
+ Out of scope:
35
+
36
+ - Issues that require an already-compromised local machine or account.
37
+ - The behavior or vulnerabilities of the third-party sources you choose to
38
+ connect to.
@@ -0,0 +1,56 @@
1
+ # Third-party notices
2
+
3
+ DataCharter is distributed under [Apache-2.0](LICENSE). It depends on, and its
4
+ wheel bundles a pre-built web UI that includes, third-party open-source software.
5
+ Each component remains under its own license; the copyright and license notices
6
+ below are provided in acknowledgement. Full license texts are available in each
7
+ project's repository.
8
+
9
+ ## Python runtime dependencies
10
+
11
+ | Component | License |
12
+ | --- | --- |
13
+ | [DuckDB](https://github.com/duckdb/duckdb) | MIT |
14
+ | [PyYAML](https://github.com/yaml/pyyaml) | MIT |
15
+ | [pydantic](https://github.com/pydantic/pydantic) | MIT |
16
+ | [FastAPI](https://github.com/fastapi/fastapi) | MIT |
17
+ | [Starlette](https://github.com/encode/starlette) (via FastAPI) | BSD-3-Clause |
18
+ | [uvicorn](https://github.com/encode/uvicorn) | BSD-3-Clause |
19
+ | [httpx](https://github.com/encode/httpx) | BSD-3-Clause |
20
+ | [python-dotenv](https://github.com/theskumar/python-dotenv) | BSD-3-Clause |
21
+ | [python-multipart](https://github.com/Kludex/python-multipart) | Apache-2.0 |
22
+ | [keyring](https://github.com/jaraco/keyring) | MIT |
23
+ | [ruamel.yaml](https://sourceforge.net/projects/ruamel-yaml/) | MIT |
24
+
25
+ Optional extra (`datacharter[snowflake]`):
26
+
27
+ | Component | License |
28
+ | --- | --- |
29
+ | [snowflake-connector-python](https://github.com/snowflakedb/snowflake-connector-python) | Apache-2.0 |
30
+
31
+ DuckDB extensions (BigQuery, SQL Server, Iceberg, Delta, httpfs, etc.) are fetched
32
+ by DuckDB at runtime from its extension repositories and are not bundled here.
33
+
34
+ ## Bundled web UI (included in the wheel)
35
+
36
+ | Component | License |
37
+ | --- | --- |
38
+ | [React](https://github.com/facebook/react) / react-dom | MIT |
39
+ | [Monaco Editor](https://github.com/microsoft/monaco-editor) | MIT |
40
+ | [@monaco-editor/react](https://github.com/suren-atoyan/monaco-react) | MIT |
41
+ | [TanStack Table](https://github.com/TanStack/table) | MIT |
42
+ | [TanStack Virtual](https://github.com/TanStack/virtual) | MIT |
43
+ | [Vega](https://github.com/vega/vega) | BSD-3-Clause |
44
+ | [Vega-Lite](https://github.com/vega/vega-lite) | BSD-3-Clause |
45
+ | [vega-embed](https://github.com/vega/vega-embed) | BSD-3-Clause |
46
+
47
+ ## Development and CI tools (not distributed)
48
+
49
+ Build and test tooling — Vite, TypeScript, pytest, pytest-asyncio, ruff, and
50
+ [VidaiMock](https://github.com/vidaiUK/VidaiMock) (Apache-2.0, the mock LLM server
51
+ used by the end-to-end tests) — is used to develop and test DataCharter and is
52
+ not included in the distributed package.
53
+
54
+ > A complete, auto-generated license bundle (with full texts) can be produced at
55
+ > build time from `pip-licenses` and the npm `license-checker`; this file is the
56
+ > curated summary.
Binary file
@@ -15,4 +15,6 @@ exclude:
15
15
  - README.md
16
16
  - SECURITY_AUDIT.md
17
17
  - TUTORIAL_MODE.md
18
+ - ROADMAP-strategy.md
19
+ - LAUNCH.md
18
20
  - superpowers
@@ -3,7 +3,7 @@ title: About DataCharter
3
3
  description: Why contract-governed local data exploration exists.
4
4
  ---
5
5
 
6
- [Home](index.html) &middot; [Quick start](quickstart.html) &middot; [charter.yaml](charter-yaml.html) &middot; [Sources](sources.html) &middot; [Agent](agent.html) &middot; [About](about.html) &middot; [FAQ](faq.html)
6
+ [Home](index.html) &middot; [Quick start](quickstart.html) &middot; [charter.yaml](charter-yaml.html) &middot; [Sources](sources.html) &middot; [Agent](agent.html) &middot; [CLI](cli.html) &middot; [MCP](mcp.html) &middot; [About](about.html) &middot; [FAQ](faq.html)
7
7
 
8
8
  ## The idea
9
9
 
@@ -3,7 +3,7 @@ title: Agent modes
3
3
  description: Bring your own endpoint, run fully local, or skip the agent entirely.
4
4
  ---
5
5
 
6
- [Home](index.html) &middot; [Quick start](quickstart.html) &middot; [charter.yaml](charter-yaml.html) &middot; [Sources](sources.html) &middot; [Agent](agent.html) &middot; [About](about.html) &middot; [FAQ](faq.html)
6
+ [Home](index.html) &middot; [Quick start](quickstart.html) &middot; [charter.yaml](charter-yaml.html) &middot; [Sources](sources.html) &middot; [Agent](agent.html) &middot; [CLI](cli.html) &middot; [MCP](mcp.html) &middot; [About](about.html) &middot; [FAQ](faq.html)
7
7
 
8
8
  DataCharter has an optional natural-language agent that turns a plain-language
9
9
  question into SQL against your sources. It is genuinely optional.