Skip to content

Plugins ​

Plugins

A plugin adds an action. The important part is what it is not allowed to be.

What a plugin actually is ​

An action plugin runs in Jint — a JavaScript interpreter written in C# — and returns a shell snippet. It does not perform the work; Walis runs the shell it produced.

That single constraint is what makes plugins readable: before installing one, you can see exactly what it will put into your build. Compare with Jenkins, where a plugin runs unsandboxed in the controller's JVM and can do anything the controller can.

Capabilities ​

A plugin has only the capabilities its manifest declares:

  • Network — outbound access is allowed to named domains and nothing else.
  • Secrets — a plugin can ask for a secret to be injected into a request header via withSecret. It cannot read the value.

Capabilities not declared do not exist. There is no ambient permission.

Resource ceilings ​

LimitValue
Timeout10 seconds
Memory8 MB
Statements500,000
Recursion depth64

These bound the generation of the snippet, not the build the snippet then runs.

AI drafting ​

The plugin screen can draft a plugin from a description. Anything it produces has permissions cleared, type and version forced, and is never installed automatically — model output is treated exactly like text a stranger pasted in, because that is what it is.

Who can install ​

/api/plugins is administrator-only. Installing a plugin means adding code that will run on this machine, so it is not delegated to the operator role.

Development ​

The Development guide tab in the app carries the current host API. The project's Docs/plugin-development.md covers the threat model, and @walisayu/plugin-sdk provides types, a local test harness, an esbuild bundler and a walis-plugin CLI.

Escaping rules, parameter defaults and domain matching must match the host exactly — there are tests on both sides pinning that, because a mismatch is how a sandbox escape starts.

Released under the MIT License.