46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
"""
|
|
Drop-in JARVIS plugin template.
|
|
|
|
Copy this file, rename it (no leading underscore), fill in PLUGIN and run().
|
|
No other file needs to change — JARVIS discovers this automatically at startup.
|
|
"""
|
|
|
|
PLUGIN = {
|
|
"name": "my_plugin", # snake_case, unique, ^[a-zA-Z_][a-zA-Z0-9_]{0,63}$
|
|
"description": (
|
|
"One or two sentences Gemini uses to decide when to call this tool. "
|
|
"Be explicit about trigger phrases and, if it could be confused with "
|
|
"another tool, say which tool NOT to use instead (see game_updater's "
|
|
"description in main.py for the pattern)."
|
|
),
|
|
"parameters": {
|
|
"type": "OBJECT",
|
|
"properties": {
|
|
"example_arg": {"type": "STRING", "description": "What this argument means"},
|
|
},
|
|
"required": [], # omit or leave empty for a zero-argument tool
|
|
},
|
|
}
|
|
|
|
def run(parameters: dict, player=None, session_memory=None) -> str:
|
|
"""
|
|
parameters: dict of the args Gemini extracted, matching PLUGIN['parameters'].
|
|
player: the JarvisUI instance — use player.write_log(f"JARVIS: ...") to log,
|
|
same as actions/*.py. May be None.
|
|
session_memory: reserved, usually None today (core tools mostly pass None too).
|
|
Return a short natural-language string — this is spoken back to the user.
|
|
Never raise: catch your own errors and return a spoken error string instead
|
|
(the loader also catches exceptions as a second safety net, but don't rely on it).
|
|
"""
|
|
example_arg = parameters.get("example_arg", "")
|
|
try:
|
|
result_text = f"Did the thing with {example_arg}."
|
|
except Exception as e:
|
|
return f"Sir, my_plugin failed: {e}"
|
|
if player:
|
|
try:
|
|
player.write_log(f"JARVIS: {result_text}")
|
|
except Exception:
|
|
pass
|
|
return result_text
|