witan-code 0.14.0__tar.gz → 0.15.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 (101) hide show
  1. {witan_code-0.14.0 → witan_code-0.15.0}/CHANGELOG.md +21 -0
  2. {witan_code-0.14.0 → witan_code-0.15.0}/PKG-INFO +2 -2
  3. {witan_code-0.14.0 → witan_code-0.15.0}/pyproject.toml +16 -11
  4. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_setup.py +30 -0
  5. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/cli.py +4 -1
  6. {witan_code-0.14.0 → witan_code-0.15.0}/.gitignore +0 -0
  7. {witan_code-0.14.0 → witan_code-0.15.0}/README.md +0 -0
  8. {witan_code-0.14.0 → witan_code-0.15.0}/config/claude.json +0 -0
  9. {witan_code-0.14.0 → witan_code-0.15.0}/config/copilot.json +0 -0
  10. {witan_code-0.14.0 → witan_code-0.15.0}/config/pi.json +0 -0
  11. {witan_code-0.14.0 → witan_code-0.15.0}/docs/BRANCH_INDEXING.md +0 -0
  12. {witan_code-0.14.0 → witan_code-0.15.0}/docs/CLI_REFERENCE.md +0 -0
  13. {witan_code-0.14.0 → witan_code-0.15.0}/docs/EDGE_PRECISION_TIERS.md +0 -0
  14. {witan_code-0.14.0 → witan_code-0.15.0}/docs/PACKAGE_MAP.md +0 -0
  15. {witan_code-0.14.0 → witan_code-0.15.0}/docs/STAGE2_STITCHING.md +0 -0
  16. {witan_code-0.14.0 → witan_code-0.15.0}/docs/SYMBOL_FORMAT.md +0 -0
  17. {witan_code-0.14.0 → witan_code-0.15.0}/docs/SYMBOL_TABLE.md +0 -0
  18. {witan_code-0.14.0 → witan_code-0.15.0}/docs/USER_GUIDE.md +0 -0
  19. {witan_code-0.14.0 → witan_code-0.15.0}/install.sh +0 -0
  20. {witan_code-0.14.0 → witan_code-0.15.0}/tests/__init__.py +0 -0
  21. {witan_code-0.14.0 → witan_code-0.15.0}/tests/conftest.py +0 -0
  22. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_batched_deletes.py +0 -0
  23. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_branches.py +0 -0
  24. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_bridge.py +0 -0
  25. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_chunked_load.py +0 -0
  26. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_cli_dispatch.py +0 -0
  27. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_cli_hooks.py +0 -0
  28. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_cli_output_format.py +0 -0
  29. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_config.py +0 -0
  30. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_config_targets.py +0 -0
  31. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_context.py +0 -0
  32. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_crossrepo.py +0 -0
  33. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_edges.py +0 -0
  34. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_elicit.py +0 -0
  35. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_enrichment.py +0 -0
  36. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_github_app.py +0 -0
  37. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_graph.py +0 -0
  38. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_hooks.py +0 -0
  39. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_identity.py +0 -0
  40. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_index_failure_diagnostics.py +0 -0
  41. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_indexer.py +0 -0
  42. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_indexer_scope.py +0 -0
  43. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_ingest.py +0 -0
  44. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_languages.py +0 -0
  45. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_maintenance.py +0 -0
  46. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_package_map.py +0 -0
  47. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_reaper.py +0 -0
  48. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_remote_proxy.py +0 -0
  49. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_remote_store.py +0 -0
  50. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_repo.py +0 -0
  51. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_server.py +0 -0
  52. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_stitch.py +0 -0
  53. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_store.py +0 -0
  54. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_symbol_table.py +0 -0
  55. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_tasks.py +0 -0
  56. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_tool_schema.py +0 -0
  57. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_views.py +0 -0
  58. {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_visualize.py +0 -0
  59. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/__init__.py +0 -0
  60. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/__main__.py +0 -0
  61. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/bridge.py +0 -0
  62. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/bridge_extractors.py +0 -0
  63. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/config.py +0 -0
  64. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/context.py +0 -0
  65. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/edges.py +0 -0
  66. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/elicit.py +0 -0
  67. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/extensions/pi/codegraph.ts +0 -0
  68. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/github_app.py +0 -0
  69. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/graph.py +0 -0
  70. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/hooks.py +0 -0
  71. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/identity.py +0 -0
  72. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/indexer.py +0 -0
  73. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/ingest.py +0 -0
  74. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/maintenance.py +0 -0
  75. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/output.py +0 -0
  76. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/package_map.py +0 -0
  77. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/bridge.gq +0 -0
  78. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/code_mutations.gq +0 -0
  79. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/code_read.gq +0 -0
  80. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/delete.gq +0 -0
  81. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/bash.scm +0 -0
  82. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/hcl.scm +0 -0
  83. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/python.scm +0 -0
  84. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/sql.scm +0 -0
  85. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/typescript.scm +0 -0
  86. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/yaml.scm +0 -0
  87. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/reaper.py +0 -0
  88. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/__init__.py +0 -0
  89. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/oidc.py +0 -0
  90. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/proxy.py +0 -0
  91. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/store.py +0 -0
  92. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/repo.py +0 -0
  93. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/schema/bridge-schema.pg +0 -0
  94. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/schema/code-schema.pg +0 -0
  95. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/server.py +0 -0
  96. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/setup.py +0 -0
  97. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/skills/witan-code/SKILL.md +0 -0
  98. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/stitch.py +0 -0
  99. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/store.py +0 -0
  100. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/views.py +0 -0
  101. {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/visualize.py +0 -0
@@ -6,6 +6,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/) (pre-1.0:
7
7
  a MINOR bump may include breaking changes).
8
8
 
9
+ ## [0.15.0] - 2026-08-21
10
+
11
+ ### Changed
12
+
13
+ - **Raised the `witan-core` floor to `>=0.32` — a RUNTIME floor.** `setup` now
14
+ calls `install_omnigraph(dry_run, strict=False)` to keep the old
15
+ keep-going-on-a-refusal behaviour, which witan-core 0.32.0 made opt-in when
16
+ it started raising `OmnigraphInstallFailed` by default (see witan-core's
17
+ CHANGELOG for why the CI callers needed that default). Anything below 0.32
18
+ has no `strict` parameter, so resolving below it is a `TypeError` **when
19
+ setup runs** — the module imports fine and every test passes, which is
20
+ exactly the case `just check-core-floor` documents itself as unable to catch.
21
+
22
+ No behaviour change for anyone: `setup` keeps going on a refused binary and
23
+ keeps printing the reason, as before.
24
+
25
+ 0.32, not the 0.31 this branch was authored against: agent-kit#276 took
26
+ 0.31.0 while this was open. This floor has now moved twice on rebase and the
27
+ pyproject line auto-merged silently both times, since both sides named the
28
+ same number — re-check it by hand on every rebase.
29
+
9
30
  ## [0.14.0] - 2026-08-21
10
31
 
11
32
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: witan-code
3
- Version: 0.14.0
3
+ Version: 0.15.0
4
4
  Summary: witan-code — tree-sitter code graph + cross-repo bridge (mounts under `witan code`)
5
5
  Project-URL: Homepage, https://github.com/mitodl/agent-kit/tree/main/mcp/servers/witan-code
6
6
  Project-URL: Repository, https://github.com/mitodl/agent-kit
@@ -26,7 +26,7 @@ Requires-Dist: tree-sitter-sql<0.4,>=0.3
26
26
  Requires-Dist: tree-sitter-typescript<0.24,>=0.23
27
27
  Requires-Dist: tree-sitter-yaml<0.8,>=0.7
28
28
  Requires-Dist: tree-sitter<0.26,>=0.25
29
- Requires-Dist: witan-core[cli,observability,remote,sentry]<1,>=0.31
29
+ Requires-Dist: witan-core[cli,observability,remote,sentry]<1,>=0.32
30
30
  Provides-Extra: tasks
31
31
  Requires-Dist: fastmcp-tasks<5,>=4.0.0b1; extra == 'tasks'
32
32
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "witan-code"
3
- version = "0.14.0"
3
+ version = "0.15.0"
4
4
  description = "witan-code — tree-sitter code graph + cross-repo bridge (mounts under `witan code`)"
5
5
  readme = "README.md"
6
6
  license = "BSD-3-Clause"
@@ -108,15 +108,20 @@ dependencies = [
108
108
  # self-describing failure and delivers half of one is the quiet wrongness
109
109
  # the two floors above were raised to avoid.
110
110
  #
111
- # ★ THE NUMBER MOVED 0.30 -> 0.31 ON REBASE, and that is the whole hazard
112
- # this note exists to flag. agent-kit#280 took 0.30.0 for unrelated work
113
- # while this branch was open, so the release carrying the diagnostics is
114
- # 0.31.0 — and a floor left at >=0.30 would resolve #280's release instead
115
- # and quietly deliver the half-message described above. `just
116
- # check-core-floor` cannot catch it: nothing new is imported, so the
117
- # clean-install import check passes at either number. Re-check this line by
118
- # hand whenever this branch is rebased.
119
- "witan-core[cli,remote,observability,sentry]>=0.31,<1",
111
+ # ★ >=0.32 IS THE FOURTH NON-IMPORT FLOOR, and the first RUNTIME one — a
112
+ # worked example of what `just check-core-floor` cannot see. `cli.setup`
113
+ # calls `install_omnigraph(dry_run, strict=False)`; anything below 0.32 has
114
+ # no `strict` parameter, so that is a TypeError raised WHEN SETUP RUNS — the
115
+ # module imports fine, every test passes, and the clean-install import check
116
+ # is green. Nothing catches this but the pin, which is why the pin says so.
117
+ # It subsumes the diagnostics reason above, which needed only >=0.31.
118
+ #
119
+ # ★ THIS NUMBER HAS MOVED TWICE ON REBASE — 0.30 -> 0.31 -> 0.32 — because
120
+ # agent-kit#280 then #276 each took the next witan-core release while these
121
+ # branches were open. Both times the pyproject line auto-merged without a
122
+ # conflict, since both sides named the same number. Re-check it by hand on
123
+ # every rebase; a floor one release low here is silent.
124
+ "witan-core[cli,remote,observability,sentry]>=0.32,<1",
120
125
  "fastmcp>=3.4.2,<5",
121
126
  "cyclopts>=4,<5",
122
127
  # [targets.<name>] override models (config.py) — also transitively pulled
@@ -200,7 +205,7 @@ testpaths = ["tests"]
200
205
  packages = ["witan_code"]
201
206
 
202
207
  [tool.bumpversion]
203
- current_version = "0.14.0"
208
+ current_version = "0.15.0"
204
209
  allow_dirty = true
205
210
 
206
211
  [[tool.bumpversion.files]]
@@ -101,3 +101,33 @@ def test_witan_code_bundle_includes_bundled_skills(tmp_path):
101
101
  bundle = setup.witan_code_bundle(pkg_dir, "tester")
102
102
 
103
103
  assert any(s.name == "witan-code" for s in bundle.skills)
104
+
105
+
106
+ def test_setup_does_not_abort_on_a_refused_omnigraph_binary(tmp_path, monkeypatch):
107
+ """★ Same contract as `witan setup`, and worth asserting separately.
108
+
109
+ The installer raises by default as of witan-core 0.30.0, which is right for
110
+ the workflow steps calling it through `python -c` — they used to swallow a
111
+ checksum refusal and exit 0. It is wrong for an interactive command that
112
+ also installs the agent bundles: aborting would cost the user those over a
113
+ binary they can install separately, and the refusal is printed either way.
114
+
115
+ `cli.setup` imports `install_omnigraph` inside the function body, so the
116
+ patch target is witan_core's own attribute rather than a module-level name
117
+ in cli.
118
+ """
119
+ import witan_core
120
+
121
+ from witan_code import cli
122
+
123
+ calls: list[dict] = []
124
+ monkeypatch.setattr(
125
+ witan_core,
126
+ "install_omnigraph",
127
+ lambda dry_run, **kwargs: calls.append({"dry_run": dry_run, **kwargs}),
128
+ )
129
+ monkeypatch.setattr(Path, "home", lambda: tmp_path)
130
+
131
+ cli.setup(agent="claude", author="tester")
132
+
133
+ assert calls == [{"dry_run": False, "strict": False}]
@@ -733,7 +733,10 @@ def setup(
733
733
  author = resolve_author(author)
734
734
 
735
735
  print("omnigraph binary")
736
- install_omnigraph(dry_run)
736
+ # strict=False, same reasoning as `witan setup`: a refused binary must not
737
+ # cost the user the agent bundles this command also installs. The installer
738
+ # prints the refusal regardless.
739
+ install_omnigraph(dry_run, strict=False)
737
740
 
738
741
  bundle = witan_code_bundle(pkg_dir, author)
739
742
 
File without changes
File without changes
File without changes
File without changes