Skip to content

plugin-authoring

Placement compiled-in (in-process)
Source github.com/opencharly/plugin-authoring/candy/plugin-authoring
Version 2026.196.0000
Candy plugin-authoring

This plugin is listed in charly/charly.yml’s compiled_plugins:, so its providers are compiled into the charly binary and register in-process.

The reserved words this plugin serves:

  • add-candy:box — command class
  • cat:box — command class
  • fetch:box — command class
  • refresh:box — command class
  • rm-candy:box — command class
  • set:box — command class
  • write:box — command class

The charly box … AUTHORING verb handlers — a COMMAND-class charly plugin (github.com/opencharly/sdk), NESTED under the core box command group (P14b). charly box set/add-candy/rm-candy/write/cat mutate a project’s charly.yml directly via sdk/kit (kit.SetByDotPath / kit.MappingChild / kit.SaveYAMLNodeFile — the comment-preserving yaml.Node utilities) + the project-rooted file escape hatch (resolveProjectFile path-traversal guard), with ZERO core reentry. charly box fetch/refresh pre-prime / force-re-clone the remote-repo cache by re-running the hidden core __box-fetch / __box-refresh reentry over the generic HostBuild(“cli”) reverse channel — the repo resolver is host-coupled (CHARLY_REPO_OVERRIDE + the refs-backend dispatch + the command:migrate auto-migration). COMPILED-IN, it dispatches IN-PROC via Invoke(OpRun) (kong-parse each verb’s grammar), so the handlers own charly’s real stdio. Placement-invisible (F8): the SAME provider compiles into charly or serves out-of-process.

The CUE schema below is the authoritative grammar for this plugin’s input. It is the same single source that generates the plugin’s Go parameter types and answers the runtime Describe RPC, so this page cannot disagree with either.

// plugin-authoring's OWN self-contained CUE schema — the SINGLE SOURCE for this plugin's
// served declaration surface (there is no schema-less plugin: every plugin ships a
// non-empty schema over Describe).
//
// SELF-CONTAINED and PACKAGE-LESS: it references no base def and carries no package
// clause, so it compiles STANDALONE — the property the SDK's serve-side compile needs
// and the property that lets the host splice `base ++ plugin` at the load gate
// (registerPluginUnitSchema); a self-contained schema that will not splice is a LOUD
// load failure.
//
// NO GO CONSUMER: the plugin declares no typed `plugin_input` (its authored input is
// its pass-through CLI grammar), so this schema generates NO `params` package and has
// NO `cue exp gengotypes` artifact — it is the SERVED documentation/config surface,
// not a code-generation source.
//
// It DOCUMENTS the `command:<word>:box` command surface: the `box` parent and the seven
// words this plugin serves.
#AuthoringPlugin: {
// The command group every word below NESTS under — part of each capability's
// declared IDENTITY (`command:<word>:box`), keyed by charly's provider registry.
parent: "box"
// The command words this plugin serves, all nested under `parent`. A command's
// args are pass-through CLI tokens (there is no typed plugin_input), so these
// words ARE this plugin's authored declaration surface.
commands: ["set", "add-candy", "rm-candy", "fetch", "refresh", "write", "cat"]
// What the plugin does, in one line (the public-docs surface).
contract: string & !=""
}

See also the candy reference for this candy’s install surface.