jevstrudel.git / worker / src / shared-tools.json
1[
2  {
3    "name": "list_sounds",
4    "scope": "play",
5    "description": "The sounds tab of your tab: every sound it has loaded, or one category, with each sound's variants (.n) and how to play it. user and imported sounds exist only in that browser.",
6    "inputSchema": {
7      "type": "object",
8      "properties": {
9        "category": { "type": "string", "enum": ["samples", "drum-machines", "synths", "wavetables", "user", "imported"] },
10        "filter": { "type": "string", "description": "Only names containing this." },
11        "limit": { "type": "integer", "minimum": 1, "maximum": 200, "description": "Default 100." },
12        "cursor": { "type": "string", "description": "From the last page's answer." },
13        "session_id": { "type": "string", "description": "Which tab, when several are open." }
14      }
15    }
16  },
17  {
18    "name": "ask_jev_sound",
19    "scope": "play",
20    "description": "Jev picks the sound in your tab that best fits a description: its pick and runners-up with probabilities, and code to play them. One Jev call per 255 candidates or so (charged like any Jev call); narrow with category or filter.",
21    "inputSchema": {
22      "type": "object",
23      "properties": {
24        "description": { "type": "string", "description": "The sound wanted, at most 280 characters." },
25        "category": { "type": "string", "enum": ["samples", "drum-machines", "synths", "wavetables", "user", "imported"] },
26        "filter": { "type": "string", "description": "Only names containing this." },
27        "session_id": { "type": "string", "description": "Which tab, when several are open." }
28      },
29      "required": ["description"]
30    }
31  },
32  {
33    "name": "api_reference",
34    "scope": null,
35    "description": "Strudel's function reference (the reference tab): search by name or words with query, or get one function whole (signature, parameters, examples) with name.",
36    "inputSchema": {
37      "type": "object",
38      "properties": {
39        "query": { "type": "string", "description": "Words to find in names, synonyms, tags and descriptions." },
40        "name": { "type": "string", "description": "A function's name or synonym." }
41      }
42    }
43  },
44  {
45    "name": "get_settings",
46    "scope": "play",
47    "description": "Your tab's editor settings (theme, font, keybindings, panel, editing options) and the themes it has.",
48    "inputSchema": { "type": "object", "properties": { "session_id": { "type": "string", "description": "Which tab, when several are open." } } }
49  },
50  {
51    "name": "set_settings",
52    "scope": "play",
53    "description": "Change your tab's editor settings, e.g. {\"theme\":\"dracula\",\"fontSize\":22}. Only the settings get_settings returns.",
54    "inputSchema": {
55      "type": "object",
56      "properties": {
57        "changes": { "type": "object", "description": "setting: value" },
58        "session_id": { "type": "string", "description": "Which tab, when several are open." }
59      },
60      "required": ["changes"]
61    }
62  },
63  {
64    "name": "play_song",
65    "scope": "play",
66    "description": "Play a song in your tab from the top, as clicking its card does: a site song in the page, a listener's in the sandbox.",
67    "inputSchema": {
68      "type": "object",
69      "properties": {
70        "id": { "type": "string", "description": "A site song \"<theme>/<song>\", or \"listener:<id>\"" },
71        "session_id": { "type": "string", "description": "Which tab, when several are open." }
72      },
73      "required": ["id"]
74    }
75  },
76  {
77    "name": "ask_jev_song",
78    "scope": "play",
79    "description": "The mood picker: Jev picks the site song that fits a mood (one Jev call), and with play: true plays it in your tab.",
80    "inputSchema": {
81      "type": "object",
82      "properties": {
83        "mood": { "type": "string", "description": "How the listener feels, at most 280 characters." },
84        "play": { "type": "boolean" },
85        "session_id": { "type": "string", "description": "Which tab, when several are open." }
86      },
87      "required": ["mood"]
88    }
89  },
90  {
91    "name": "react",
92    "scope": "play",
93    "description": "🔥 or 😴 for the section playing in your tab, as the booth's buttons: Jev hears it before its next choice, and it counts for a site song as written.",
94    "inputSchema": {
95      "type": "object",
96      "properties": {
97        "kind": { "type": "string", "enum": ["fire", "sleep"] },
98        "session_id": { "type": "string", "description": "Which tab, when several are open." }
99      },
100      "required": ["kind"]
101    }
102  },
103  {
104    "name": "vote",
105    "scope": null,
106    "description": "\"Do you agree with Jev?\": of two site songs, pick the one that is more art. Counted anonymously; says whether you agree with Jev's scores.",
107    "inputSchema": {
108      "type": "object",
109      "properties": {
110        "a": { "type": "string", "description": "A site song, \"<theme>/<song>\"" },
111        "b": { "type": "string", "description": "Another" },
112        "pick": { "type": "string", "description": "a or b's id" }
113      },
114      "required": ["a", "b", "pick"]
115    }
116  }
117]