Skip to content

Releases: suprsend/cli

1.0.1

Choose a tag to compare

@github-actions github-actions released this 10 Jul 05:14
9e0238f

Changelog

  • 9e0238f Feature/category preference digest-schedule and properties (#71)

1.0.0

Choose a tag to compare

@github-actions github-actions released this 21 May 18:04
4378f35

Changelog

  • fff1159 ENG-496: CLI 0.2 config refactor and UX fixes (#65)
  • 4378f35 chore(deps): bump sigstore/cosign-installer in the actions group (#68)
  • e74ecb4 genskills: agent-friendly description + per-command Tips (#66)
  • 1b37645 genskills: narrow cli skill trigger to running commands only (#67)
  • 37e993b profile: URL prompts + tighter validation in add/modify (#35)

1.0.0-beta.1

1.0.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Apr 18:43
0e496e8

First beta of the 1.0 line. Breaking release — every artifact-pulling resource changes its on-disk shape, and several CLI short flags change identity. Try it on a non-production workspace first.

Install: npm i -g suprsend@beta · npx suprsend@beta · plain npm i -g suprsend still resolves to 0.2.24.

Breaking — on-disk artifact layout

Every non-template resource moves to a plural top-level dir + per-item subdirectory. Pulled metadata files now embed an upstream $schema reference.

Resource Before After
Workflow workflow/{slug}.json workflows/{slug}/workflow.json
Schema schema/{slug}.json (json_schema inline) schemas/{slug}/schema.json + schemas/{slug}/payload_schema.json
Event event/event_schema_mapping.json (bundled) events/{slugified-name}/event.json
Preference categories category/categories_preferences.json + category/translation/{locale}.json preference_categories/categories.json + preference_categories/translations/{locale}.json
Template translations translation/{filename}.json translations/{filename}.json
  • Events use dual identity. Backend allows /, spaces, etc.; pull slugifies the name to a directory handle and preserves the original verbatim in event.json#name. mv events/old/ events/new/ does NOT rename the event — edit event.json#name instead.
  • Schema validation runs client-side. Schema push (real and --dry-run) compiles payload_schema.json against JSON Schema draft 2020-12 and rejects schemas whose root type is not object.

Breaking — CLI short flags

Hard breaks; scripts using the dropped forms fail with unknown flag.

Short Old New
-m --commit-message --mode only
-f --offset / --force dropped
-l --limit / --locale --limit only
-n --no-color --dry-run
-F unused --force (uniform)
-S unused --from (sync source)
-q unused --quiet (root-persistent)
-j unused --json (inline payload on push)

Also: --commit is now a clean boolean everywhere (was string on some); --mode added to template list/get/pull; positional slug AND --slug flag both accepted everywhere; TTY-gated prompts (no more silent CI hangs); confirmations on destructive ops; JSON errors when stderr piped, with stable error codes (auth-missing-token, api-not-found, etc.) and exit codes 0/1/2/3/4/5/64.

New

  • suprsend template command group — full CRUD with per-channel variant extraction, mock data, variant ordering.
  • suprsend workspace list · suprsend env · suprsend completion bash|zsh|fish|powershell.
  • MCP server: dynamic workflow-trigger tools register concurrently (cold-start fix for large workspaces); --workflows accepts tag:{tag} selectors; list-tools shows rich descriptions.
  • MCP Registry support — server published to registry.modelcontextprotocol.io on each stable release (skipped for this beta).
  • Glama listing.
  • --dry-run on every destructive command (push / commit / sync / enable / disable).
  • Streaming template pull — large workspaces (~635 templates) went from 120s+ feeling frozen → ~45s with live Pulled N/Total progress.
  • Per-item progress + summary blocks uniformly across push commands; Wrote ... to ... log lines on pulls.
  • Push API errors prefixed with the on-disk path (e.g. schemas/order_confirmation: failed to push: {reason}).

Notable fixes

  • translation list --include-content=true now actually returns content (typed-decode bug).
  • translation get {filename} and event get {name} fetch a single item (were returning the whole workspace).
  • schema list shows name instead of the always-empty title.
  • category push pushes translations alongside categories regardless of --commit (matches docstring).
  • category translation push no longer silent-no-ops when only en.json is present.
  • Cobra's noisy Usage: dump on every error is silenced.

Migration

Two paths. Both assume the new CLI is installed — verify with suprsend --version.

Path A — clean re-pull (recommended)

Backs everything up, re-pulls fresh in the new layout. Loses any uncommitted local edits.

mv suprsend suprsend.old
suprsend workflow pull
suprsend event pull
suprsend schema pull
suprsend category pull
suprsend translation pull
# verify the new layout looks right, then:
rm -rf suprsend.old

Path B — convert in place (preserves uncommitted edits)

Run each block from the repo root. Every block is guarded by a "source exists" check, so it's safe to re-run and safe to skip a resource that doesn't exist locally.

Workflows — pure mv
if [ -d workflow ]; then
  mkdir -p workflows
  find workflow -maxdepth 1 -type f -name '*.json' | while read -r f; do
    slug=$(basename "$f" .json)
    mkdir -p "workflows/$slug"
    mv "$f" "workflows/$slug/workflow.json"
  done
  rmdir workflow 2>/dev/null || true
fi
Schemas — splits each schema file into two; requires jq

Each schema/{slug}.json is split into:

  • schemas/{slug}/schema.json — metadata only (slug, name, description); readonly server fields (status, hash, version_no) and legacy is_enabled are stripped.
  • schemas/{slug}/payload_schema.json — the json_schema field extracted; only written if the source had a non-null json_schema.
if [ -d schema ]; then
  mkdir -p schemas
  find schema -maxdepth 1 -type f -name '*.json' | while read -r f; do
    slug=$(basename "$f" .json)
    mkdir -p "schemas/$slug"
    jq 'del(.json_schema, .status, .hash, .version_no, .is_enabled)' "$f" > "schemas/$slug/schema.json"
    if jq -e '.json_schema != null' "$f" >/dev/null; then
      jq '.json_schema' "$f" > "schemas/$slug/payload_schema.json"
    fi
  done
  rm -rf schema
fi
Events — unbundle event_schema_mapping.json and slugify names; requires jq

Slugifies each event name to a shell-safe directory handle. Rule: optionally preserve a leading $, replace [^a-zA-Z0-9._-] with _, strip leading/trailing non-alphanumeric, truncate to 128. Original name preserved verbatim in event.json#name.

if [ -f event/event_schema_mapping.json ]; then
  mkdir -p events
  jq -c '.events[]' event/event_schema_mapping.json | while read -r ev; do
    name=$(printf '%s' "$ev" | jq -r '.name')
    case "$name" in
      \$*) prefix='$'; body=${name#\$} ;;
      *)   prefix='';  body=$name ;;
    esac
    body=$(printf '%s' "$body" \
      | sed -e 's/[^a-zA-Z0-9._-]/_/g' \
            -e 's/^[^a-zA-Z0-9]*//' \
            -e 's/[^a-zA-Z0-9]*$//' \
      | cut -c1-127 \
      | sed -e 's/[^a-zA-Z0-9]*$//')
    if [ -z "$body" ]; then
      printf 'skip: event name %q has no representable form — rename in SuprSend UI first\n' "$name" >&2
      continue
    fi
    dir="$prefix$body"
    if [ -e "events/$dir" ]; then
      printf 'skip: event name %q slugifies to %q which already exists (collision) — rename in SuprSend UI first\n' "$name" "$dir" >&2
      continue
    fi
    mkdir -p "events/$dir"
    printf '%s' "$ev" | jq . > "events/$dir/event.json"
  done
  rm -rf event
fi
Preference categories — rename dirs and files
if [ -d category ]; then
  mkdir -p preference_categories/translations
  [ -f category/categories_preferences.json ] \
    && mv category/categories_preferences.json preference_categories/categories.json
  if [ -d category/translation ]; then
    find category/translation -maxdepth 1 -type f -name '*.json' -exec mv {} preference_categories/translations/ \;
  fi
  rm -rf category
fi
Template translations — pure directory rename
if [ -d translation ]; then
  mv translation translations
fi
Add the $schema reference — required after Path B

After the structural moves above, each metadata file needs an upstream $schema URL. Easiest is to run suprsend {resource} pull once and let the CLI re-write them — but that overwrites any uncommitted local edits with server state. To preserve edits, use these jq snippets:

# workflows
find workflows -mindepth 2 -maxdepth 2 -type f -name workflow.json | while read -r f; do
  jq 'if has("$schema") then . else {"$schema":"https://schema.suprsend.com/workflow/v1/schema.json"} + . end' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
done

# events
find events -mindepth 2 -maxdepth 2 -type f -name event.json | while read -r f; do
  jq 'if has("$schema") then . else {"$schema":"https://schema.suprsend.com/event/v1/schema.json"} + . end' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
done

# schemas — metadata
find schemas -mindepth 2 -maxdepth 2 -type f -name schema.json | while read -r f; do
  jq 'if has("$schema") then . else {"$schema":"https://schema.suprsend.com/schemas/v1/schema.json"} + . end' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
done

# schemas — payload schemas (point at JSON Schema's own meta-schema)
find schemas -mindepth 2 -maxdepth 2 -type f -name payload_schema.json | while read -r f; do
  jq 'if has("$schema") then . else {"$schema":"https://json-schema.org/draft/2020-12/schema"} + . end' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
done

# preference-categories
if [ -f preference_categories/categories.json ]; then
  f=preference_categories/categories.json
  jq 'if has("$schema") then . else {"$schema":"https://schema.suprsend.com/preference_category/v1/schema.json"} + . end' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
fi

# translations don't carry a $schema ref (no upstream schema exists)

For CLI flag breakages, scripts will fail loudly with `unknown flag...

Read more

0.2.24

Choose a tag to compare

@github-actions github-actions released this 29 Apr 11:59
a91a6bb

Changelog

  • 6908634 chore(deps): bump the actions group with 5 updates (#57)
  • a91a6bb feat: publish to MCP Registry on release (#64)

0.2.23

Choose a tag to compare

@github-actions github-actions released this 23 Apr 09:38
d7f4268

Changelog

  • d7f4268 ci(npm): use Node 24 + setup-node@v6 for trusted publishing (#63)

0.2.22

Choose a tag to compare

@github-actions github-actions released this 23 Apr 09:11
f85ef13

Changelog

0.2.21

Choose a tag to compare

@github-actions github-actions released this 17 Mar 10:27
71b7d30

Changelog

  • 35aa430 Improve CLI for LLM consumption, add get commands and JSON push support (#55)
  • 71b7d30 fix: cross-compile type-morph for each target platform (#56)

0.2.20

Choose a tag to compare

@github-actions github-actions released this 17 Mar 06:09
daa64a2

Changelog

  • 7b76599 Bundle signing key in release (#52)
  • daa64a2 fix(mcp): resolve JSON Schema draft 2020-12 validation errors (#53)

0.2.19

Choose a tag to compare

@github-actions github-actions released this 12 Mar 10:36
aab965a

Changelog

0.2.18

Choose a tag to compare

@gauravverma gauravverma released this 05 Mar 19:00
bf4ec3a

Changelog

  • Upgraded dependencies
  • Added support for generating SKILLS.md