saffron-ai 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/dist-pkg/cli.js +106 -94
- package/package.json +2 -1
- package/skills/saffron/SKILL.md +152 -0
- package/skills/saffron/references/config.md +90 -0
- package/skills/saffron/references/syntax.md +167 -0
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Like a maturing Cucumber suite, most of a new feature file is steps you already
|
|
|
24
24
|
|
|
25
25
|
**Step sets** (shipped): `.saffron` files — a superset dialect of Gherkin — add the `StepSet:` keyword for named, reusable step sequences invoked with `StepSet <name>` inside any scenario. Sets expand at parse time, so their steps cache and seed like ordinary steps; editing a set makes every invoking scenario honestly stale (re-recorded mostly seeded), and heal edits route to the set definition — one fix, every caller follows. Sets are **project-wide**: keep application-wide flows in a sets-only library file (convention: `features/shared.steps.saffron`) and invoke them from any feature.
|
|
26
26
|
|
|
27
|
-
**IDE integration & authoring** (shipped): `saffron steps` lists the project vocabulary with recorded/divergent/unrecorded badges (`--snippets` for native VS Code completion), `saffron mcp` serves it to AI assistants, `saffron lsp` brings completion/navigation/diagnostics to **JetBrains** (incl. Community editions via LSP4IJ) and Neovim, `saffron author` drafts feature files from prose in your own vocabulary, and duplicate wordings that record identical actions get **behavior-proven rename proposals**. The **Saffron VS Code extension**
|
|
27
|
+
**IDE integration & authoring** (shipped): `saffron steps` lists the project vocabulary with recorded/divergent/unrecorded badges (`--snippets` for native VS Code completion), `saffron mcp` serves it to AI assistants, `saffron lsp` brings completion/navigation/diagnostics to **JetBrains** (incl. Community editions via LSP4IJ) and Neovim, `saffron author` drafts feature files from prose in your own vocabulary, and duplicate wordings that record identical actions get **behavior-proven rename proposals**. The **Saffron VS Code extension** is on the [Marketplace](https://marketplace.visualstudio.com/items?itemName=ChathurangaJayasinghe.saffron-vscode) (`code --install-extension ChathurangaJayasinghe.saffron-vscode`).
|
|
28
28
|
|
|
29
29
|
Data tables and doc strings are first-class: 2-column key/value tables parameterize the recording (`<table:username>`), multi-row record tables parameterize per cell (`<table:1:firstName>`), and `"""` doc strings record as `<docstring>` — so editing *values* or *content* replays at zero tokens, while structural changes (keys, headers, row counts) honestly re-record. Unambiguous params are scenario-wide, so a later assertion on a note's text follows content edits too. **Secrets** stay out of everything: `{env:VAR}` resolves from the environment (or a git-ignored `.env`) at replay, recordings and reports are masked back to the token, and missing variables fail fast by name.
|
|
30
30
|
|
|
@@ -33,9 +33,12 @@ Data tables and doc strings are first-class: 2-column key/value tables parameter
|
|
|
33
33
|
```bash
|
|
34
34
|
npm install --save-dev saffron-ai
|
|
35
35
|
npx playwright install chromium
|
|
36
|
+
npx saffron init # config + the Saffron agent skill for your AI assistants
|
|
36
37
|
npx saffron run
|
|
37
38
|
```
|
|
38
39
|
|
|
40
|
+
**Built for the AI era:** the package ships an [Agent Skill](https://agentskills.io) that teaches Claude Code, Codex, Cursor, Copilot and any skill-aware agent to write Saffron tests efficiently — reuse recorded wordings, keep assertions sacred, secrets as `{env:VAR}` — so the tests your agents write replay at zero tokens instead of paying for near-duplicate recordings.
|
|
41
|
+
|
|
39
42
|
CI tip: `saffron run --strict` treats yellow (passed-with-adaptation) as a
|
|
40
43
|
failure until its cache proposal is reviewed — cached-green-only builds.
|
|
41
44
|
|
|
@@ -63,13 +66,14 @@ node dist/cli/index.js -p examples accept --all
|
|
|
63
66
|
|
|
64
67
|
| Command | What it does |
|
|
65
68
|
|---|---|
|
|
66
|
-
| `saffron run [paths] [--headed] [--filter @
|
|
69
|
+
| `saffron run [paths] [--headed] [--filter @tags] [--no-agent] [--strict] [--browser b] [--workers n] [--heal-model m] [--no-verify] [--no-reuse] [--model m] [--storage-state f]` | Run features. Cached replays are deterministic; misses/failures escalate to the agent (unless `--no-agent`). Replay cross-browser with `--browser firefox\|webkit`, parallelize with `--workers N`, heal on a cheaper model with `--heal-model`. Exit 1 on red (and on yellow with `--strict`). |
|
|
67
70
|
| `saffron accept [file \| --all] [--with-feature-edit] [--propagate]` | Promote cache proposals to committed caches; `--with-feature-edit` also rewrites the adapted steps in the `.feature` file (and keeps the cache in sync); `--propagate` applies the heal's locator fixes to every other cache using the same locator — one heal repairs N scenarios before they ever fail. No args: list pending proposals. |
|
|
68
71
|
| `saffron reject [file \| --all]` | Discard proposals; the agent will try again next run. |
|
|
69
72
|
| `saffron steps [search] [--json] [--snippets]` | List/search the step vocabulary (files + caches) with recorded/divergent/unrecorded badges and usage; `--snippets` writes `.vscode/saffron.code-snippets` for native VS Code completion. |
|
|
70
73
|
| `saffron mcp` | Serve the vocabulary to AI assistants over stdio MCP (`search_steps`, `list_step_sets`) — e.g. `claude mcp add saffron -- npx saffron mcp`. |
|
|
71
74
|
| `saffron author <prose-file> [-o out]` | Draft a `.saffron` feature file from plain-paragraph requirements, reusing the project's step vocabulary (AI; reports how many lines are seedable). |
|
|
72
75
|
| `saffron lsp` | Run the Saffron language server over stdio — JetBrains (LSP4IJ/Ultimate), Neovim, any LSP editor: badge completion, StepSet go-to-definition, hover, diagnostics. |
|
|
76
|
+
| `saffron init [--agents list]` | Make the project agent-ready: installs the bundled **Saffron agent skill** into `.claude/skills` and `.agents/skills` (Copilot/Cursor via `--agents`), registers the `saffron mcp` server in `.mcp.json` / `.cursor/mcp.json` / `.vscode/mcp.json`, adds a managed block to `AGENTS.md`/`CLAUDE.md`, scaffolds config. |
|
|
73
77
|
| `saffron report` | Open the latest HTML report. |
|
|
74
78
|
|
|
75
79
|
Configuration lives in `saffron.config.json` at your project root:
|