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.
- {witan_code-0.14.0 → witan_code-0.15.0}/CHANGELOG.md +21 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/PKG-INFO +2 -2
- {witan_code-0.14.0 → witan_code-0.15.0}/pyproject.toml +16 -11
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_setup.py +30 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/cli.py +4 -1
- {witan_code-0.14.0 → witan_code-0.15.0}/.gitignore +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/README.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/config/claude.json +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/config/copilot.json +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/config/pi.json +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/BRANCH_INDEXING.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/CLI_REFERENCE.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/EDGE_PRECISION_TIERS.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/PACKAGE_MAP.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/STAGE2_STITCHING.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/SYMBOL_FORMAT.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/SYMBOL_TABLE.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/docs/USER_GUIDE.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/install.sh +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/__init__.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/conftest.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_batched_deletes.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_branches.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_bridge.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_chunked_load.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_cli_dispatch.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_cli_hooks.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_cli_output_format.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_config.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_config_targets.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_context.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_crossrepo.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_edges.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_elicit.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_enrichment.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_github_app.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_graph.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_hooks.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_identity.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_index_failure_diagnostics.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_indexer.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_indexer_scope.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_ingest.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_languages.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_maintenance.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_package_map.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_reaper.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_remote_proxy.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_remote_store.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_repo.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_server.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_stitch.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_store.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_symbol_table.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_tasks.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_tool_schema.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_views.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/tests/test_visualize.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/__init__.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/__main__.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/bridge.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/bridge_extractors.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/config.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/context.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/edges.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/elicit.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/extensions/pi/codegraph.ts +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/github_app.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/graph.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/hooks.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/identity.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/indexer.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/ingest.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/maintenance.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/output.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/package_map.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/bridge.gq +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/code_mutations.gq +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/code_read.gq +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries/delete.gq +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/bash.scm +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/hcl.scm +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/python.scm +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/sql.scm +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/typescript.scm +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/queries_ts/yaml.scm +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/reaper.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/__init__.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/oidc.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/proxy.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/remote/store.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/repo.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/schema/bridge-schema.pg +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/schema/code-schema.pg +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/server.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/setup.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/skills/witan-code/SKILL.md +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/stitch.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/store.py +0 -0
- {witan_code-0.14.0 → witan_code-0.15.0}/witan_code/views.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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
|
-
# ★
|
|
112
|
-
#
|
|
113
|
-
#
|
|
114
|
-
#
|
|
115
|
-
#
|
|
116
|
-
#
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|