@event4u/agent-config 1.40.0 → 1.41.1
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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +48 -0
- package/README.md +47 -21
- package/docs/DISTRIBUTION_CHECKLIST.md +2 -2
- package/docs/catalog.md +4 -3
- package/docs/contracts/file-ownership-matrix.json +27 -0
- package/docs/contracts/mcp-discovery-phase-notice.md +60 -0
- package/docs/contracts/mcp-tool-stub-envelope.md +78 -0
- package/docs/getting-started.md +1 -1
- package/docs/setup/mcp-client-config.md +94 -13
- package/docs/setup/mcp-cloud-setup.md +32 -1
- package/docs/setup/per-ide/claude-desktop.md +32 -7
- package/package.json +1 -1
- package/scripts/_lib/script_output.py +15 -11
- package/scripts/ai_council/session.py +14 -8
- package/scripts/chat_history.py +29 -53
- package/scripts/command_suggester/settings.py +15 -13
- package/scripts/compile_router.py +13 -9
- package/scripts/compress.py +22 -19
- package/scripts/council_cli.py +9 -3
- package/scripts/mcp_parity_smoke.py +20 -2
- package/scripts/mcp_server/catalog.py +125 -0
- package/scripts/mcp_server/consumer_tool_catalog.json +275 -0
- package/scripts/mcp_server/telemetry.py +128 -0
- package/scripts/mcp_server/tools.py +474 -15
- package/scripts/mcp_telemetry_health.py +214 -0
- package/scripts/mcp_telemetry_query.py +203 -0
- package/scripts/mcp_telemetry_store.py +211 -0
- package/scripts/memory_signal.py +12 -10
- package/scripts/pack_mcp_content.py +18 -4
- package/templates/claude_desktop_config.json.template +4 -3
|
@@ -41,6 +41,7 @@ from typing import Any
|
|
|
41
41
|
_SCRIPTS_DIR = Path(__file__).resolve().parent
|
|
42
42
|
sys.path.insert(0, str(_SCRIPTS_DIR))
|
|
43
43
|
|
|
44
|
+
from mcp_server.catalog import load_raw as load_tool_catalog_raw # noqa: E402
|
|
44
45
|
from mcp_server.prompts import scan_commands, scan_skills # noqa: E402
|
|
45
46
|
from mcp_server.resources import scan_contexts, scan_guidelines, scan_rules # noqa: E402
|
|
46
47
|
|
|
@@ -130,11 +131,15 @@ def _collect_entries(root: Path) -> tuple[dict[str, dict[str, Any]], list[str]]:
|
|
|
130
131
|
return uris, errors
|
|
131
132
|
|
|
132
133
|
|
|
133
|
-
def _content_signature(
|
|
134
|
-
|
|
134
|
+
def _content_signature(
|
|
135
|
+
uris: dict[str, dict[str, Any]],
|
|
136
|
+
tool_catalog: dict[str, Any],
|
|
137
|
+
) -> tuple[str, str]:
|
|
138
|
+
"""SHA-256 over sorted (uri, body) pairs plus the tool catalog JSON.
|
|
135
139
|
|
|
136
140
|
Returns (full_hex, 12-char prefix). The prefix is the wire-surface
|
|
137
141
|
`skillSetSignature`; the full hex is the diagnostic `content_hash_sha256`.
|
|
142
|
+
Including the catalog ensures a stub edit produces a new release_key.
|
|
138
143
|
"""
|
|
139
144
|
hasher = hashlib.sha256()
|
|
140
145
|
for uri in sorted(uris):
|
|
@@ -142,6 +147,10 @@ def _content_signature(uris: dict[str, dict[str, Any]]) -> tuple[str, str]:
|
|
|
142
147
|
hasher.update(b"\x00")
|
|
143
148
|
hasher.update(uris[uri]["body"].encode("utf-8"))
|
|
144
149
|
hasher.update(b"\x1e")
|
|
150
|
+
hasher.update(b"\x1d")
|
|
151
|
+
hasher.update(
|
|
152
|
+
json.dumps(tool_catalog, ensure_ascii=False, sort_keys=True).encode("utf-8")
|
|
153
|
+
)
|
|
145
154
|
digest = hasher.hexdigest()
|
|
146
155
|
return digest, digest[:12]
|
|
147
156
|
|
|
@@ -164,6 +173,7 @@ def _build_manifest(
|
|
|
164
173
|
git_sha: str,
|
|
165
174
|
built_at: str,
|
|
166
175
|
counts: dict[str, int],
|
|
176
|
+
tool_count: int,
|
|
167
177
|
) -> dict[str, Any]:
|
|
168
178
|
short = git_sha[:7] if git_sha and git_sha != "0" * 40 else "unknown"
|
|
169
179
|
return {
|
|
@@ -176,6 +186,7 @@ def _build_manifest(
|
|
|
176
186
|
"built_at": built_at,
|
|
177
187
|
"packer_version": PACKER_VERSION,
|
|
178
188
|
"content_uri_count": counts,
|
|
189
|
+
"tool_count": tool_count,
|
|
179
190
|
}
|
|
180
191
|
|
|
181
192
|
|
|
@@ -188,7 +199,8 @@ def pack(root: Path, out_dir: Path) -> dict[str, Any]:
|
|
|
188
199
|
sys.stderr.write(f" - {line}\n")
|
|
189
200
|
raise SystemExit(2)
|
|
190
201
|
|
|
191
|
-
|
|
202
|
+
tool_catalog = load_tool_catalog_raw()
|
|
203
|
+
content_hash, signature = _content_signature(uris, tool_catalog)
|
|
192
204
|
counts = _count_kinds(uris)
|
|
193
205
|
built_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
194
206
|
manifest = _build_manifest(
|
|
@@ -198,11 +210,13 @@ def pack(root: Path, out_dir: Path) -> dict[str, Any]:
|
|
|
198
210
|
git_sha=_git_sha(root),
|
|
199
211
|
built_at=built_at,
|
|
200
212
|
counts=counts,
|
|
213
|
+
tool_count=len(tool_catalog.get("tools", [])),
|
|
201
214
|
)
|
|
202
215
|
|
|
203
216
|
blob = {
|
|
204
217
|
"schema_version": SCHEMA_VERSION,
|
|
205
218
|
"uris": uris,
|
|
219
|
+
"tool_catalog": tool_catalog,
|
|
206
220
|
"manifest": manifest,
|
|
207
221
|
}
|
|
208
222
|
# Compact JSON for the bundle (saves ~20 KB vs indent=2). The R2
|
|
@@ -265,7 +279,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
265
279
|
f"release={manifest['release_key']} "
|
|
266
280
|
f"skills={c['skill']} commands={c['command']} "
|
|
267
281
|
f"rules={c['rule']} guidelines={c['guideline']} "
|
|
268
|
-
f"contexts={c['context']}\n"
|
|
282
|
+
f"contexts={c['context']} tools={manifest['tool_count']}\n"
|
|
269
283
|
)
|
|
270
284
|
return 0
|
|
271
285
|
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
"//3": " Windows %APPDATA%\\Claude\\claude_desktop_config.json",
|
|
6
6
|
"//4": " Linux ~/.config/Claude/claude_desktop_config.json",
|
|
7
7
|
"//5": "Strip the leading '_disabled_' prefix on the mcpServers entry below to enable the MCP connector.",
|
|
8
|
-
"//6": "
|
|
9
|
-
"//7": "
|
|
8
|
+
"//6": "Replace https://your-worker.workers.dev with the URL of your own deployed Cloudflare Worker (see docs/setup/mcp-cloud-setup.md). The Worker is read-only and identity-stable per release; full client setup details in docs/setup/mcp-client-config.md.",
|
|
9
|
+
"//7": "If your Worker has MCP-Token set (recommended), uncomment the --header / env lines below and paste the token. Otherwise drop them.",
|
|
10
|
+
"//8": "Restart Claude Desktop fully (Cmd+Q on macOS) after editing — the menubar process keeps the old config cached otherwise.",
|
|
10
11
|
|
|
11
12
|
"_disabled_mcpServers": {
|
|
12
13
|
"agent-config": {
|
|
@@ -14,7 +15,7 @@
|
|
|
14
15
|
"args": [
|
|
15
16
|
"-y",
|
|
16
17
|
"mcp-remote",
|
|
17
|
-
"https://
|
|
18
|
+
"https://your-worker.workers.dev"
|
|
18
19
|
]
|
|
19
20
|
}
|
|
20
21
|
}
|