faf-cli 7.11.0 → 7.12.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 CHANGED
@@ -132,20 +132,23 @@ faf memory etch "a durable fact" --id my-fact
132
132
  faf memory show
133
133
  ```
134
134
 
135
- ### What's New in v7.11.0 — The VS Code Edition
135
+ ### What's New in v7.12.0 — The Open Renderers Edition
136
136
 
137
- **faf-cli becomes a library a VS Code extension can import — `computeDrift()` joins the public API and `faf drift --json` mirrors it on the CLI. Plus `faf export --llms`.**
137
+ **faf-cli opens its renderers, injector and `faf auto` update chain as public exports — consumers compose instead of port — and `faf export --agents` is idempotent again: one block, every run.**
138
138
 
139
139
  ```ts
140
- import { computeDrift, scoreFafYaml, findFafFile, generateProjectHtml } from 'faf-cli';
140
+ import { renderAgentsMd, enrichFromRepo, injectFafBlock, updateExistingFaf, writeFaf } from 'faf-cli';
141
141
  ```
142
142
 
143
- - **`computeDrift(fafPath, dir?)`** — the context-drift check is now a pure exported function, not just a command. A VS Code extension reads the mtime relationship between `project.faf` and its `CLAUDE.md` / `AGENTS.md` / `.cursorrules` / `GEMINI.md` directly, in process.
144
- - **`faf drift --json`** — the CLI mirror: a `faf_version` / `project` / `source` header over the report, raw `*_ms` mtimes and deltas (the consumer formats its own "5d ago"). No `project.faf` → `{ error, hint }` JSON, exit 2. Bare `faf drift` is unchanged.
145
- - **`faf export --llms`** — writes `llms.txt` (llmstxt.org shape) from the authored 6 Ws. Opt-in, like `--grok`.
143
+ - **Renderers are public** — `renderAgentsMd` · `renderGeminiMd` · `renderCursorrules` · `renderClaudeMd` · `renderCopilotInstructions` and their `write*` pairs. An MCP server or an editor extension writes the same bytes `faf export` writes, instead of carrying its own copy that drifts.
144
+ - **`enrichFromRepo(dir, data)`** — the repo-facts step `faf export --agents` runs first (commands, key files, secrets location) is exported too. Hand-authored values win; detection fills the gaps.
145
+ - **`updateExistingFaf(dir, existing)`** — the exact chain `faf auto` runs on an existing `project.faf`: existing wins, then interrogated → detected → Turbo-Cat → Relentless fill the empties. `faf auto` itself now calls it. `writeFaf` / `serializeFaf` write the file the way faf-cli does.
146
+ - **One injector, one rule** — `injectFafBlock` / `findFafBlock` locate the managed block by whole marker lines at column 0. Fenced examples are skipped, an unbalanced fence inside the block cannot hide the end marker, CRLF and BOM survive. A block that lost its end marker is prefixed, never overwritten.
147
+ - **Fixed: `faf export --agents` stacked its own output.** 7.1.4–7.11.0 quoted the marker tokens in prose and matched them as substrings, so every re-run appended the old block's tail (58 → 107 → 156 lines). Fixed at both ends; a file already stacked is repaired on its next export.
146
148
 
147
149
  **Recent sprint**
148
150
 
151
+ - 🧩 [7.12.0](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.12.0) The Open Renderers Edition
149
152
  - 🖥️ [7.11.0](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.11.0) The VS Code Edition
150
153
  - 📚 [7.10.0](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.10.0) The Full-Facts Edition
151
154
  - 🌱 [7.9.0](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.9.0) The Git-Flow Edition