agentcheckup 0.4.1__tar.gz → 0.4.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.
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/CHANGELOG.md +18 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/PKG-INFO +6 -5
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/README.md +5 -4
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/README.zh-CN.md +2 -1
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/pyproject.toml +1 -1
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/conflicts.py +5 -3
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/report.py +1 -1
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.gitattributes +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.github/ISSUE_TEMPLATE/rule_request.yml +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.github/pull_request_template.md +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.github/workflows/action-selftest.yml +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.github/workflows/ci.yml +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.github/workflows/publish.yml +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/.gitignore +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/CODE_OF_CONDUCT.md +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/CONTRIBUTING.md +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/LICENSE +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/Makefile +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/SECURITY.md +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/action.yml +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/conftest.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/docs/github-action.md +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/docs/rules.md +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/scripts/bootstrap.ps1 +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/scripts/bootstrap.sh +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/__init__.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/__main__.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/cli.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/discovery.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/engine.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/loader.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/models.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/__init__.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/base.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/config_rules.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/docs.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/injection.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/naming.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/safety.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/rules/schema.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/src/agentcheckup/tokens.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/fixtures/bad_tools.json +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/fixtures/ci_config.json +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/fixtures/claude_desktop_config.json +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/fixtures/good_tools.json +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/fixtures/mock_server.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/test_cli.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/test_conflicts.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/test_discovery.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/test_registry.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/test_rules.py +0 -0
- {agentcheckup-0.4.1 → agentcheckup-0.4.2}/tests/test_scoring.py +0 -0
|
@@ -9,6 +9,24 @@ new ids, and removing a rule is a breaking change.
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [0.4.2] - 2026-11-07
|
|
13
|
+
|
|
14
|
+
Three claims the tool made that it had not earned. All were found by an external
|
|
15
|
+
review of the README and the report text, not by a bug report.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **`AGT201` no longer asserts what the client does.** The hint said "the client
|
|
20
|
+
keeps one and the other is unreachable". No client was ever tested; the
|
|
21
|
+
behaviour differs between clients and some namespace the tools instead. The
|
|
22
|
+
message now says the call can reach either one and that clients resolve it
|
|
23
|
+
differently, which is true without a test.
|
|
24
|
+
- **README no longer claims "No network calls, ever."** agentcheckup makes none
|
|
25
|
+
of its own, but `audit` starts every server in your config, and those processes
|
|
26
|
+
can do whatever they were written to do. The claim now names that boundary and
|
|
27
|
+
points at `--no-spawn`.
|
|
28
|
+
- **README said 27 config locations; there are 26.** Both languages.
|
|
29
|
+
|
|
12
30
|
## [0.4.1] - 2026-11-07
|
|
13
31
|
|
|
14
32
|
Both fixes came out of an external fact-check of the project, not from a bug
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentcheckup
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: Diagnose your agent setup: tool conflicts, risky config, context budget.
|
|
5
5
|
Project-URL: Homepage, https://github.com/wanjiaqing/agentcheckup
|
|
6
6
|
Project-URL: Issues, https://github.com/wanjiaqing/agentcheckup/issues
|
|
@@ -114,7 +114,7 @@ no network calls. It reads JSON, starts processes, prints text.
|
|
|
114
114
|
agentcheckup
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
-
Finds your configs automatically —
|
|
117
|
+
Finds your configs automatically — 26 known locations across Claude Desktop,
|
|
118
118
|
Claude Code (including its per-project `mcpServers`), Cursor, VS Code, Cline,
|
|
119
119
|
Roo Code, Kilo Code, Windsurf, Zed, Codex CLI and Continue, plus project-local
|
|
120
120
|
`.mcp.json` / `.cursor/mcp.json` / `.vscode/mcp.json` — starts each server,
|
|
@@ -149,7 +149,7 @@ The fastest way to keep a manifest from regressing, and the version you pin is
|
|
|
149
149
|
the version you run — the action installs from its own checkout.
|
|
150
150
|
|
|
151
151
|
```yaml
|
|
152
|
-
- uses: wanjiaqing/agentcheckup@v0.4.
|
|
152
|
+
- uses: wanjiaqing/agentcheckup@v0.4.2
|
|
153
153
|
with:
|
|
154
154
|
config: .mcp.json
|
|
155
155
|
fail-on: warning
|
|
@@ -238,8 +238,9 @@ rule. A report nobody can read is a report nobody acts on.
|
|
|
238
238
|
to ignore the output.
|
|
239
239
|
- **Degrade, don't die.** A server that will not start is one finding, not an
|
|
240
240
|
aborted run.
|
|
241
|
-
- **No network calls
|
|
242
|
-
|
|
241
|
+
- **No network calls of its own.** No telemetry, no API, no upload; your config
|
|
242
|
+
never leaves the machine. It does *start* the servers you configured, and those
|
|
243
|
+
can do whatever they were written to do — `--no-spawn` skips that entirely.
|
|
243
244
|
- **Heuristics are labelled as heuristics.** `info` means "a human should
|
|
244
245
|
decide". The score is a conversation starter, not a certification.
|
|
245
246
|
|
|
@@ -86,7 +86,7 @@ no network calls. It reads JSON, starts processes, prints text.
|
|
|
86
86
|
agentcheckup
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
Finds your configs automatically —
|
|
89
|
+
Finds your configs automatically — 26 known locations across Claude Desktop,
|
|
90
90
|
Claude Code (including its per-project `mcpServers`), Cursor, VS Code, Cline,
|
|
91
91
|
Roo Code, Kilo Code, Windsurf, Zed, Codex CLI and Continue, plus project-local
|
|
92
92
|
`.mcp.json` / `.cursor/mcp.json` / `.vscode/mcp.json` — starts each server,
|
|
@@ -121,7 +121,7 @@ The fastest way to keep a manifest from regressing, and the version you pin is
|
|
|
121
121
|
the version you run — the action installs from its own checkout.
|
|
122
122
|
|
|
123
123
|
```yaml
|
|
124
|
-
- uses: wanjiaqing/agentcheckup@v0.4.
|
|
124
|
+
- uses: wanjiaqing/agentcheckup@v0.4.2
|
|
125
125
|
with:
|
|
126
126
|
config: .mcp.json
|
|
127
127
|
fail-on: warning
|
|
@@ -210,8 +210,9 @@ rule. A report nobody can read is a report nobody acts on.
|
|
|
210
210
|
to ignore the output.
|
|
211
211
|
- **Degrade, don't die.** A server that will not start is one finding, not an
|
|
212
212
|
aborted run.
|
|
213
|
-
- **No network calls
|
|
214
|
-
|
|
213
|
+
- **No network calls of its own.** No telemetry, no API, no upload; your config
|
|
214
|
+
never leaves the machine. It does *start* the servers you configured, and those
|
|
215
|
+
can do whatever they were written to do — `--no-spawn` skips that entirely.
|
|
215
216
|
- **Heuristics are labelled as heuristics.** `info` means "a human should
|
|
216
217
|
decide". The score is a conversation starter, not a certification.
|
|
217
218
|
|
|
@@ -155,7 +155,8 @@ agentcheckup rules # 列出全部规则
|
|
|
155
155
|
- **规则编号永久不变。** `AGT201` 的含义永远不变。
|
|
156
156
|
- **每条发现都带修法。** 只说「这不好」的规则,训练用户忽略输出。
|
|
157
157
|
- **降级而不是崩溃。** 起不来的 server 是一条发现,不是中断。
|
|
158
|
-
-
|
|
158
|
+
- **自己不联网。** 没有遥测、没有 API、不上传任何东西,配置不会离开本机。
|
|
159
|
+
但它会**启动你配置的 server**,那些进程会做什么取决于它们自己——`--no-spawn` 可完全跳过。
|
|
159
160
|
- **启发式要标明是启发式。** `info` 的意思是「人来判断」。分数是讨论起点,不是认证。
|
|
160
161
|
|
|
161
162
|
## 这不是什么
|
|
@@ -187,7 +187,8 @@ def detect_conflicts(
|
|
|
187
187
|
name_a = a.tool.name.lower()
|
|
188
188
|
name_b = b.tool.name.lower()
|
|
189
189
|
|
|
190
|
-
# Hard collision: identical names, different servers.
|
|
190
|
+
# Hard collision: identical names, different servers. What the client
|
|
191
|
+
# does about it varies, so the message must not promise a specific outcome.
|
|
191
192
|
if name_a == name_b:
|
|
192
193
|
conflicts.append(
|
|
193
194
|
Conflict(
|
|
@@ -201,8 +202,9 @@ def detect_conflicts(
|
|
|
201
202
|
f"'{a.server}' and '{b.server}'."
|
|
202
203
|
),
|
|
203
204
|
hint=(
|
|
204
|
-
"
|
|
205
|
-
"
|
|
205
|
+
"Two servers expose the same name and clients resolve that "
|
|
206
|
+
"differently, so the same call can reach either one. Rename "
|
|
207
|
+
"one, or use a gateway that prefixes."
|
|
206
208
|
),
|
|
207
209
|
)
|
|
208
210
|
)
|
|
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
|