tool-compass 2.5.1__tar.gz → 2.5.2__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 (50) hide show
  1. tool_compass-2.5.2/.gitattributes +17 -0
  2. {tool_compass-2.5.1 → tool_compass-2.5.2}/CHANGELOG.md +30 -0
  3. {tool_compass-2.5.1 → tool_compass-2.5.2}/Dockerfile +10 -0
  4. {tool_compass-2.5.1 → tool_compass-2.5.2}/PKG-INFO +14 -1
  5. {tool_compass-2.5.1 → tool_compass-2.5.2}/README.md +13 -0
  6. tool_compass-2.5.2/docker-entrypoint.sh +59 -0
  7. {tool_compass-2.5.1 → tool_compass-2.5.2}/pyproject.toml +1 -1
  8. {tool_compass-2.5.1 → tool_compass-2.5.2}/.dockerignore +0 -0
  9. {tool_compass-2.5.1 → tool_compass-2.5.2}/.env.example +0 -0
  10. {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  11. {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  12. {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/dependabot.yml +0 -0
  13. {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/ci.yml +0 -0
  14. {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/publish.yml +0 -0
  15. {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/release-binaries.yml +0 -0
  16. {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/release.yml +0 -0
  17. {tool_compass-2.5.1 → tool_compass-2.5.2}/.gitignore +0 -0
  18. {tool_compass-2.5.1 → tool_compass-2.5.2}/.pre-commit-config.yaml +0 -0
  19. {tool_compass-2.5.1 → tool_compass-2.5.2}/CODE_OF_CONDUCT.md +0 -0
  20. {tool_compass-2.5.1 → tool_compass-2.5.2}/CONTRIBUTING.md +0 -0
  21. {tool_compass-2.5.1 → tool_compass-2.5.2}/LICENSE +0 -0
  22. {tool_compass-2.5.1 → tool_compass-2.5.2}/Makefile +0 -0
  23. {tool_compass-2.5.1 → tool_compass-2.5.2}/SCORECARD.md +0 -0
  24. {tool_compass-2.5.1 → tool_compass-2.5.2}/SECURITY.md +0 -0
  25. {tool_compass-2.5.1 → tool_compass-2.5.2}/SHIP_GATE.md +0 -0
  26. {tool_compass-2.5.1 → tool_compass-2.5.2}/_version.py +0 -0
  27. {tool_compass-2.5.1 → tool_compass-2.5.2}/analytics.py +0 -0
  28. {tool_compass-2.5.1 → tool_compass-2.5.2}/backend_client_mcp.py +0 -0
  29. {tool_compass-2.5.1 → tool_compass-2.5.2}/backend_client_simple.py +0 -0
  30. {tool_compass-2.5.1 → tool_compass-2.5.2}/bootstrap.py +0 -0
  31. {tool_compass-2.5.1 → tool_compass-2.5.2}/chain_indexer.py +0 -0
  32. {tool_compass-2.5.1 → tool_compass-2.5.2}/cli.py +0 -0
  33. {tool_compass-2.5.1 → tool_compass-2.5.2}/compass_config.example.json +0 -0
  34. {tool_compass-2.5.1 → tool_compass-2.5.2}/config.py +0 -0
  35. {tool_compass-2.5.1 → tool_compass-2.5.2}/docker-compose.yml +0 -0
  36. {tool_compass-2.5.1 → tool_compass-2.5.2}/docs/index.md +0 -0
  37. {tool_compass-2.5.1 → tool_compass-2.5.2}/embedder.py +0 -0
  38. {tool_compass-2.5.1 → tool_compass-2.5.2}/fly.toml +0 -0
  39. {tool_compass-2.5.1 → tool_compass-2.5.2}/gateway.py +0 -0
  40. {tool_compass-2.5.1 → tool_compass-2.5.2}/indexer.py +0 -0
  41. {tool_compass-2.5.1 → tool_compass-2.5.2}/llms.txt +0 -0
  42. {tool_compass-2.5.1 → tool_compass-2.5.2}/requirements-dev.txt +0 -0
  43. {tool_compass-2.5.1 → tool_compass-2.5.2}/requirements.txt +0 -0
  44. {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/check-org-urls.sh +0 -0
  45. {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/regenerate-scorecard.sh +0 -0
  46. {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/sync-version.mjs +0 -0
  47. {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/verify-metrics.sh +0 -0
  48. {tool_compass-2.5.1 → tool_compass-2.5.2}/sync_manager.py +0 -0
  49. {tool_compass-2.5.1 → tool_compass-2.5.2}/tool_manifest.py +0 -0
  50. {tool_compass-2.5.1 → tool_compass-2.5.2}/ui.py +0 -0
@@ -0,0 +1,17 @@
1
+ # Shell scripts and the Dockerfile MUST keep LF, on every platform.
2
+ #
3
+ # Earned on the sibling xrpl-camp repo the same day this landed: an entrypoint
4
+ # script checked out with CRLF on Windows (core.autocrlf) makes the shebang
5
+ # `#!/bin/sh\r`, and Linux then tries to exec an interpreter literally named
6
+ # `/bin/sh\r`. It fails with "no such file or directory" naming the SCRIPT, so
7
+ # it reads like a missing file rather than a line-ending problem.
8
+ #
9
+ # CI never catches it -- a Linux runner checks out LF and builds fine. Only a
10
+ # contributor building the image on Windows hits it, which is the worst place
11
+ # for a defect to live: invisible to the people who could fix it.
12
+ *.sh text eol=lf
13
+ Dockerfile text eol=lf
14
+ docker-entrypoint.sh text eol=lf
15
+
16
+ # Keep the rest normalised in the repo and native in the working tree.
17
+ * text=auto
@@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.5.2] - 2026-09-09
11
+
12
+ ### Added
13
+
14
+ - The container now warns when `/app/tool_compass/db` is not a mounted volume.
15
+ The semantic index lives there, and building it means embedding every tool in
16
+ every configured server — without a volume that work is discarded when the
17
+ container exits and paid again on the next start, which reads as "Tool
18
+ Compass is slow" rather than as a missing flag. `docker-compose.yml` already
19
+ mounts the `compass-data` named volume, so this only ever fires on the bare
20
+ `docker run ghcr.io/...` path, which is what someone trying the published
21
+ image reaches for first.
22
+
23
+ The warning goes to **stderr**, so it cannot corrupt anything piping the
24
+ container's output. `publish.yml`'s post-publish handshake uses
25
+ `--entrypoint tool-compass`, which overrides the entrypoint entirely and is
26
+ unaffected; verified against both stage CMDs.
27
+
28
+ - README documents running the published image directly with a volume, not
29
+ only the clone-and-compose path.
30
+
31
+ ### Fixed
32
+
33
+ - `.gitattributes` pins LF on `*.sh`, the `Dockerfile` and the entrypoint. A
34
+ shell script checked out with CRLF on Windows makes the shebang
35
+ `#!/bin/sh
36
+ the script rather than the line endings — invisible to CI, which checks out
37
+ LF on Linux, and visible only to a contributor building the image on Windows.
38
+ Caught on the sibling xrpl-camp repo the same day.
39
+
10
40
  ## [2.5.1] - 2026-09-09
11
41
 
12
42
  Dogfood swarm `swarm-1788918264-9859` — health Stages A–D, a 23-item
@@ -84,6 +84,16 @@ ENV PYTHONUNBUFFERED=1 \
84
84
  # Expose Gradio UI port
85
85
  EXPOSE 7860
86
86
 
87
+ # Warn when the index directory is not a volume. The compose file mounts
88
+ # `compass-data` so compose users never see it; this is for the bare
89
+ # `docker run ghcr.io/...` path, which has no volume and silently rebuilds the
90
+ # index on every start. `exec "$@"` so BOTH stage CMDs (ui.py here, gateway.py
91
+ # in mcp-gateway below) pass through unchanged, and so
92
+ # `--entrypoint tool-compass` in publish.yml's post-publish handshake still
93
+ # overrides it cleanly.
94
+ COPY --chmod=0755 docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
95
+ ENTRYPOINT ["docker-entrypoint.sh"]
96
+
87
97
  # Switch to non-root user
88
98
  USER compass
89
99
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tool-compass
3
- Version: 2.5.1
3
+ Version: 2.5.2
4
4
  Summary: Semantic MCP tool discovery gateway - find tools by intent, not memory
5
5
  Project-URL: Homepage, https://github.com/mcp-tool-shop-org/tool-compass
6
6
  Project-URL: Documentation, https://github.com/mcp-tool-shop-org/tool-compass#readme
@@ -152,6 +152,19 @@ docker-compose --profile with-ollama up
152
152
  # Access the UI at http://localhost:7860
153
153
  ```
154
154
 
155
+ Or run the published image directly, without cloning:
156
+
157
+ ```bash
158
+ docker run --rm -p 7860:7860 -v tool-compass-data:/app/tool_compass/db ghcr.io/mcp-tool-shop-org/tool-compass:latest
159
+ ```
160
+
161
+ > **Mount the volume.** The semantic index lives in `/app/tool_compass/db`, and
162
+ > building it means embedding every tool in every configured server. Without a
163
+ > volume that work is thrown away when the container exits and paid again on the
164
+ > next start — which reads as "Tool Compass is slow" rather than as a missing
165
+ > flag. The image warns you if you forget. `docker compose up` already mounts a
166
+ > named volume, so this only applies to bare `docker run`.
167
+
155
168
  > The GHCR image (`ghcr.io/mcp-tool-shop-org/tool-compass`) supports
156
169
  > `linux/amd64` and `linux/arm64`, so the same tag runs on x86_64 servers
157
170
  > and Apple Silicon / ARM workstations.
@@ -107,6 +107,19 @@ docker-compose --profile with-ollama up
107
107
  # Access the UI at http://localhost:7860
108
108
  ```
109
109
 
110
+ Or run the published image directly, without cloning:
111
+
112
+ ```bash
113
+ docker run --rm -p 7860:7860 -v tool-compass-data:/app/tool_compass/db ghcr.io/mcp-tool-shop-org/tool-compass:latest
114
+ ```
115
+
116
+ > **Mount the volume.** The semantic index lives in `/app/tool_compass/db`, and
117
+ > building it means embedding every tool in every configured server. Without a
118
+ > volume that work is thrown away when the container exits and paid again on the
119
+ > next start — which reads as "Tool Compass is slow" rather than as a missing
120
+ > flag. The image warns you if you forget. `docker compose up` already mounts a
121
+ > named volume, so this only applies to bare `docker run`.
122
+
110
123
  > The GHCR image (`ghcr.io/mcp-tool-shop-org/tool-compass`) supports
111
124
  > `linux/amd64` and `linux/arm64`, so the same tag runs on x86_64 servers
112
125
  > and Apple Silicon / ARM workstations.
@@ -0,0 +1,59 @@
1
+ #!/bin/sh
2
+ # Say out loud whether the semantic index will survive this container.
3
+ #
4
+ # Tool Compass's value is the index: embedding every tool in every configured
5
+ # MCP server takes real time and real compute, and the result lives in
6
+ # /app/tool_compass/db. Without a volume that directory is ordinary container
7
+ # filesystem, so the index is discarded when the container exits and rebuilt
8
+ # from scratch on the next start -- which looks like "Tool Compass is slow",
9
+ # not like "you forgot a -v".
10
+ #
11
+ # docker-compose.yml already mounts the `compass-data` named volume, so compose
12
+ # users are fine. This exists for the bare `docker run ghcr.io/...` path, which
13
+ # is what someone trying the published image reaches for first and which has no
14
+ # volume at all.
15
+ #
16
+ # A warning rather than a refusal: `--version`, `--help` and a one-off query
17
+ # are all legitimate without persistence, and a container that refuses to start
18
+ # is a worse first experience than one that tells you what it is about to do.
19
+ #
20
+ # stderr, deliberately. This is a warning about the environment, not output of
21
+ # the command being run -- on stdout it corrupts anything piping the container,
22
+ # which is how the sibling xrpl-camp image broke its own release check.
23
+
24
+ set -eu
25
+
26
+ DATA_DIR="${TOOL_COMPASS_DB_DIR:-/app/tool_compass/db}"
27
+
28
+ is_mounted() {
29
+ # A bind mount or named volume puts DATA_DIR on a different device from /.
30
+ # Compare the two rather than reading a mount table, which is not reliably
31
+ # readable inside the container.
32
+ root_dev=$(stat -c %d / 2>/dev/null || echo 0)
33
+ data_dev=$(stat -c %d "$DATA_DIR" 2>/dev/null || echo 0)
34
+ [ "$root_dev" != "$data_dev" ]
35
+ }
36
+
37
+ if [ -d "$DATA_DIR" ] && ! is_mounted; then
38
+ printf '\033[33m' >&2
39
+ cat >&2 <<WARNING
40
+ ${DATA_DIR} is not mounted.
41
+
42
+ Tool Compass keeps its semantic index there. Without a volume the index is
43
+ discarded when this container exits, and every start pays the full embedding
44
+ cost again -- which reads as "it is slow" rather than as a missing flag.
45
+
46
+ Keep it between runs:
47
+
48
+ docker run --rm -p 7860:7860 -v tool-compass-data:${DATA_DIR} \\
49
+ ghcr.io/mcp-tool-shop-org/tool-compass:latest
50
+
51
+ Or use the compose file, which already mounts a named volume:
52
+
53
+ docker compose up
54
+
55
+ WARNING
56
+ printf '\033[0m' >&2
57
+ fi
58
+
59
+ exec "$@"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "tool-compass"
7
- version = "2.5.1"
7
+ version = "2.5.2"
8
8
  description = "Semantic MCP tool discovery gateway - find tools by intent, not memory"
9
9
  readme = "README.md"
10
10
  license = "MIT"
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