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