You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Structured MCP filter schemas, hardened value enums, tool-description rewrite (#315)
* expose structured filter schemas and rewrite mcp tool descriptions
search/find/neighbors `filter`/`edge_filter` params are now typed
NodeFilter/EdgeFilter (structured, extra-forbidden) instead of opaque
dict|str, so MCP clients see field-level enums and descriptions. Value
taxonomies role/framework/source_layer/client_kind/producer_kind are Literal
enums. Rewrite the five tool descriptions and _INSTRUCTIONS to drop
internal-implementation leaks, cross-reference sibling tools, and document
strict-frame failure modes. apply_auto_scope operates on NodeFilter.
Co-Authored-By: Claude <noreply@anthropic.com>
* validate client/producer kind at index time; document OTHER role split
The in-source @CodebaseHttpClient(clientKind=) / @CodebaseProducer(producerKind=)
enum paths did str(val) with no validation, unlike the YAML path. Validate
against VALID_CLIENT_KINDS/VALID_PRODUCER_KINDS (deferred import to avoid the
java_ontology->ast_java cycle) and warn-and-ignore on unknown — this closes the
last open producers, making client_kind/producer_kind a closed set safe to
surface as enums. Also document in java_ontology.py that VALID_ROLES deliberately
excludes OTHER (inference-only fallback; the read-side Role enum includes it).
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: align consumer docs with closed filter enums (#315)
The structured filter schemas PR makes role/framework/source_layer/
client_kind/producer_kind closed Literal enums with extra="forbid", so
stale or omitted values are now hard schema errors instead of silent
no-ops. Align the three consumer-facing operating manuals with the
now-closed sets:
- Framework glossary: drop the non-existent `codebase_async_route` (only
ever a function name, never a stored value), add the missing `feign`,
drop the misleading `...` (the set is now closed/exhaustive).
- NodeFilter applicability tables: add `source_layer` to the client and
producer rows (applicable per _NODEFILTER_APPLICABLE_FIELDS, previously
undocumented).
- Strict-frame note: invalid enum values (e.g. wrong case) are rejected
earlier at the schema layer with the valid set listed - distinct from
the success=false applicability path.
- Glossary: add Source layers (client/producer) closed value set.
Doc-only; no code or test impact.
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: agents/explorer-rag-enhanced.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -151,15 +151,15 @@ Simple types in parentheses; generics erased. No spaces after commas. No-arg: `(
151
151
152
152
### Shared NodeFilter
153
153
154
-
For `find`, `filter` is required — `{}` means no predicates. **Strict frame:** unknown keys or inapplicable populated fields → `success=false`.
154
+
For `find`, `filter` is required — `{}` means no predicates. **Strict frame:** unknown keys or inapplicable populated fields → `success=false`; invalid enum values (e.g. wrong case) are rejected earlier at the schema layer with the valid set listed.
`http_method` filters HTTP verbs on **routes** (declared method) and on **clients** (outbound call method). Not applicable to **symbol** rows.
145
145
146
-
**Strict frame:** one populated field → one stored attribute for that kind. Unknown keys or inapplicable populated fields → `success=false` with a teaching `message`. No wildcards in `fqn_prefix`, `path_prefix`, or `target_path_prefix` (`*` / `?` rejected) — use `search(query=…)` for ranked text instead. `search.query` is opaque text, not a DSL.
146
+
**Strict frame:** one populated field → one stored attribute for that kind. Unknown keys or inapplicable populated fields → `success=false` with a teaching `message`. Invalid enum values (e.g. wrong case) are rejected earlier at the schema layer with the valid set listed. No wildcards in `fqn_prefix`, `path_prefix`, or `target_path_prefix` (`*` / `?` rejected) — use `search(query=…)` for ranked text instead. `search.query` is opaque text, not a DSL.
147
147
148
148
### Identifier resolution (`resolve`)
149
149
@@ -245,12 +245,14 @@ Returns **edges** with `attrs` (`confidence`, `strategy`, `match`, … on cross-
0 commit comments