| name | create-script-handler |
| description | Create a custom script handler for an unsupported scripting language |
| when-to-use | When user asks to add support for a new scripting language or create a script handler |
| effort | medium |
Create Script Handler
Help the user register a custom script handler so Datagrok can run scripts in a language not natively supported.
Usage
/create-script-handler [language-name] [--package <package-name>]
Instructions
1. Define the handler function
Create a TypeScript function that accepts a DG.FuncCall and executes the script, setting output parameters on completion:
export async function myLanguageHandler(call: DG.FuncCall): Promise<void> {
}
The implementation can use any execution strategy: WebAssembly, a Docker container, a remote API, etc.
2. Add mandatory annotations
Place these multi-line comments above the function declaration:
export async function clojureScriptHandler(call: DG.FuncCall): Promise<void> {
}
Mandatory annotations
| Annotation | Description |
|---|
tags: scriptHandler | Marks the function as a script handler for registration |
meta.scriptHandler.language | Language name (shown in UI when creating scripts) |
meta.scriptHandler.extensions | Comma-separated file extensions (e.g., py, js, clj,cljs,cljr) |
input: funccall scriptCall | The handler must accept exactly one input of type funccall |
Optional annotations
| Annotation | Description |
|---|
meta.scriptHandler.templateScript | Template code added to newly created scripts in this language |
meta.scriptHandler.codeEditorMode | CodeMirror editor mode for syntax highlighting (available modes) |
meta.icon | Path to icon inside package files, used in UI for all scripts of this language |
meta.scriptHandler.vectorizationFunction | Function in form <namespace>:<function name> for vectorizing DG.Script. Accepts DG.Script, returns string with vectorized code. |
meta.scriptHandler.commentStart | Comment character(s) for the language (e.g., ; for Clojure, # for Python) |
3. Publish the package
Build and publish the package:
webpack
grok publish dev
After publishing, the language appears in the script creation UI. The platform recognizes scripts with a matching language annotation and routes them to this handler.
Complete example
import * as DG from 'datagrok-api/dg';
export async function clojureScriptHandler(call: DG.FuncCall): Promise<void> {
const script = call.inputs['scriptCall'];
}
Behavior
- Ask the user which programming language they want to support.
- Ask for the file extensions associated with that language.
- Determine the execution strategy (WebAssembly, Docker container, remote service, etc.).
- Generate the handler function with all mandatory annotations.
- Add optional annotations (template, icon, editor mode) if the user provides them.
- If Docker execution is needed, suggest also using the
/create-docker-container skill.
- Ensure the function signature has exactly one
funccall input parameter.
- Follow project coding conventions: no excessive comments, no curly brackets for one-line if/for, catch/else if on new lines.