40 lines
1.4 KiB
Markdown
40 lines
1.4 KiB
Markdown
---
|
|
name: my-suite-transform
|
|
description: Deterministic transformations with a strict command allowlist (exec is optional and constrained).
|
|
user-invocable: false
|
|
metadata: {"openclaw":{"emoji":"🧪","requires":{"config":["group:runtime"],"bins":["jq"]}}}
|
|
---
|
|
|
|
# Transform (Allowlisted exec)
|
|
|
|
## Golden rule
|
|
Preferuj transformacje bez `exec`. Jeśli `exec` jest potrzebny → tylko allowlista poniżej.
|
|
|
|
## Command allowlist (STRICT)
|
|
Dozwolone są WYŁĄCZNIE te komendy (dokładne wzorce):
|
|
|
|
1) `jq --version`
|
|
2) `jq -c . <INPUT >OUTPUT`
|
|
3) `jq -r . <INPUT >OUTPUT`
|
|
4) `head -n <N> <INPUT`
|
|
5) `tail -n <N> <INPUT`
|
|
6) `wc -l <INPUT`
|
|
7) `grep -n "<literal>" <INPUT`
|
|
8) `sed -n '<start>,<end>p' <INPUT`
|
|
|
|
### Constraints (MUST)
|
|
- `<INPUT>` i `<OUTPUT>` MUSZĄ być ścieżkami pod `{baseDir}/runs/<runId>/`
|
|
- `<N>` to liczba 1..500
|
|
- `"<literal>"` nie może zawierać znaków: `; | & $ \` ( ) { }`
|
|
- Zakaz: `rm`, `mv`, `cp` poza run, `curl`, `wget`, `ssh`, `sudo`, `chmod`, `chown`, `dd`, `mkfs`, `> /dev/*` itd.
|
|
|
|
## Execution steps
|
|
1) Waliduj, czy polecenie pasuje do allowlisty i constraintów.
|
|
2) Jeśli nie pasuje → przerwij i zaproponuj alternatywę bez exec.
|
|
3) Jeśli pasuje → uruchom `exec` tylko na plikach w katalogu run.
|
|
4) Wynik zapisz do:
|
|
- `{baseDir}/runs/<runId>/transform.log`
|
|
- `{baseDir}/runs/<runId>/<output files>`
|
|
|
|
## Why this exists
|
|
Zapobiega command injection i ogranicza skutki błędów do sandboxowego katalogu run. |