@dotdotgod/hermes 0.6.5 → 0.6.7
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/README.md +8 -5
- package/__init__.py +5 -9
- package/mcp/cli.mjs +534 -299
- package/mcp/parsers/TYPESCRIPT_LICENSE +21 -0
- package/mcp/parsers/tree-sitter-tsx.wasm +0 -0
- package/mcp/parsers/tree-sitter-typescript.wasm +0 -0
- package/mcp/server.mjs +245 -86
- package/mcp/tools.json +110 -24
- package/package.json +2 -2
- package/plugin.yaml +33 -1
- package/policy.py +1 -1
- package/runtime.py +11 -11
- package/skills/document-clarify/SKILL.md +1 -1
- package/skills/impact-review/SKILL.md +1 -1
- package/skills/project-initializer/SKILL.md +1 -1
- package/skills/project-initializer/references/agent-docs.md +1 -0
- package/skills/project-load/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ Missing parents and changed senders do not deny tools. Impact interception needs
|
|
|
52
52
|
known project state; nested host calls omitting it cannot be attributed reliably.
|
|
53
53
|
|
|
54
54
|
Any host session may select a configured label or an existing absolute directory
|
|
55
|
-
using
|
|
55
|
+
using select_root. Legacy gateway_access settings are ignored.
|
|
56
56
|
Dotdotgod imposes no filesystem-area restrictions. Gateway operators must rely
|
|
57
57
|
on host permissions and OS isolation, not plugin labels, for access control.
|
|
58
58
|
CLI starts at the launch directory; optional cli_root sets its repository.
|
|
@@ -73,15 +73,18 @@ project data; context scope/session filters are not access-control lists.
|
|
|
73
73
|
|
|
74
74
|
- Generated project-initializer, project-load, impact-review and document-clarify
|
|
75
75
|
skills from canonical shared sources.
|
|
76
|
-
- Automatic load-required instructions; call
|
|
76
|
+
- Automatic load-required instructions; call project_load once with an
|
|
77
77
|
agent-selected focus and continue the original request. Explicit load uses the
|
|
78
78
|
same tool/skill; full map depth is 5, focused map depth 3 with up to 30 query hits.
|
|
79
79
|
- `dd:no-load` in a request skips only that request's automatic load instruction.
|
|
80
80
|
- Explicit/fuzzy reference evidence via the bundled CLI; no full auto-validation.
|
|
81
|
-
- Native
|
|
81
|
+
- Native execution/context/operations tools backed by per-session MCP, with shared
|
|
82
|
+
unprefixed catalog names in the dotdotgod toolset and no forwarding aliases.
|
|
82
83
|
They return a JSON envelope with content and structuredContent. Do not parse the
|
|
83
|
-
Markdown content as JSON or assume
|
|
84
|
-
-
|
|
84
|
+
Markdown content as JSON or assume an unwrapped service-object contract.
|
|
85
|
+
- select_root and impact_status are adapter-local tools; the shared impact_status
|
|
86
|
+
entry is not registered twice. There are twenty unique tools. Reload the plugin
|
|
87
|
+
after upgrading and update saved calls; old prefixed names are unsupported.
|
|
85
88
|
- Pending impact is derived from Git dirty/untracked fingerprints and durable
|
|
86
89
|
checked fingerprints. Successful checks clear only checked, unchanged paths.
|
|
87
90
|
Source edits reopen pending state; reads and impact checks remain available.
|
package/__init__.py
CHANGED
|
@@ -4,12 +4,6 @@ from pathlib import Path
|
|
|
4
4
|
|
|
5
5
|
from .runtime import Runtime
|
|
6
6
|
|
|
7
|
-
NAMES = {
|
|
8
|
-
"index": "dotdotgod_context_index", "search": "dotdotgod_context_search",
|
|
9
|
-
"stats": "dotdotgod_context_stats", "doctor": "dotdotgod_context_doctor",
|
|
10
|
-
"purge": "dotdotgod_context_purge", "session_resume": "dotdotgod_context_session_resume",
|
|
11
|
-
}
|
|
12
|
-
|
|
13
7
|
|
|
14
8
|
def register(ctx):
|
|
15
9
|
runtime = Runtime(ctx)
|
|
@@ -18,7 +12,9 @@ def register(ctx):
|
|
|
18
12
|
tools = json.loads((Path(__file__).parent / "mcp" / "tools.json").read_text())
|
|
19
13
|
for tool in tools:
|
|
20
14
|
remote = tool["name"]
|
|
21
|
-
name =
|
|
15
|
+
name = remote
|
|
16
|
+
if name == "impact_status":
|
|
17
|
+
continue # Hermes owns its selected-repository impact status below.
|
|
22
18
|
|
|
23
19
|
def handle(args, session_id="", _remote=remote, **kwargs):
|
|
24
20
|
try:
|
|
@@ -31,8 +27,8 @@ def register(ctx):
|
|
|
31
27
|
}, handler=handle, description=tool["description"])
|
|
32
28
|
|
|
33
29
|
for name, schema, description in [
|
|
34
|
-
("
|
|
35
|
-
("
|
|
30
|
+
("select_root", {"type": "object", "properties": {"label": {"type": "string"}}, "required": ["label"], "additionalProperties": False}, "Select a project for this host session using a configured label or absolute directory path."),
|
|
31
|
+
("impact_status", {"type": "object", "properties": {}, "additionalProperties": False}, "Read pending impact paths for the selected repository; does not clear them."),
|
|
36
32
|
]:
|
|
37
33
|
def handle_local(args, session_id="", _name=name, **kwargs):
|
|
38
34
|
try:
|