@drbaher/draft-cli 0.8.0 → 0.8.2
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/CHANGELOG.md +27 -0
- package/README.md +95 -153
- package/draft-cli.mjs +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,33 @@ All notable changes to this project will be documented in this file. The
|
|
|
4
4
|
format is loosely based on [Keep a Changelog](https://keepachangelog.com/),
|
|
5
5
|
and the project adheres to semantic versioning once it leaves 0.x.
|
|
6
6
|
|
|
7
|
+
## 0.8.2 — 2026-05-17
|
|
8
|
+
|
|
9
|
+
### Docs
|
|
10
|
+
|
|
11
|
+
- **Animated SVG demo embedded in README.** Self-contained
|
|
12
|
+
(`assets/demo.svg`, ~11 KB) — plays inline on github.com and
|
|
13
|
+
npmjs.com without an asciinema.org dependency. Shows
|
|
14
|
+
`--list-placeholders` then a `--diff` substitution against the
|
|
15
|
+
Common Paper Mutual NDA cover page fixture in `examples/`.
|
|
16
|
+
- Strictly docs + assets; no code or behavior change.
|
|
17
|
+
|
|
18
|
+
## 0.8.1 — 2026-05-17
|
|
19
|
+
|
|
20
|
+
### Docs
|
|
21
|
+
|
|
22
|
+
- **README refreshed for the v2 surface.** New "v2 features" section
|
|
23
|
+
with one-paragraph showcases for each shipped v2 capability (.docx
|
|
24
|
+
round-trip, typed parameters, computed placeholders, positional
|
|
25
|
+
addressing, `parties.json` registry, multi-document bundles,
|
|
26
|
+
`--from-deal` LLM inference). Command reference updated with new
|
|
27
|
+
flags + version annotations. Exit-code table updated with code 4
|
|
28
|
+
(validation / typed / computed / ref / positional) and code 5
|
|
29
|
+
(LLM). Intro paragraph rewritten to reflect the v2 capability
|
|
30
|
+
scope instead of just v1.
|
|
31
|
+
- No code or behavior change. v0.8.0's API surface, schema contract,
|
|
32
|
+
and CLI flags are unchanged. Strictly a docs publish.
|
|
33
|
+
|
|
7
34
|
## 0.8.0 — 2026-05-17
|
|
8
35
|
|
|
9
36
|
### Added
|
package/README.md
CHANGED
|
@@ -1,62 +1,68 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/icon.svg" width="120" alt="draft-cli">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
# draft-cli
|
|
2
6
|
|
|
3
|
-
|
|
4
|
-
bracketed (`[Party A]`) or mustache (`{{Party A}}`) markup, `.docx` yellow
|
|
5
|
-
highlights, or generic-name heuristics; substitutes from CLI flags, a JSON
|
|
6
|
-
params file, or an interactive prompt; writes a ready-to-review draft.
|
|
7
|
+
> Part of the contract-operations CLI suite. **draft-cli** (fill placeholders) → [**nda-review-cli**](https://github.com/DrBaher/nda-review-cli) (review, redline, negotiate) → [**docx2pdf-cli**](https://github.com/DrBaher/docx2pdf-cli) (DOCX → PDF) → [**sign-cli**](https://github.com/DrBaher/sign-cli) (signing + audit). [Showcase site](https://cli.drbaher.com/).
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
[
|
|
9
|
+
[](https://www.npmjs.com/package/@drbaher/draft-cli)
|
|
10
|
+
[](https://www.npmjs.com/package/@drbaher/draft-cli)
|
|
11
|
+
[](https://github.com/DrBaher/Draft-CLI/actions/workflows/ci.yml)
|
|
12
|
+
[](LICENSE)
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
Agent-first placeholder-filler for legal-document templates. Reads bracketed (`[Party A]`) or mustache markup, `.docx` yellow highlights, or generic-name heuristics; substitutes from CLI flags, a JSON params file, a shared `parties.json` registry, or — optionally — values extracted by an LLM from a free-form deal description; writes a ready-to-review draft as text or `.docx` (round-trip, runs and styles preserved). Schema-declared placeholders can be **typed** (`date` / `money` / `party`), **computed** (date arithmetic from another placeholder), **positional** (same text disambiguated by role), and **bundled** (fill multiple templates with one set of values).
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
**The asymmetry is the architecture**: every step is deterministic and machine-driven except the values themselves — which can come from a flag, a params file, a parties registry, or an LLM extracting them from a prose deal description that a human wrote.
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
deterministic work that doesn't need an LLM and shouldn't need to leave your
|
|
20
|
-
machine.
|
|
18
|
+
<p align="center">
|
|
19
|
+
<img src="assets/demo.svg" alt="draft-cli demo: list placeholders then substitute against the Common Paper NDA cover page" width="900">
|
|
20
|
+
</p>
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
--effective-date 2026-06-01 \
|
|
27
|
-
--output draft.md
|
|
22
|
+
## Run this
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx @drbaher/draft-cli@latest --demo
|
|
28
26
|
```
|
|
29
27
|
|
|
30
|
-
Or
|
|
28
|
+
30 seconds, no file authoring required. Walks through a bracketed-template NDA with three placeholders, demoing the full cascade end-to-end. Or if you want to dive into a real template:
|
|
31
29
|
|
|
32
|
-
```
|
|
33
|
-
|
|
30
|
+
```bash
|
|
31
|
+
npm i -g @drbaher/draft-cli
|
|
32
|
+
draft --list-placeholders examples/cp-mutual-nda-coverpage.md
|
|
34
33
|
```
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
any markdown / .docx / stdin source. Review and red-line happens in
|
|
38
|
-
`nda-review-cli`. Conversion to PDF goes through `docx2pdf-cli`. Signing
|
|
39
|
-
goes through `sign-cli`. Each tool stays small and composable.
|
|
35
|
+
## Where to go next
|
|
40
36
|
|
|
41
|
-
|
|
37
|
+
| If you are… | Start here |
|
|
38
|
+
|---|---|
|
|
39
|
+
| **A new user** evaluating the tool | This README's [Quick start](#quick-start) and [What this gives you](#what-this-gives-you) |
|
|
40
|
+
| **A drafter** filling your first template | [GETTING_STARTED.md](GETTING_STARTED.md) — 10-minute walkthrough of the main flows |
|
|
41
|
+
| **An LLM agent** driving the CLI | [AGENTS.md](AGENTS.md) → `draft --list-placeholders --json` → [PARAM_SCHEMA.md](PARAM_SCHEMA.md) for the locked contract |
|
|
42
|
+
| **A schema author** declaring typed / computed / positional placeholders | [PARAM_SCHEMA.md](PARAM_SCHEMA.md) §5 |
|
|
43
|
+
| **A contributor** | [ARCHITECTURE.md](ARCHITECTURE.md), [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
Concept deep-dives live in [PARAM_SCHEMA.md](PARAM_SCHEMA.md) (the v1 + v2 contract); architecture in [ARCHITECTURE.md](ARCHITECTURE.md); FAQ in [FAQ.md](FAQ.md).
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
npm install -g @drbaher/draft-cli
|
|
47
|
-
```
|
|
47
|
+
## Quick start
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
```bash
|
|
50
|
+
# Install
|
|
51
|
+
npm i -g @drbaher/draft-cli
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
# Or run without installing
|
|
52
54
|
npx @drbaher/draft-cli@latest --demo
|
|
55
|
+
|
|
56
|
+
# After install, the binary is named `draft`
|
|
57
|
+
draft --version
|
|
58
|
+
draft --demo
|
|
53
59
|
```
|
|
54
60
|
|
|
55
61
|
Requires Node.js ≥ 18. Tested on Ubuntu and macOS, Node 18 / 20 / 22.
|
|
56
62
|
|
|
57
63
|
### Shell completion
|
|
58
64
|
|
|
59
|
-
```
|
|
65
|
+
```bash
|
|
60
66
|
# bash
|
|
61
67
|
draft --completion bash >> ~/.bashrc
|
|
62
68
|
|
|
@@ -65,40 +71,22 @@ draft --completion zsh > ~/.zsh/completions/_draft
|
|
|
65
71
|
# ensure ~/.zsh/completions is in fpath, then: autoload -U compinit && compinit
|
|
66
72
|
```
|
|
67
73
|
|
|
68
|
-
Completes flags, the `--syntax bracket|mustache` value, `--completion bash|zsh`,
|
|
69
|
-
and file paths for `--params`, `--output`, and `--dictionary`.
|
|
70
|
-
|
|
71
|
-
---
|
|
74
|
+
Completes flags, the `--syntax bracket|mustache` value, `--completion bash|zsh`, and file paths for `--params`, `--output`, `--dictionary`, `--parties`, `--bundle`, `--from-deal`.
|
|
72
75
|
|
|
73
|
-
##
|
|
76
|
+
## What this gives you
|
|
74
77
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
1. Confidentiality. Acme Corporation and Vendor Inc. agree to keep confidential
|
|
89
|
-
any information disclosed under this Agreement.
|
|
90
|
-
|
|
91
|
-
2. Term. This Agreement remains in effect for two years from the
|
|
92
|
-
2026-06-01.
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
What just happened: `draft-cli` detected three bracketed placeholders
|
|
96
|
-
(`[Party A]`, `[Party B]`, `[Effective Date]`), mapped them to the
|
|
97
|
-
canonical keys `party_a`, `party_b`, `effective_date`, and substituted
|
|
98
|
-
in pre-canned demo values. Real runs use your own template and your own
|
|
99
|
-
values.
|
|
100
|
-
|
|
101
|
-
---
|
|
78
|
+
- **Five-tier detection cascade** — `[Title Case]` brackets / `{{mustache}}` / `.docx` highlights (yellow/green/cyan/magenta) / heuristic dictionary / optional LLM. First tier with hits wins; the rest are skipped. Deterministic through tier 4.
|
|
79
|
+
- **`.docx` round-trip** — read a `.docx` template, fill placeholders, write `<basename>-filled.docx` with runs/styles/paragraph-breaks preserved. T3 highlight detection works against real templates (Common Paper, YC SAFE).
|
|
80
|
+
- **Schema file** for canonical keys, alias phrases, defaults, required-ness, and the v2 fields below (`type`, `format`, `currency`, `computed`, `positions`). Without a schema, every detected bracketed phrase is treated as a required parameter.
|
|
81
|
+
- **Typed parameters** — `type: date | money | party` validates and normalizes inputs before substitution. `"01/15/2027"` → `"January 15, 2027"`; `"$5M"` → `"$5,000,000.00"`. Bad inputs exit 4 with per-key error.
|
|
82
|
+
- **Computed placeholders** — derive one placeholder's value from another via date arithmetic: `{ "from": "effective_date", "op": "+", "value": "2 years" }`. Cycle detection at schema parse time.
|
|
83
|
+
- **Positional addressing** — same placeholder text with different semantic roles, addressed by position. Validated against the YC SAFE `$[_____________] × 2` case.
|
|
84
|
+
- **`parties.json` registry** — declare known parties once; schemas reference `ref:parties.<key>.<field>`. Eliminates duplicating party metadata across templates.
|
|
85
|
+
- **Multi-document bundles** — fill multiple templates with one shared set of values: `draft --bundle deal.bundle.json --params deal.json`. Abort-all on any pre-write error.
|
|
86
|
+
- **LLM-from-deal inference** — `--from-deal PATH` reads a free-form deal description and asks the configured T5 provider (Anthropic / OpenAI / `DRAFT_LLM_*`) to fill the schema's parameters. CLI / `--params` still win over inferred values.
|
|
87
|
+
- **Composable I/O** — stdin (`-`), stdout default, `--output PATH`, `template-vault get` integration for `<category>/<name>[@version]` template refs.
|
|
88
|
+
- **Three modes** — `draft` (substitute and emit), `--list-placeholders` (enumerate), `--validate` (completeness check). All support `--json` and `--why`.
|
|
89
|
+
- **Single file, stdlib + `jszip`**, no telemetry, local-first. Network only when the LLM tier is explicitly configured.
|
|
102
90
|
|
|
103
91
|
## End-to-end transcript
|
|
104
92
|
|
|
@@ -139,12 +127,9 @@ ok: 3 parameter(s) resolved
|
|
|
139
127
|
ok
|
|
140
128
|
```
|
|
141
129
|
|
|
142
|
-
---
|
|
143
|
-
|
|
144
130
|
## Detection cascade
|
|
145
131
|
|
|
146
|
-
`draft-cli` finds placeholders by trying five strategies in order. The
|
|
147
|
-
**first non-empty tier wins** and the others are skipped.
|
|
132
|
+
`draft-cli` finds placeholders by trying five strategies in order. The **first non-empty tier wins** and the others are skipped.
|
|
148
133
|
|
|
149
134
|
| Tier | Strategy | When |
|
|
150
135
|
| ---- | -------------------- | ----------------------------------------- |
|
|
@@ -154,45 +139,32 @@ ok
|
|
|
154
139
|
| 4 | Heuristic dictionary | Bundled list of generic names (`Acme Corporation`, `John Doe`, `example@example.com`, etc.). Warn-only by default. |
|
|
155
140
|
| 5 | LLM | Last resort. Runs only when `.env` or process env configures `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, or `DRAFT_LLM_*`. |
|
|
156
141
|
|
|
157
|
-
The cascade is **deterministic through tier 4**. Tier 5 is the only
|
|
158
|
-
non-deterministic step and runs only when you've explicitly configured a
|
|
159
|
-
provider key. Pass `--no-llm` to disable it even when configured. Pass
|
|
160
|
-
`--no-heuristic` to skip tier 4.
|
|
142
|
+
The cascade is **deterministic through tier 4**. Tier 5 is the only non-deterministic step and runs only when you've explicitly configured a provider key. Pass `--no-llm` to disable it even when configured. Pass `--no-heuristic` to skip tier 4.
|
|
161
143
|
|
|
162
144
|
See [PARAM_SCHEMA.md](PARAM_SCHEMA.md) for the full contract.
|
|
163
145
|
|
|
164
|
-
---
|
|
165
|
-
|
|
166
146
|
## Schema file (optional)
|
|
167
147
|
|
|
168
|
-
A sibling `<template>.params.json` lets you declare canonical keys, alias
|
|
169
|
-
phrases, defaults, and whether each parameter is required.
|
|
170
|
-
|
|
171
|
-
**Short form:**
|
|
172
|
-
|
|
173
|
-
```json
|
|
174
|
-
{
|
|
175
|
-
"party_a": ["Party A", "Disclosing Party"],
|
|
176
|
-
"party_b": ["Party B", "Receiving Party"],
|
|
177
|
-
"effective_date": ["Effective Date"]
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Long form** (gates on `_meta`):
|
|
148
|
+
A sibling `<template>.params.json` lets you declare canonical keys, alias phrases, defaults, and required-ness. The **long form** (gated on `_meta`) unlocks the v2 fields:
|
|
182
149
|
|
|
183
150
|
```json
|
|
184
151
|
{
|
|
185
152
|
"_meta": { "schema_version": 1 },
|
|
186
|
-
"party_a":
|
|
187
|
-
"effective_date":
|
|
153
|
+
"party_a": { "aliases": ["Party A"], "required": true, "type": "party" },
|
|
154
|
+
"effective_date": { "aliases": ["Effective Date"], "type": "date", "format": "MMMM d, yyyy" },
|
|
155
|
+
"term_end": { "aliases": ["Term End"], "type": "date",
|
|
156
|
+
"computed": { "from": "effective_date", "op": "+", "value": "2 years" } },
|
|
157
|
+
"purchase_amount": { "aliases": ["Purchase Amount"], "type": "money", "currency": "USD" },
|
|
158
|
+
"blank": { "aliases": ["_____________"], "type": "money", "currency": "USD",
|
|
159
|
+
"positions": [{ "role": "valuation_cap" }, { "role": "purchase_amount" }] }
|
|
188
160
|
}
|
|
189
161
|
```
|
|
190
162
|
|
|
191
|
-
With a schema, `draft-cli` substitutes **only** declared parameters and
|
|
192
|
-
|
|
193
|
-
|
|
163
|
+
With a schema, `draft-cli` substitutes **only** declared parameters and leaves other bracketed text untouched. Without one, every detected bracketed phrase is treated as a required parameter.
|
|
164
|
+
|
|
165
|
+
The **short form** is just an aliases map: `{ "party_a": ["Party A"] }`.
|
|
194
166
|
|
|
195
|
-
|
|
167
|
+
See [PARAM_SCHEMA.md](PARAM_SCHEMA.md) §5 for the full schema contract and the locked design decisions per v2 feature.
|
|
196
168
|
|
|
197
169
|
## Command reference
|
|
198
170
|
|
|
@@ -203,10 +175,15 @@ draft - template body on stdin
|
|
|
203
175
|
draft --demo bundled demo, no file needed
|
|
204
176
|
draft --list-placeholders <t> enumerate placeholders and exit
|
|
205
177
|
draft --validate <t> --params completeness check, no output
|
|
178
|
+
draft --bundle <bundle.json> multi-doc bundle mode (v0.7.0)
|
|
206
179
|
|
|
207
180
|
OPTIONS
|
|
208
181
|
--params FILE JSON file of param values (snake_case keys)
|
|
209
|
-
|
|
182
|
+
--parties PATH parties.json registry for ref:parties.<key>.<field> (v0.6.0)
|
|
183
|
+
--bundle PATH fill multiple templates in one invocation (v0.7.0)
|
|
184
|
+
--from-deal PATH LLM-extract values from a free-form deal description (v0.8.0)
|
|
185
|
+
-o, --output PATH write to PATH (default: stdout). `-` forces stdout.
|
|
186
|
+
For .docx input, default is <basename>-filled.docx (v0.2.0)
|
|
210
187
|
--syntax bracket|mustache
|
|
211
188
|
-i, --interactive prompt for missing required parameters
|
|
212
189
|
--why structured explanation to stderr
|
|
@@ -214,7 +191,7 @@ OPTIONS
|
|
|
214
191
|
-q, --silent suppress all stderr (warnings, --why, notes)
|
|
215
192
|
--no-heuristic disable tier 4
|
|
216
193
|
--yes-heuristic substitute tier-4 matches without confirmation
|
|
217
|
-
--no-llm disable tier 5 even when env is configured
|
|
194
|
+
--no-llm disable tier 5 + --from-deal even when env is configured
|
|
218
195
|
--llm assert that env is configured (fail-fast if not)
|
|
219
196
|
--check-llm one-token roundtrip to verify provider config
|
|
220
197
|
--diff show substitution table without writing output
|
|
@@ -224,81 +201,46 @@ OPTIONS
|
|
|
224
201
|
-V, --version show version
|
|
225
202
|
```
|
|
226
203
|
|
|
227
|
-
Exit codes: `0` ok · `1` i/o · `2` validation · `3` template-vault failure
|
|
228
|
-
· `4` llm failure.
|
|
229
|
-
|
|
230
|
-
---
|
|
204
|
+
Exit codes: `0` ok · `1` i/o · `2` validation · `3` template-vault failure · `4` schema validation / typed parameter / computed / ref / positional · `5` llm failure.
|
|
231
205
|
|
|
232
206
|
## LLM tier (env-gated, opt-in)
|
|
233
207
|
|
|
234
|
-
When tiers 1–4 all find nothing, `draft-cli` falls back to a language model
|
|
235
|
-
**only if** a provider key is in the environment. Read order: `.env` in
|
|
236
|
-
the working directory, then `process.env` (process wins).
|
|
208
|
+
When tiers 1–4 all find nothing, `draft-cli` falls back to a language model **only if** a provider key is in the environment. Read order: `.env` in the working directory, then `process.env` (process wins).
|
|
237
209
|
|
|
238
210
|
```sh
|
|
239
211
|
echo 'ANTHROPIC_API_KEY=sk-ant-…' >> .env
|
|
240
212
|
draft some-freeform-draft.md # tier 5 auto-runs when 1-4 empty
|
|
241
213
|
```
|
|
242
214
|
|
|
243
|
-
Supported providers: Anthropic (`ANTHROPIC_API_KEY`), OpenAI
|
|
244
|
-
(`OPENAI_API_KEY`), or explicit (`DRAFT_LLM_PROVIDER` + `DRAFT_LLM_API_KEY`
|
|
245
|
-
+ optional `DRAFT_LLM_MODEL`). The LLM receives template text only — no
|
|
246
|
-
params file, no `.env` contents, no other data. Pass `--no-llm` to disable
|
|
247
|
-
even when configured.
|
|
215
|
+
Supported providers: Anthropic (`ANTHROPIC_API_KEY`), OpenAI (`OPENAI_API_KEY`), or explicit (`DRAFT_LLM_PROVIDER` + `DRAFT_LLM_API_KEY` + optional `DRAFT_LLM_MODEL`). The LLM receives template text only — no params file, no `.env` contents, no other data. Pass `--no-llm` to disable even when configured.
|
|
248
216
|
|
|
249
|
-
|
|
217
|
+
**v0.8.0 inverse direction — `--from-deal PATH`:** feed prose deal notes and the LLM extracts values for the schema's placeholders (instead of inferring where placeholders are). Uses the same provider config. Errors on provider missing, network failure, or non-JSON response. CLI / `--params` values always win over LLM-inferred ones. See [PARAM_SCHEMA.md](PARAM_SCHEMA.md) §5.
|
|
250
218
|
|
|
251
219
|
## Composability
|
|
252
220
|
|
|
253
|
-
`draft-cli` reads from stdin, writes to stdout by default, and exits with
|
|
254
|
-
distinct codes for each failure class. It composes with `template-vault-cli`
|
|
255
|
-
on the read side and `nda-review-cli` / `docx2pdf-cli` / `sign-cli` on
|
|
256
|
-
the write side:
|
|
221
|
+
`draft-cli` reads from stdin, writes to stdout by default, and exits with distinct codes for each failure class. It composes with `template-vault-cli` on the read side and `nda-review-cli` / `docx2pdf-cli` / `sign-cli` on the write side:
|
|
257
222
|
|
|
258
|
-
```
|
|
259
|
-
template
|
|
260
|
-
|
|
261
|
-
|
|
|
223
|
+
```bash
|
|
224
|
+
# Pull a versioned template, fill it, hand it to review, convert to PDF, sign.
|
|
225
|
+
template-vault get nda/house-mutual@v3 \
|
|
226
|
+
| draft - --from-deal deal-notes.txt --parties parties.json \
|
|
227
|
+
| nda-review --redline \
|
|
262
228
|
| docx2pdf - draft.pdf
|
|
229
|
+
sign-cli send draft.pdf --signer counsel@counterparty.com
|
|
263
230
|
```
|
|
264
231
|
|
|
265
|
-
|
|
266
|
-
shell pipelines.
|
|
267
|
-
|
|
268
|
-
---
|
|
269
|
-
|
|
270
|
-
## Part of the contract-operations suite
|
|
271
|
-
|
|
272
|
-
`draft-cli` is one of a small set of single-purpose CLIs for contract
|
|
273
|
-
operations. See [cli.drbaher.com](https://cli.drbaher.com) for the suite
|
|
274
|
-
landing page.
|
|
275
|
-
|
|
276
|
-
- **[nda-review-cli](https://github.com/DrBaher/nda-review-cli)** —
|
|
277
|
-
draft, review, and negotiate NDAs against your own house playbook.
|
|
278
|
-
Deterministic by default; opt-in LLM augmentation.
|
|
279
|
-
- **[docx2pdf-cli](https://github.com/DrBaher/docx2pdf-cli)** —
|
|
280
|
-
honest DOCX → PDF conversion with batch processing, parallel runs,
|
|
281
|
-
font validation.
|
|
282
|
-
- **[sign-cli](https://github.com/DrBaher/sign-cli)** —
|
|
283
|
-
fully-offline PAdES e-signature with hash-chained audit events,
|
|
284
|
-
RFC 3161 timestamps.
|
|
285
|
-
|
|
286
|
-
`template-vault-cli` (a Git-backed, clause-aware package manager for
|
|
287
|
-
legal-document templates) is the natural upstream of `draft-cli` and
|
|
288
|
-
will join the suite when it ships.
|
|
289
|
-
|
|
290
|
-
---
|
|
232
|
+
Each tool stays small and replaceable. None of them know about each other beyond the standard `stdin / stdout / argv / exit codes` contract.
|
|
291
233
|
|
|
292
234
|
## Documentation
|
|
293
235
|
|
|
294
|
-
- [GETTING_STARTED.md](GETTING_STARTED.md) — 10-minute
|
|
236
|
+
- [GETTING_STARTED.md](GETTING_STARTED.md) — 10-minute walkthrough of the main flows.
|
|
295
237
|
- [AGENTS.md](AGENTS.md) — JSON shapes, exit codes, library use; everything an LLM agent driving `draft-cli` needs.
|
|
296
|
-
- [
|
|
297
|
-
- [
|
|
298
|
-
- [FAQ.md](FAQ.md) —
|
|
299
|
-
- [
|
|
300
|
-
- [
|
|
301
|
-
- [
|
|
238
|
+
- [ARCHITECTURE.md](ARCHITECTURE.md) — how the cascade, schema, and substitution pipeline fit together.
|
|
239
|
+
- [PARAM_SCHEMA.md](PARAM_SCHEMA.md) — v1 + v2 schema contract; locked decisions per feature.
|
|
240
|
+
- [FAQ.md](FAQ.md) — common questions about detection rules, T4 heuristics, and the LLM tier.
|
|
241
|
+
- [V2_BRIEFS_REMAINING.md](V2_BRIEFS_REMAINING.md) — design briefs for the four v2 items shipped after v0.1.x; historical now that all four have landed.
|
|
242
|
+
- [SECURITY.md](SECURITY.md) — reporting vulnerabilities.
|
|
243
|
+
- [CHANGELOG.md](CHANGELOG.md) — every shipped version with locked design decisions.
|
|
302
244
|
|
|
303
245
|
## License
|
|
304
246
|
|
package/draft-cli.mjs
CHANGED