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.
- tool_compass-2.5.2/.gitattributes +17 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/CHANGELOG.md +30 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/Dockerfile +10 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/PKG-INFO +14 -1
- {tool_compass-2.5.1 → tool_compass-2.5.2}/README.md +13 -0
- tool_compass-2.5.2/docker-entrypoint.sh +59 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/pyproject.toml +1 -1
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.dockerignore +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.env.example +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/dependabot.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/ci.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/publish.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/release-binaries.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.github/workflows/release.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.gitignore +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/.pre-commit-config.yaml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/CODE_OF_CONDUCT.md +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/CONTRIBUTING.md +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/LICENSE +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/Makefile +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/SCORECARD.md +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/SECURITY.md +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/SHIP_GATE.md +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/_version.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/analytics.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/backend_client_mcp.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/backend_client_simple.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/bootstrap.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/chain_indexer.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/cli.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/compass_config.example.json +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/config.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/docker-compose.yml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/docs/index.md +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/embedder.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/fly.toml +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/gateway.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/indexer.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/llms.txt +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/requirements-dev.txt +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/requirements.txt +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/check-org-urls.sh +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/regenerate-scorecard.sh +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/sync-version.mjs +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/scripts/verify-metrics.sh +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/sync_manager.py +0 -0
- {tool_compass-2.5.1 → tool_compass-2.5.2}/tool_manifest.py +0 -0
- {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.
|
|
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 "$@"
|
|
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
|