Skip to main content

harn_hostlib/
schemas.rs

1//! Embedded JSON Schemas for every hostlib host method.
2//!
3//! Schemas live at `schemas/<module>/<method>.{request,response}.json` and
4//! are baked into the crate at compile time via `include_str!`. They're the
5//! source of truth for hostlib request/response compatibility: the schema
6//! files ship with the crate (see the `include` field in `Cargo.toml`),
7//! and consumers fetch them through this module.
8//!
9//! Schemas use JSON Schema draft 2020-12.
10
11mod validation;
12
13pub(crate) use validation::{validate_request_args, validate_response};
14
15/// Direction of a schema (request body vs. response body).
16#[derive(Clone, Copy, Debug, PartialEq, Eq)]
17pub enum SchemaKind {
18    /// Schema for the *input* of a host method.
19    Request,
20    /// Schema for the *output* of a host method.
21    Response,
22}
23
24/// One `(module, method, kind, schema_text)` tuple for every shipped schema.
25///
26/// Embedders use this catalog to:
27/// - assert that every registered builtin has a matching schema (drift test);
28/// - export the schemas to downstream consumers;
29/// - validate live request/response payloads in tests.
30pub const SCHEMAS: &[(&str, &str, SchemaKind, &str)] = &[
31    // ast/
32    (
33        "ast",
34        "parse_file",
35        SchemaKind::Request,
36        include_str!("../schemas/ast/parse_file.request.json"),
37    ),
38    (
39        "ast",
40        "parse_file",
41        SchemaKind::Response,
42        include_str!("../schemas/ast/parse_file.response.json"),
43    ),
44    (
45        "ast",
46        "symbols",
47        SchemaKind::Request,
48        include_str!("../schemas/ast/symbols.request.json"),
49    ),
50    (
51        "ast",
52        "symbols",
53        SchemaKind::Response,
54        include_str!("../schemas/ast/symbols.response.json"),
55    ),
56    (
57        "ast",
58        "outline",
59        SchemaKind::Request,
60        include_str!("../schemas/ast/outline.request.json"),
61    ),
62    (
63        "ast",
64        "outline",
65        SchemaKind::Response,
66        include_str!("../schemas/ast/outline.response.json"),
67    ),
68    (
69        "ast",
70        "parse_errors",
71        SchemaKind::Request,
72        include_str!("../schemas/ast/parse_errors.request.json"),
73    ),
74    (
75        "ast",
76        "parse_errors",
77        SchemaKind::Response,
78        include_str!("../schemas/ast/parse_errors.response.json"),
79    ),
80    (
81        "ast",
82        "undefined_names",
83        SchemaKind::Request,
84        include_str!("../schemas/ast/undefined_names.request.json"),
85    ),
86    (
87        "ast",
88        "undefined_names",
89        SchemaKind::Response,
90        include_str!("../schemas/ast/undefined_names.response.json"),
91    ),
92    (
93        "ast",
94        "function_body",
95        SchemaKind::Request,
96        include_str!("../schemas/ast/function_body.request.json"),
97    ),
98    (
99        "ast",
100        "function_body",
101        SchemaKind::Response,
102        include_str!("../schemas/ast/function_body.response.json"),
103    ),
104    (
105        "ast",
106        "function_bodies",
107        SchemaKind::Request,
108        include_str!("../schemas/ast/function_bodies.request.json"),
109    ),
110    (
111        "ast",
112        "function_bodies",
113        SchemaKind::Response,
114        include_str!("../schemas/ast/function_bodies.response.json"),
115    ),
116    (
117        "ast",
118        "extract_imports",
119        SchemaKind::Request,
120        include_str!("../schemas/ast/extract_imports.request.json"),
121    ),
122    (
123        "ast",
124        "extract_imports",
125        SchemaKind::Response,
126        include_str!("../schemas/ast/extract_imports.response.json"),
127    ),
128    (
129        "ast",
130        "symbol_extract",
131        SchemaKind::Request,
132        include_str!("../schemas/ast/symbol_extract.request.json"),
133    ),
134    (
135        "ast",
136        "symbol_extract",
137        SchemaKind::Response,
138        include_str!("../schemas/ast/symbol_extract.response.json"),
139    ),
140    (
141        "ast",
142        "symbol_delete",
143        SchemaKind::Request,
144        include_str!("../schemas/ast/symbol_delete.request.json"),
145    ),
146    (
147        "ast",
148        "symbol_delete",
149        SchemaKind::Response,
150        include_str!("../schemas/ast/symbol_delete.response.json"),
151    ),
152    (
153        "ast",
154        "symbol_replace",
155        SchemaKind::Request,
156        include_str!("../schemas/ast/symbol_replace.request.json"),
157    ),
158    (
159        "ast",
160        "symbol_replace",
161        SchemaKind::Response,
162        include_str!("../schemas/ast/symbol_replace.response.json"),
163    ),
164    (
165        "ast",
166        "bracket_balance",
167        SchemaKind::Request,
168        include_str!("../schemas/ast/bracket_balance.request.json"),
169    ),
170    (
171        "ast",
172        "bracket_balance",
173        SchemaKind::Response,
174        include_str!("../schemas/ast/bracket_balance.response.json"),
175    ),
176    (
177        "ast",
178        "apply_node",
179        SchemaKind::Request,
180        include_str!("../schemas/ast/apply_node.request.json"),
181    ),
182    (
183        "ast",
184        "apply_node",
185        SchemaKind::Response,
186        include_str!("../schemas/ast/apply_node.response.json"),
187    ),
188    (
189        "ast",
190        "insert_at_anchor",
191        SchemaKind::Request,
192        include_str!("../schemas/ast/insert_at_anchor.request.json"),
193    ),
194    (
195        "ast",
196        "insert_at_anchor",
197        SchemaKind::Response,
198        include_str!("../schemas/ast/insert_at_anchor.response.json"),
199    ),
200    (
201        "ast",
202        "batch_apply",
203        SchemaKind::Request,
204        include_str!("../schemas/ast/batch_apply.request.json"),
205    ),
206    (
207        "ast",
208        "batch_apply",
209        SchemaKind::Response,
210        include_str!("../schemas/ast/batch_apply.response.json"),
211    ),
212    (
213        "ast",
214        "dry_run",
215        SchemaKind::Request,
216        include_str!("../schemas/ast/dry_run.request.json"),
217    ),
218    (
219        "ast",
220        "dry_run",
221        SchemaKind::Response,
222        include_str!("../schemas/ast/dry_run.response.json"),
223    ),
224    (
225        "ast",
226        "search",
227        SchemaKind::Request,
228        include_str!("../schemas/ast/search.request.json"),
229    ),
230    (
231        "ast",
232        "search",
233        SchemaKind::Response,
234        include_str!("../schemas/ast/search.response.json"),
235    ),
236    (
237        "ast",
238        "structural_diff",
239        SchemaKind::Request,
240        include_str!("../schemas/ast/structural_diff.request.json"),
241    ),
242    (
243        "ast",
244        "structural_diff",
245        SchemaKind::Response,
246        include_str!("../schemas/ast/structural_diff.response.json"),
247    ),
248    (
249        "ast",
250        "capabilities",
251        SchemaKind::Request,
252        include_str!("../schemas/ast/capabilities.request.json"),
253    ),
254    (
255        "ast",
256        "capabilities",
257        SchemaKind::Response,
258        include_str!("../schemas/ast/capabilities.response.json"),
259    ),
260    // code_index/
261    (
262        "code_index",
263        "query",
264        SchemaKind::Request,
265        include_str!("../schemas/code_index/query.request.json"),
266    ),
267    (
268        "code_index",
269        "query",
270        SchemaKind::Response,
271        include_str!("../schemas/code_index/query.response.json"),
272    ),
273    (
274        "code_index",
275        "rebuild",
276        SchemaKind::Request,
277        include_str!("../schemas/code_index/rebuild.request.json"),
278    ),
279    (
280        "code_index",
281        "rebuild",
282        SchemaKind::Response,
283        include_str!("../schemas/code_index/rebuild.response.json"),
284    ),
285    (
286        "code_index",
287        "stats",
288        SchemaKind::Request,
289        include_str!("../schemas/code_index/stats.request.json"),
290    ),
291    (
292        "code_index",
293        "stats",
294        SchemaKind::Response,
295        include_str!("../schemas/code_index/stats.response.json"),
296    ),
297    (
298        "code_index",
299        "imports_for",
300        SchemaKind::Request,
301        include_str!("../schemas/code_index/imports_for.request.json"),
302    ),
303    (
304        "code_index",
305        "imports_for",
306        SchemaKind::Response,
307        include_str!("../schemas/code_index/imports_for.response.json"),
308    ),
309    (
310        "code_index",
311        "importers_of",
312        SchemaKind::Request,
313        include_str!("../schemas/code_index/importers_of.request.json"),
314    ),
315    (
316        "code_index",
317        "importers_of",
318        SchemaKind::Response,
319        include_str!("../schemas/code_index/importers_of.response.json"),
320    ),
321    // code_index — additive read-only secondary roots (#2403 follow-up)
322    (
323        "code_index",
324        "add_readonly_roots",
325        SchemaKind::Request,
326        include_str!("../schemas/code_index/add_readonly_roots.request.json"),
327    ),
328    (
329        "code_index",
330        "add_readonly_roots",
331        SchemaKind::Response,
332        include_str!("../schemas/code_index/add_readonly_roots.response.json"),
333    ),
334    // code_index — file table accessors
335    (
336        "code_index",
337        "path_to_id",
338        SchemaKind::Request,
339        include_str!("../schemas/code_index/path_to_id.request.json"),
340    ),
341    (
342        "code_index",
343        "path_to_id",
344        SchemaKind::Response,
345        include_str!("../schemas/code_index/path_to_id.response.json"),
346    ),
347    (
348        "code_index",
349        "id_to_path",
350        SchemaKind::Request,
351        include_str!("../schemas/code_index/id_to_path.request.json"),
352    ),
353    (
354        "code_index",
355        "id_to_path",
356        SchemaKind::Response,
357        include_str!("../schemas/code_index/id_to_path.response.json"),
358    ),
359    (
360        "code_index",
361        "file_ids",
362        SchemaKind::Request,
363        include_str!("../schemas/code_index/file_ids.request.json"),
364    ),
365    (
366        "code_index",
367        "file_ids",
368        SchemaKind::Response,
369        include_str!("../schemas/code_index/file_ids.response.json"),
370    ),
371    (
372        "code_index",
373        "file_meta",
374        SchemaKind::Request,
375        include_str!("../schemas/code_index/file_meta.request.json"),
376    ),
377    (
378        "code_index",
379        "file_meta",
380        SchemaKind::Response,
381        include_str!("../schemas/code_index/file_meta.response.json"),
382    ),
383    (
384        "code_index",
385        "file_hash",
386        SchemaKind::Request,
387        include_str!("../schemas/code_index/file_hash.request.json"),
388    ),
389    (
390        "code_index",
391        "file_hash",
392        SchemaKind::Response,
393        include_str!("../schemas/code_index/file_hash.response.json"),
394    ),
395    (
396        "code_index",
397        "file_hash_snapshot",
398        SchemaKind::Request,
399        include_str!("../schemas/code_index/file_hash_snapshot.request.json"),
400    ),
401    (
402        "code_index",
403        "file_hash_snapshot",
404        SchemaKind::Response,
405        include_str!("../schemas/code_index/file_hash_snapshot.response.json"),
406    ),
407    // code_index — cached reads
408    (
409        "code_index",
410        "read_range",
411        SchemaKind::Request,
412        include_str!("../schemas/code_index/read_range.request.json"),
413    ),
414    (
415        "code_index",
416        "read_range",
417        SchemaKind::Response,
418        include_str!("../schemas/code_index/read_range.response.json"),
419    ),
420    (
421        "code_index",
422        "reindex_file",
423        SchemaKind::Request,
424        include_str!("../schemas/code_index/reindex_file.request.json"),
425    ),
426    (
427        "code_index",
428        "reindex_file",
429        SchemaKind::Response,
430        include_str!("../schemas/code_index/reindex_file.response.json"),
431    ),
432    (
433        "code_index",
434        "trigram_query",
435        SchemaKind::Request,
436        include_str!("../schemas/code_index/trigram_query.request.json"),
437    ),
438    (
439        "code_index",
440        "trigram_query",
441        SchemaKind::Response,
442        include_str!("../schemas/code_index/trigram_query.response.json"),
443    ),
444    (
445        "code_index",
446        "extract_trigrams",
447        SchemaKind::Request,
448        include_str!("../schemas/code_index/extract_trigrams.request.json"),
449    ),
450    (
451        "code_index",
452        "extract_trigrams",
453        SchemaKind::Response,
454        include_str!("../schemas/code_index/extract_trigrams.response.json"),
455    ),
456    (
457        "code_index",
458        "word_get",
459        SchemaKind::Request,
460        include_str!("../schemas/code_index/word_get.request.json"),
461    ),
462    (
463        "code_index",
464        "word_get",
465        SchemaKind::Response,
466        include_str!("../schemas/code_index/word_get.response.json"),
467    ),
468    (
469        "code_index",
470        "deps_get",
471        SchemaKind::Request,
472        include_str!("../schemas/code_index/deps_get.request.json"),
473    ),
474    (
475        "code_index",
476        "deps_get",
477        SchemaKind::Response,
478        include_str!("../schemas/code_index/deps_get.response.json"),
479    ),
480    (
481        "code_index",
482        "outline_get",
483        SchemaKind::Request,
484        include_str!("../schemas/code_index/outline_get.request.json"),
485    ),
486    (
487        "code_index",
488        "outline_get",
489        SchemaKind::Response,
490        include_str!("../schemas/code_index/outline_get.response.json"),
491    ),
492    // code_index — change log
493    (
494        "code_index",
495        "current_seq",
496        SchemaKind::Request,
497        include_str!("../schemas/code_index/current_seq.request.json"),
498    ),
499    (
500        "code_index",
501        "current_seq",
502        SchemaKind::Response,
503        include_str!("../schemas/code_index/current_seq.response.json"),
504    ),
505    (
506        "code_index",
507        "changes_since",
508        SchemaKind::Request,
509        include_str!("../schemas/code_index/changes_since.request.json"),
510    ),
511    (
512        "code_index",
513        "changes_since",
514        SchemaKind::Response,
515        include_str!("../schemas/code_index/changes_since.response.json"),
516    ),
517    (
518        "code_index",
519        "version_record",
520        SchemaKind::Request,
521        include_str!("../schemas/code_index/version_record.request.json"),
522    ),
523    (
524        "code_index",
525        "version_record",
526        SchemaKind::Response,
527        include_str!("../schemas/code_index/version_record.response.json"),
528    ),
529    // code_index — agents + locks
530    (
531        "code_index",
532        "agent_register",
533        SchemaKind::Request,
534        include_str!("../schemas/code_index/agent_register.request.json"),
535    ),
536    (
537        "code_index",
538        "agent_register",
539        SchemaKind::Response,
540        include_str!("../schemas/code_index/agent_register.response.json"),
541    ),
542    (
543        "code_index",
544        "agent_heartbeat",
545        SchemaKind::Request,
546        include_str!("../schemas/code_index/agent_heartbeat.request.json"),
547    ),
548    (
549        "code_index",
550        "agent_heartbeat",
551        SchemaKind::Response,
552        include_str!("../schemas/code_index/agent_heartbeat.response.json"),
553    ),
554    (
555        "code_index",
556        "agent_unregister",
557        SchemaKind::Request,
558        include_str!("../schemas/code_index/agent_unregister.request.json"),
559    ),
560    (
561        "code_index",
562        "agent_unregister",
563        SchemaKind::Response,
564        include_str!("../schemas/code_index/agent_unregister.response.json"),
565    ),
566    (
567        "code_index",
568        "lock_try",
569        SchemaKind::Request,
570        include_str!("../schemas/code_index/lock_try.request.json"),
571    ),
572    (
573        "code_index",
574        "lock_try",
575        SchemaKind::Response,
576        include_str!("../schemas/code_index/lock_try.response.json"),
577    ),
578    (
579        "code_index",
580        "lock_release",
581        SchemaKind::Request,
582        include_str!("../schemas/code_index/lock_release.request.json"),
583    ),
584    (
585        "code_index",
586        "lock_release",
587        SchemaKind::Response,
588        include_str!("../schemas/code_index/lock_release.response.json"),
589    ),
590    (
591        "code_index",
592        "status",
593        SchemaKind::Request,
594        include_str!("../schemas/code_index/status.request.json"),
595    ),
596    (
597        "code_index",
598        "status",
599        SchemaKind::Response,
600        include_str!("../schemas/code_index/status.response.json"),
601    ),
602    (
603        "code_index",
604        "current_agent_id",
605        SchemaKind::Request,
606        include_str!("../schemas/code_index/current_agent_id.request.json"),
607    ),
608    (
609        "code_index",
610        "current_agent_id",
611        SchemaKind::Response,
612        include_str!("../schemas/code_index/current_agent_id.response.json"),
613    ),
614    (
615        "code_index",
616        "cypher",
617        SchemaKind::Request,
618        include_str!("../schemas/code_index/cypher.request.json"),
619    ),
620    (
621        "code_index",
622        "cypher",
623        SchemaKind::Response,
624        include_str!("../schemas/code_index/cypher.response.json"),
625    ),
626    (
627        "code_index",
628        "repo_map",
629        SchemaKind::Request,
630        include_str!("../schemas/code_index/repo_map.request.json"),
631    ),
632    (
633        "code_index",
634        "repo_map",
635        SchemaKind::Response,
636        include_str!("../schemas/code_index/repo_map.response.json"),
637    ),
638    (
639        "code_index",
640        "branch_overlay",
641        SchemaKind::Request,
642        include_str!("../schemas/code_index/branch_overlay.request.json"),
643    ),
644    (
645        "code_index",
646        "branch_overlay",
647        SchemaKind::Response,
648        include_str!("../schemas/code_index/branch_overlay.response.json"),
649    ),
650    (
651        "code_index",
652        "freshness",
653        SchemaKind::Request,
654        include_str!("../schemas/code_index/freshness.request.json"),
655    ),
656    (
657        "code_index",
658        "freshness",
659        SchemaKind::Response,
660        include_str!("../schemas/code_index/freshness.response.json"),
661    ),
662    (
663        "code_index",
664        "rename_symbol",
665        SchemaKind::Request,
666        include_str!("../schemas/code_index/rename_symbol.request.json"),
667    ),
668    (
669        "code_index",
670        "rename_symbol",
671        SchemaKind::Response,
672        include_str!("../schemas/code_index/rename_symbol.response.json"),
673    ),
674    // scanner/
675    (
676        "scanner",
677        "scan_project",
678        SchemaKind::Request,
679        include_str!("../schemas/scanner/scan_project.request.json"),
680    ),
681    (
682        "scanner",
683        "scan_project",
684        SchemaKind::Response,
685        include_str!("../schemas/scanner/scan_project.response.json"),
686    ),
687    (
688        "scanner",
689        "scan_incremental",
690        SchemaKind::Request,
691        include_str!("../schemas/scanner/scan_incremental.request.json"),
692    ),
693    (
694        "scanner",
695        "scan_incremental",
696        SchemaKind::Response,
697        include_str!("../schemas/scanner/scan_incremental.response.json"),
698    ),
699    // fs/
700    (
701        "fs",
702        "set_mode",
703        SchemaKind::Request,
704        include_str!("../schemas/fs/set_mode.request.json"),
705    ),
706    (
707        "fs",
708        "set_mode",
709        SchemaKind::Response,
710        include_str!("../schemas/fs/set_mode.response.json"),
711    ),
712    (
713        "fs",
714        "staged_status",
715        SchemaKind::Request,
716        include_str!("../schemas/fs/staged_status.request.json"),
717    ),
718    (
719        "fs",
720        "staged_status",
721        SchemaKind::Response,
722        include_str!("../schemas/fs/staged_status.response.json"),
723    ),
724    (
725        "fs",
726        "commit_staged",
727        SchemaKind::Request,
728        include_str!("../schemas/fs/commit_staged.request.json"),
729    ),
730    (
731        "fs",
732        "commit_staged",
733        SchemaKind::Response,
734        include_str!("../schemas/fs/commit_staged.response.json"),
735    ),
736    (
737        "fs",
738        "discard_staged",
739        SchemaKind::Request,
740        include_str!("../schemas/fs/discard_staged.request.json"),
741    ),
742    (
743        "fs",
744        "discard_staged",
745        SchemaKind::Response,
746        include_str!("../schemas/fs/discard_staged.response.json"),
747    ),
748    (
749        "fs",
750        "safe_text_patch",
751        SchemaKind::Request,
752        include_str!("../schemas/fs/safe_text_patch.request.json"),
753    ),
754    (
755        "fs",
756        "safe_text_patch",
757        SchemaKind::Response,
758        include_str!("../schemas/fs/safe_text_patch.response.json"),
759    ),
760    (
761        "fs",
762        "read_text",
763        SchemaKind::Request,
764        include_str!("../schemas/fs/read_text.request.json"),
765    ),
766    (
767        "fs",
768        "read_text",
769        SchemaKind::Response,
770        include_str!("../schemas/fs/read_text.response.json"),
771    ),
772    (
773        "fs",
774        "emit_safe_text_patch_result",
775        SchemaKind::Request,
776        include_str!("../schemas/fs/emit_safe_text_patch_result.request.json"),
777    ),
778    (
779        "fs",
780        "emit_safe_text_patch_result",
781        SchemaKind::Response,
782        include_str!("../schemas/fs/emit_safe_text_patch_result.response.json"),
783    ),
784    (
785        "fs",
786        "snapshot",
787        SchemaKind::Request,
788        include_str!("../schemas/fs/snapshot.request.json"),
789    ),
790    (
791        "fs",
792        "snapshot",
793        SchemaKind::Response,
794        include_str!("../schemas/fs/snapshot.response.json"),
795    ),
796    (
797        "fs",
798        "restore",
799        SchemaKind::Request,
800        include_str!("../schemas/fs/restore.request.json"),
801    ),
802    (
803        "fs",
804        "restore",
805        SchemaKind::Response,
806        include_str!("../schemas/fs/restore.response.json"),
807    ),
808    (
809        "fs",
810        "list_snapshots",
811        SchemaKind::Request,
812        include_str!("../schemas/fs/list_snapshots.request.json"),
813    ),
814    (
815        "fs",
816        "list_snapshots",
817        SchemaKind::Response,
818        include_str!("../schemas/fs/list_snapshots.response.json"),
819    ),
820    (
821        "fs",
822        "drop_snapshot",
823        SchemaKind::Request,
824        include_str!("../schemas/fs/drop_snapshot.request.json"),
825    ),
826    (
827        "fs",
828        "drop_snapshot",
829        SchemaKind::Response,
830        include_str!("../schemas/fs/drop_snapshot.response.json"),
831    ),
832    // fs_watch/
833    (
834        "fs_watch",
835        "subscribe",
836        SchemaKind::Request,
837        include_str!("../schemas/fs_watch/subscribe.request.json"),
838    ),
839    (
840        "fs_watch",
841        "subscribe",
842        SchemaKind::Response,
843        include_str!("../schemas/fs_watch/subscribe.response.json"),
844    ),
845    (
846        "fs_watch",
847        "unsubscribe",
848        SchemaKind::Request,
849        include_str!("../schemas/fs_watch/unsubscribe.request.json"),
850    ),
851    (
852        "fs_watch",
853        "unsubscribe",
854        SchemaKind::Response,
855        include_str!("../schemas/fs_watch/unsubscribe.response.json"),
856    ),
857    // tools/
858    (
859        "tools",
860        "search",
861        SchemaKind::Request,
862        include_str!("../schemas/tools/search.request.json"),
863    ),
864    (
865        "tools",
866        "search",
867        SchemaKind::Response,
868        include_str!("../schemas/tools/search.response.json"),
869    ),
870    (
871        "tools",
872        "read_file",
873        SchemaKind::Request,
874        include_str!("../schemas/tools/read_file.request.json"),
875    ),
876    (
877        "tools",
878        "read_file",
879        SchemaKind::Response,
880        include_str!("../schemas/tools/read_file.response.json"),
881    ),
882    (
883        "tools",
884        "write_file",
885        SchemaKind::Request,
886        include_str!("../schemas/tools/write_file.request.json"),
887    ),
888    (
889        "tools",
890        "write_file",
891        SchemaKind::Response,
892        include_str!("../schemas/tools/write_file.response.json"),
893    ),
894    (
895        "tools",
896        "delete_file",
897        SchemaKind::Request,
898        include_str!("../schemas/tools/delete_file.request.json"),
899    ),
900    (
901        "tools",
902        "delete_file",
903        SchemaKind::Response,
904        include_str!("../schemas/tools/delete_file.response.json"),
905    ),
906    (
907        "tools",
908        "list_directory",
909        SchemaKind::Request,
910        include_str!("../schemas/tools/list_directory.request.json"),
911    ),
912    (
913        "tools",
914        "list_directory",
915        SchemaKind::Response,
916        include_str!("../schemas/tools/list_directory.response.json"),
917    ),
918    (
919        "tools",
920        "get_file_outline",
921        SchemaKind::Request,
922        include_str!("../schemas/tools/get_file_outline.request.json"),
923    ),
924    (
925        "tools",
926        "get_file_outline",
927        SchemaKind::Response,
928        include_str!("../schemas/tools/get_file_outline.response.json"),
929    ),
930    (
931        "tools",
932        "git",
933        SchemaKind::Request,
934        include_str!("../schemas/tools/git.request.json"),
935    ),
936    (
937        "tools",
938        "git",
939        SchemaKind::Response,
940        include_str!("../schemas/tools/git.response.json"),
941    ),
942    (
943        "tools",
944        "run_command",
945        SchemaKind::Request,
946        include_str!("../schemas/tools/run_command.request.json"),
947    ),
948    (
949        "tools",
950        "run_command",
951        SchemaKind::Response,
952        include_str!("../schemas/tools/run_command.response.json"),
953    ),
954    (
955        "tools",
956        "read_command_output",
957        SchemaKind::Request,
958        include_str!("../schemas/tools/read_command_output.request.json"),
959    ),
960    (
961        "tools",
962        "read_command_output",
963        SchemaKind::Response,
964        include_str!("../schemas/tools/read_command_output.response.json"),
965    ),
966    (
967        "tools",
968        "wait_command",
969        SchemaKind::Request,
970        include_str!("../schemas/tools/wait_command.request.json"),
971    ),
972    (
973        "tools",
974        "wait_command",
975        SchemaKind::Response,
976        include_str!("../schemas/tools/wait_command.response.json"),
977    ),
978    (
979        "tools",
980        "run_test",
981        SchemaKind::Request,
982        include_str!("../schemas/tools/run_test.request.json"),
983    ),
984    (
985        "tools",
986        "run_test",
987        SchemaKind::Response,
988        include_str!("../schemas/tools/run_test.response.json"),
989    ),
990    (
991        "tools",
992        "run_build_command",
993        SchemaKind::Request,
994        include_str!("../schemas/tools/run_build_command.request.json"),
995    ),
996    (
997        "tools",
998        "run_build_command",
999        SchemaKind::Response,
1000        include_str!("../schemas/tools/run_build_command.response.json"),
1001    ),
1002    (
1003        "tools",
1004        "inspect_test_results",
1005        SchemaKind::Request,
1006        include_str!("../schemas/tools/inspect_test_results.request.json"),
1007    ),
1008    (
1009        "tools",
1010        "inspect_test_results",
1011        SchemaKind::Response,
1012        include_str!("../schemas/tools/inspect_test_results.response.json"),
1013    ),
1014    (
1015        "tools",
1016        "manage_packages",
1017        SchemaKind::Request,
1018        include_str!("../schemas/tools/manage_packages.request.json"),
1019    ),
1020    (
1021        "tools",
1022        "manage_packages",
1023        SchemaKind::Response,
1024        include_str!("../schemas/tools/manage_packages.response.json"),
1025    ),
1026    (
1027        "tools",
1028        "cancel_handle",
1029        SchemaKind::Request,
1030        include_str!("../schemas/tools/cancel_handle.request.json"),
1031    ),
1032    (
1033        "tools",
1034        "cancel_handle",
1035        SchemaKind::Response,
1036        include_str!("../schemas/tools/cancel_handle.response.json"),
1037    ),
1038    (
1039        "tools",
1040        "toolchain_facts",
1041        SchemaKind::Request,
1042        include_str!("../schemas/tools/toolchain_facts.request.json"),
1043    ),
1044    (
1045        "tools",
1046        "toolchain_facts",
1047        SchemaKind::Response,
1048        include_str!("../schemas/tools/toolchain_facts.response.json"),
1049    ),
1050    (
1051        "tools",
1052        "enable",
1053        SchemaKind::Request,
1054        include_str!("../schemas/tools/enable.request.json"),
1055    ),
1056    (
1057        "tools",
1058        "enable",
1059        SchemaKind::Response,
1060        include_str!("../schemas/tools/enable.response.json"),
1061    ),
1062    // secret_store/
1063    (
1064        "secret_store",
1065        "get",
1066        SchemaKind::Request,
1067        include_str!("../schemas/secret_store/get.request.json"),
1068    ),
1069    (
1070        "secret_store",
1071        "get",
1072        SchemaKind::Response,
1073        include_str!("../schemas/secret_store/get.response.json"),
1074    ),
1075    (
1076        "secret_store",
1077        "set",
1078        SchemaKind::Request,
1079        include_str!("../schemas/secret_store/set.request.json"),
1080    ),
1081    (
1082        "secret_store",
1083        "set",
1084        SchemaKind::Response,
1085        include_str!("../schemas/secret_store/set.response.json"),
1086    ),
1087    (
1088        "secret_store",
1089        "delete",
1090        SchemaKind::Request,
1091        include_str!("../schemas/secret_store/delete.request.json"),
1092    ),
1093    (
1094        "secret_store",
1095        "delete",
1096        SchemaKind::Response,
1097        include_str!("../schemas/secret_store/delete.response.json"),
1098    ),
1099    (
1100        "secret_store",
1101        "list",
1102        SchemaKind::Request,
1103        include_str!("../schemas/secret_store/list.request.json"),
1104    ),
1105    (
1106        "secret_store",
1107        "list",
1108        SchemaKind::Response,
1109        include_str!("../schemas/secret_store/list.response.json"),
1110    ),
1111    (
1112        "embed",
1113        "similarity",
1114        SchemaKind::Request,
1115        include_str!("../schemas/embed/similarity.request.json"),
1116    ),
1117    (
1118        "embed",
1119        "similarity",
1120        SchemaKind::Response,
1121        include_str!("../schemas/embed/similarity.response.json"),
1122    ),
1123    (
1124        "embed",
1125        "top_k",
1126        SchemaKind::Request,
1127        include_str!("../schemas/embed/top_k.request.json"),
1128    ),
1129    (
1130        "embed",
1131        "top_k",
1132        SchemaKind::Response,
1133        include_str!("../schemas/embed/top_k.response.json"),
1134    ),
1135    (
1136        "embed",
1137        "vector",
1138        SchemaKind::Request,
1139        include_str!("../schemas/embed/vector.request.json"),
1140    ),
1141    (
1142        "embed",
1143        "vector",
1144        SchemaKind::Response,
1145        include_str!("../schemas/embed/vector.response.json"),
1146    ),
1147    (
1148        "embed",
1149        "info",
1150        SchemaKind::Request,
1151        include_str!("../schemas/embed/info.request.json"),
1152    ),
1153    (
1154        "embed",
1155        "info",
1156        SchemaKind::Response,
1157        include_str!("../schemas/embed/info.response.json"),
1158    ),
1159    // terminal_session/
1160    (
1161        "terminal_session",
1162        "start",
1163        SchemaKind::Request,
1164        include_str!("../schemas/terminal_session/start.request.json"),
1165    ),
1166    (
1167        "terminal_session",
1168        "start",
1169        SchemaKind::Response,
1170        include_str!("../schemas/terminal_session/start.response.json"),
1171    ),
1172    (
1173        "terminal_session",
1174        "send_keys",
1175        SchemaKind::Request,
1176        include_str!("../schemas/terminal_session/send_keys.request.json"),
1177    ),
1178    (
1179        "terminal_session",
1180        "send_keys",
1181        SchemaKind::Response,
1182        include_str!("../schemas/terminal_session/send_keys.response.json"),
1183    ),
1184    (
1185        "terminal_session",
1186        "capture",
1187        SchemaKind::Request,
1188        include_str!("../schemas/terminal_session/capture.request.json"),
1189    ),
1190    (
1191        "terminal_session",
1192        "capture",
1193        SchemaKind::Response,
1194        include_str!("../schemas/terminal_session/capture.response.json"),
1195    ),
1196    (
1197        "terminal_session",
1198        "resize",
1199        SchemaKind::Request,
1200        include_str!("../schemas/terminal_session/resize.request.json"),
1201    ),
1202    (
1203        "terminal_session",
1204        "resize",
1205        SchemaKind::Response,
1206        include_str!("../schemas/terminal_session/resize.response.json"),
1207    ),
1208    (
1209        "terminal_session",
1210        "wait_idle",
1211        SchemaKind::Request,
1212        include_str!("../schemas/terminal_session/wait_idle.request.json"),
1213    ),
1214    (
1215        "terminal_session",
1216        "wait_idle",
1217        SchemaKind::Response,
1218        include_str!("../schemas/terminal_session/wait_idle.response.json"),
1219    ),
1220    (
1221        "terminal_session",
1222        "end",
1223        SchemaKind::Request,
1224        include_str!("../schemas/terminal_session/end.request.json"),
1225    ),
1226    (
1227        "terminal_session",
1228        "end",
1229        SchemaKind::Response,
1230        include_str!("../schemas/terminal_session/end.response.json"),
1231    ),
1232    // Extension hostlibs registered through HostlibRegistry.
1233    (
1234        "rules",
1235        "search",
1236        SchemaKind::Request,
1237        include_str!("../schemas/rules/search.request.json"),
1238    ),
1239    (
1240        "rules",
1241        "search",
1242        SchemaKind::Response,
1243        include_str!("../schemas/rules/search.response.json"),
1244    ),
1245    (
1246        "rules",
1247        "report",
1248        SchemaKind::Request,
1249        include_str!("../schemas/rules/report.request.json"),
1250    ),
1251    (
1252        "rules",
1253        "report",
1254        SchemaKind::Response,
1255        include_str!("../schemas/rules/report.response.json"),
1256    ),
1257    (
1258        "rules",
1259        "diagnostics",
1260        SchemaKind::Request,
1261        include_str!("../schemas/rules/diagnostics.request.json"),
1262    ),
1263    (
1264        "rules",
1265        "diagnostics",
1266        SchemaKind::Response,
1267        include_str!("../schemas/rules/diagnostics.response.json"),
1268    ),
1269    (
1270        "rules",
1271        "apply",
1272        SchemaKind::Request,
1273        include_str!("../schemas/rules/apply.request.json"),
1274    ),
1275    (
1276        "rules",
1277        "apply",
1278        SchemaKind::Response,
1279        include_str!("../schemas/rules/apply.response.json"),
1280    ),
1281    (
1282        "rules",
1283        "fold",
1284        SchemaKind::Request,
1285        include_str!("../schemas/rules/fold.request.json"),
1286    ),
1287    (
1288        "rules",
1289        "fold",
1290        SchemaKind::Response,
1291        include_str!("../schemas/rules/fold.response.json"),
1292    ),
1293    (
1294        "lint",
1295        "run",
1296        SchemaKind::Request,
1297        include_str!("../schemas/lint/run.request.json"),
1298    ),
1299    (
1300        "lint",
1301        "run",
1302        SchemaKind::Response,
1303        include_str!("../schemas/lint/run.response.json"),
1304    ),
1305];
1306
1307/// Look up a single schema as raw JSON text.
1308pub fn lookup(module: &str, method: &str, kind: SchemaKind) -> Option<&'static str> {
1309    SCHEMAS
1310        .iter()
1311        .find(|(m, mt, k, _)| *m == module && *mt == method && *k == kind)
1312        .map(|(_, _, _, body)| *body)
1313}