@docusign/cli 1.0.0-rc
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 +15 -0
- package/dist/index.mjs +720 -0
- package/dist/templates/agreement-manager/README.md +125 -0
- package/dist/templates/agreement-manager/configs/agreement-manager-manifest.json +92 -0
- package/dist/templates/agreement-manager/files/test/MicroLines Employment Offer Letter.docx +0 -0
- package/dist/templates/agreement-manager/files/train/Penny Goodwin Employment Offer Letter.docx +0 -0
- package/dist/templates/agreement-manager/tests/.gitkeep +0 -0
- package/dist/templates/ai-skills/.claude/settings.json +5 -0
- package/dist/templates/ai-skills/.claude/skills/ds-agm-autopilot/SKILL.md +623 -0
- package/dist/templates/ai-skills/.claude/skills/ds-agreement-manager-workflow/SKILL.md +331 -0
- package/dist/templates/ai-skills/.claude/skills/ds-testing/SKILL.md +130 -0
- package/dist/templates/ai-skills/.cursor/rules/docusign.mdc +9 -0
- package/dist/templates/ai-skills/.gemini/instructions.md +9 -0
- package/dist/templates/ai-skills/.github/instructions/docusign.instructions.md +94 -0
- package/package.json +90 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ds-agreement-manager-workflow
|
|
3
|
+
description: Full Docusign Agreement Manager workflow guide — scaffold, auth, manifest, validate, upload, ingest, and test. Use when starting a new Agreement Manager project or asking how to set up AI document extraction with Docusign Agreement Manager.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Docusign Agreement Manager Workflow
|
|
7
|
+
|
|
8
|
+
Complete step-by-step guide for setting up AI-powered document extraction with Docusign Agreement Manager.
|
|
9
|
+
|
|
10
|
+
## Quick Reference
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
ds auth login -e demo # 1. Authenticate
|
|
14
|
+
ds agm get catalog # 2. Fetch standard catalog
|
|
15
|
+
# Edit agreement-manager/configs/agreement-manager-manifest.json # 3. Define types/fields
|
|
16
|
+
ds agm validate # 4. Validate manifest
|
|
17
|
+
ds agm upload -y # 5. Upload to platform
|
|
18
|
+
ds agm ingest --directory ./agreement-manager/files/test -y # 6. Ingest documents
|
|
19
|
+
ds agm test generate-test-template -y # 7. Generate test CSV
|
|
20
|
+
ds agm test run -y # 8. Run tests
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 1: Authenticate
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
ds auth login -e <environment>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Environments:** `demo`, `production`
|
|
32
|
+
|
|
33
|
+
Verify: `ds auth test`
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Step 2: Fetch Standard Catalog
|
|
38
|
+
|
|
39
|
+
Download standard agreement types and fields available in your account:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
ds agm get catalog
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Creates in `agreement-manager/files/`:
|
|
46
|
+
|
|
47
|
+
- `standard-catalog.json` — standard agreement types and fields
|
|
48
|
+
- `custom-catalog.json` — existing custom types in your account
|
|
49
|
+
|
|
50
|
+
Use these to reference standard field names and avoid naming conflicts.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Step 3: Define Your Manifest
|
|
55
|
+
|
|
56
|
+
**Location:** `agreement-manager/configs/agreement-manager-manifest.json`
|
|
57
|
+
|
|
58
|
+
### Custom Fields
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"key": "C_TerminationDate",
|
|
63
|
+
"displayName": "Termination Date",
|
|
64
|
+
"aiDefinition": "The date on which this agreement or contract is terminated or expires.",
|
|
65
|
+
"category": "TerminationCategory",
|
|
66
|
+
"fieldType": "DateTime",
|
|
67
|
+
"customExtractionEnabled": true,
|
|
68
|
+
"examples": {
|
|
69
|
+
"en": [
|
|
70
|
+
{ "exampleText": "This agreement shall terminate on December 31, 2025", "confirmedValue": "2025-12-31" },
|
|
71
|
+
{ "exampleText": "Termination effective as of January 15, 2026", "confirmedValue": "2026-01-15" }
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Field rules:**
|
|
78
|
+
|
|
79
|
+
- `key` must start with `C_` (e.g., `C_TerminationDate`)
|
|
80
|
+
- `displayName` is the human-readable display name (referenced in agreement types)
|
|
81
|
+
- `aiDefinition` describes what the field represents — required when `customExtractionEnabled: true`
|
|
82
|
+
- `fieldType`: `String`, `Number`, `DateTime`, or `Dropdown`
|
|
83
|
+
- `examples` required when `customExtractionEnabled: true` (3+ recommended)
|
|
84
|
+
|
|
85
|
+
**Field categories:** `FinancialCategory`, `GeneralCategory`, `HumanResourcesCategory`, `LegalAndComplianceCategory`, `LifecycleCategory`, `PaymentCategory`, `RenewalCategory`, `TerminationCategory`, `OtherCategory`
|
|
86
|
+
|
|
87
|
+
### Dropdown Fields
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"key": "C_TerminationReason",
|
|
92
|
+
"displayName": "Termination Reason",
|
|
93
|
+
"aiDefinition": "The reason why this agreement is being terminated.",
|
|
94
|
+
"fieldType": "Dropdown",
|
|
95
|
+
"customExtractionEnabled": true,
|
|
96
|
+
"dropdownOptions": [{ "name": "Performance Issues" }, { "name": "Cost Reduction" }, { "name": "Mutual Agreement" }, { "name": "Other" }],
|
|
97
|
+
"examples": {
|
|
98
|
+
"en": [{ "exampleText": "Due to repeated quality failures", "confirmedValue": "Performance Issues" }]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Custom Agreement Types
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"key": "C_SupplierTermination",
|
|
108
|
+
"displayName": "Supplier Termination Letter",
|
|
109
|
+
"aiDefinition": "A letter formally terminating a supplier agreement or vendor contract.",
|
|
110
|
+
"category": "BusinessServices",
|
|
111
|
+
"customExtractionEnabled": true,
|
|
112
|
+
"fields": {
|
|
113
|
+
"additionalStandardFields": ["Effective Date", "Company Name"],
|
|
114
|
+
"customFields": ["Termination Date", "Termination Reason"]
|
|
115
|
+
},
|
|
116
|
+
"docs": ["supplier-term-001.pdf", "supplier-term-002.pdf"]
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Agreement type rules:**
|
|
121
|
+
|
|
122
|
+
- `key` must start with `C_`
|
|
123
|
+
- `displayName` is the human-readable name
|
|
124
|
+
- `aiDefinition` describes the document type — required when `customExtractionEnabled: true`
|
|
125
|
+
- `category`: `BusinessServices`, `HumanResources`, `Miscellaneous`, `OtherDocuments`
|
|
126
|
+
- `customFields` references fields by `displayName`, not `key`
|
|
127
|
+
- `additionalStandardFields` uses the display name from the standard catalog
|
|
128
|
+
- `docs` are filenames only (not paths) — files must be in `agreement-manager/files/train/`
|
|
129
|
+
|
|
130
|
+
### Extending Standard Agreement Types
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
{
|
|
134
|
+
"key": "ConsultingDocumentData",
|
|
135
|
+
"displayName": "Consulting Agreement",
|
|
136
|
+
"fields": {
|
|
137
|
+
"additionalStandardFields": ["Payment Terms"],
|
|
138
|
+
"customFields": ["Project Code", "Hourly Rate"]
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Step 4: Validate
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
ds agm validate
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
| Error | Cause | Fix |
|
|
152
|
+
| ----------------- | -------------------------------------------------------------------- | ---------------------------------- |
|
|
153
|
+
| name format | Missing `C_` prefix | Add `C_` to custom field/type keys |
|
|
154
|
+
| duplicate | Same `displayName` used twice | Rename one |
|
|
155
|
+
| unreferenced | Field not used by any type | Add to a type or remove it |
|
|
156
|
+
| unknown field | Type references undefined field `displayName` | Check displayName spelling |
|
|
157
|
+
| standard conflict | `displayName` conflicts with standard | Choose a different displayName |
|
|
158
|
+
| AI constraint | `customExtractionEnabled: true` but missing examples or aiDefinition | Add both |
|
|
159
|
+
| dropdown mismatch | confirmedValue not in dropdownOptions | Use exact option name |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Step 5: Upload
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Preview changes first
|
|
167
|
+
ds agm upload --dry-run
|
|
168
|
+
|
|
169
|
+
# Deploy to account
|
|
170
|
+
ds agm upload -y
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Upload is idempotent — re-uploading the same manifest is safe.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Step 6: Ingest Documents
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Single file
|
|
181
|
+
ds agm ingest --files ./agreement-manager/files/test/agreement.pdf -y
|
|
182
|
+
|
|
183
|
+
# Directory
|
|
184
|
+
ds agm ingest --directory ./agreement-manager/files/test -y
|
|
185
|
+
|
|
186
|
+
# Recursive (includes subdirectories)
|
|
187
|
+
ds agm ingest --directory ./agreement-manager/files/test --recursive -y
|
|
188
|
+
|
|
189
|
+
# Preview
|
|
190
|
+
ds agm ingest --directory ./agreement-manager/files/test --dry-run
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Supported formats:** PDF, DOCX, DOC, HTML, XLSX, XLS, XLSB, PPTX, PPT, PPSX, RTF, JPG, PNG, TIF
|
|
194
|
+
|
|
195
|
+
Tracked in `agreement-manager/files/tracking.json` to prevent duplicate ingestion.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Step 7: Generate Test Template
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Basic template
|
|
203
|
+
ds agm test generate-test-template -y
|
|
204
|
+
|
|
205
|
+
# Pre-fill with AI extractions from ingested documents
|
|
206
|
+
ds agm test generate-test-template -y --prefill-extractions
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Output: `agreement-manager/tests/testing.csv`
|
|
210
|
+
|
|
211
|
+
The CSV has one row per ingested document and one column per field. Fill in your expected values to define what "correct" extraction looks like.
|
|
212
|
+
|
|
213
|
+
For AI-assisted filling, use the `/ds-testing` skill.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Step 8: Run Extraction Tests
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# Exact match
|
|
221
|
+
ds agm test run -y
|
|
222
|
+
|
|
223
|
+
# Partial match (more lenient — good for long text fields)
|
|
224
|
+
ds agm test run -y --partial-match
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Output:**
|
|
228
|
+
|
|
229
|
+
- `agreement-manager/output/{timestamp}-field-test-results.csv` — field-level accuracy
|
|
230
|
+
- `agreement-manager/output/{timestamp}-agreement-type-test-results.csv` — type classification accuracy
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Example: Complete Manifest
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"version": "1.0.0",
|
|
239
|
+
"defaultLocale": "en",
|
|
240
|
+
"namespace": "com.acme.supplier-management@1.0.0",
|
|
241
|
+
"standardAgreementTypes": [],
|
|
242
|
+
"customAgreementTypes": [
|
|
243
|
+
{
|
|
244
|
+
"key": "C_SupplierTermination",
|
|
245
|
+
"displayName": "Supplier Termination Letter",
|
|
246
|
+
"aiDefinition": "A letter formally terminating a supplier agreement or vendor contract.",
|
|
247
|
+
"category": "BusinessServices",
|
|
248
|
+
"customExtractionEnabled": true,
|
|
249
|
+
"fields": {
|
|
250
|
+
"additionalStandardFields": ["Effective Date", "Company Name"],
|
|
251
|
+
"customFields": ["Termination Date", "Termination Reason", "Notice Period Days"]
|
|
252
|
+
},
|
|
253
|
+
"docs": ["supplier-term-001.pdf", "supplier-term-002.pdf"]
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
"fields": [
|
|
257
|
+
{
|
|
258
|
+
"key": "C_TerminationDate",
|
|
259
|
+
"displayName": "Termination Date",
|
|
260
|
+
"aiDefinition": "The date on which this agreement or contract is terminated or expires.",
|
|
261
|
+
"category": "TerminationCategory",
|
|
262
|
+
"fieldType": "DateTime",
|
|
263
|
+
"customExtractionEnabled": true,
|
|
264
|
+
"examples": {
|
|
265
|
+
"en": [
|
|
266
|
+
{ "exampleText": "This agreement shall terminate on December 31, 2025", "confirmedValue": "2025-12-31" },
|
|
267
|
+
{ "exampleText": "Termination effective as of January 15, 2026", "confirmedValue": "2026-01-15" },
|
|
268
|
+
{ "exampleText": "termination is effective immediately as of the date of this agreement", "confirmedValue": "2025-08-20" }
|
|
269
|
+
]
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"key": "C_TerminationReason",
|
|
274
|
+
"displayName": "Termination Reason",
|
|
275
|
+
"aiDefinition": "The reason why this agreement is being terminated.",
|
|
276
|
+
"category": "TerminationCategory",
|
|
277
|
+
"fieldType": "Dropdown",
|
|
278
|
+
"customExtractionEnabled": true,
|
|
279
|
+
"dropdownOptions": [
|
|
280
|
+
{ "name": "Performance Issues" },
|
|
281
|
+
{ "name": "Cost Reduction" },
|
|
282
|
+
{ "name": "Contract Expiration" },
|
|
283
|
+
{ "name": "Mutual Agreement" },
|
|
284
|
+
{ "name": "Convenience" },
|
|
285
|
+
{ "name": "Other" }
|
|
286
|
+
],
|
|
287
|
+
"examples": {
|
|
288
|
+
"en": [
|
|
289
|
+
{ "exampleText": "Due to consistent quality issues with delivered components", "confirmedValue": "Performance Issues" },
|
|
290
|
+
{ "exampleText": "Pursuant to Section 4.2a, termination is effective immediately", "confirmedValue": "Convenience" }
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"key": "C_NoticePeriodDays",
|
|
296
|
+
"displayName": "Notice Period Days",
|
|
297
|
+
"aiDefinition": "The number of days of advance notice required before termination takes effect.",
|
|
298
|
+
"category": "TerminationCategory",
|
|
299
|
+
"fieldType": "Number",
|
|
300
|
+
"customExtractionEnabled": true,
|
|
301
|
+
"examples": {
|
|
302
|
+
"en": [
|
|
303
|
+
{ "exampleText": "with 30 days written notice as required by the agreement", "confirmedValue": "30" },
|
|
304
|
+
{ "exampleText": "effective immediately (0 days notice)", "confirmedValue": "0" }
|
|
305
|
+
]
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
],
|
|
309
|
+
"metadata": {
|
|
310
|
+
"createdAt": "2025-01-01T00:00:00Z",
|
|
311
|
+
"updatedAt": "2025-01-01T00:00:00Z",
|
|
312
|
+
"version": "1.0.0",
|
|
313
|
+
"author": "Your Name",
|
|
314
|
+
"description": "Supplier termination letter extraction",
|
|
315
|
+
"tags": [],
|
|
316
|
+
"lastManifestHash": ""
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Iterating on Results
|
|
324
|
+
|
|
325
|
+
If tests show low accuracy:
|
|
326
|
+
|
|
327
|
+
1. **Add more examples** — 5–10 per field improves accuracy significantly
|
|
328
|
+
2. **Improve aiDefinition** — be specific about what the field represents
|
|
329
|
+
3. **Add training docs** — more diverse training documents in `agreement-manager/files/train/`
|
|
330
|
+
4. **Check confirmedValues** — ensure examples use the exact format Navigator expects (e.g., ISO dates for DateTime)
|
|
331
|
+
5. Re-upload and re-ingest after manifest changes
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ds-testing
|
|
3
|
+
description: AI-assisted Agreement Manager testing workflow. Reads your test documents, pre-fills expected values in the test CSV, runs extraction tests, and explains results. Use when you want to test how well Agreement Manager extracts fields from your documents.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Docusign Agreement Manager Testing — AI-Assisted
|
|
7
|
+
|
|
8
|
+
This skill guides you through the Navigator testing workflow by reading your documents, pre-filling the test CSV with expected values, running extraction tests, and interpreting results.
|
|
9
|
+
|
|
10
|
+
## What This Skill Does
|
|
11
|
+
|
|
12
|
+
1. Checks your test documents are ingested
|
|
13
|
+
2. Generates the test CSV template
|
|
14
|
+
3. **Reads each document** and fills in expected field values
|
|
15
|
+
4. Runs the test
|
|
16
|
+
5. Explains the results and suggests improvements
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Execution Steps
|
|
21
|
+
|
|
22
|
+
### Step 1: Verify auth
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
ds auth test
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If auth fails, prompt user to run `ds auth login -e <demo|production>`.
|
|
29
|
+
|
|
30
|
+
### Step 2: Verify test documents
|
|
31
|
+
|
|
32
|
+
Check `agreement-manager/files/test/` for documents. If empty, ask the user to add files (supported: PDF, DOCX, DOC, HTML, XLSX, XLS, XLSB, PPTX, PPT, PPSX, RTF, JPG, PNG, TIF).
|
|
33
|
+
|
|
34
|
+
Check `agreement-manager/files/tracking.json` to see which files are already ingested.
|
|
35
|
+
|
|
36
|
+
If documents exist but are not ingested:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ds agm ingest --directory ./agreement-manager/files/test -y
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Step 3: Generate test template with pre-filled extractions
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
ds agm test generate-test-template -y --prefill-extractions
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This creates `agreement-manager/tests/testing.csv` with:
|
|
49
|
+
|
|
50
|
+
- One row per ingested document
|
|
51
|
+
- Platform's AI extraction results pre-filled where available
|
|
52
|
+
- Empty cells where the platform couldn't extract a value
|
|
53
|
+
|
|
54
|
+
### Step 4: Read the CSV and each document
|
|
55
|
+
|
|
56
|
+
Read `agreement-manager/tests/testing.csv` to understand the structure:
|
|
57
|
+
|
|
58
|
+
- Which documents are in the test
|
|
59
|
+
- Which fields need expected values
|
|
60
|
+
|
|
61
|
+
For each document listed in the CSV, read the document file (use the Read tool on PDF/DOCX). Extract the correct values for each field column based on the document's actual content.
|
|
62
|
+
|
|
63
|
+
### Step 5: Fill in expected values
|
|
64
|
+
|
|
65
|
+
Update `agreement-manager/tests/testing.csv`:
|
|
66
|
+
|
|
67
|
+
- For each row (document), fill in the expected values for each field column
|
|
68
|
+
- Use the field's `fieldType` to format values correctly:
|
|
69
|
+
- `DateTime`: ISO format `YYYY-MM-DD`
|
|
70
|
+
- `Number`: numeric value only (e.g., `1500`, not `$1,500`)
|
|
71
|
+
- `String`: the exact extracted text
|
|
72
|
+
- `Dropdown`: must match one of the `dropdownOptions` exactly
|
|
73
|
+
- Leave a cell empty if the field genuinely does not appear in that document
|
|
74
|
+
|
|
75
|
+
**Important:** Read `agreement-manager/configs/agreement-manager-manifest.json` to understand each field's type and dropdown options before filling values.
|
|
76
|
+
|
|
77
|
+
### Step 6: Run the test
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
ds agm test run -y
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Step 7: Interpret results
|
|
84
|
+
|
|
85
|
+
Read the output files:
|
|
86
|
+
|
|
87
|
+
- `agreement-manager/output/{timestamp}-field-test-results.csv` — field-level results
|
|
88
|
+
- `agreement-manager/output/{timestamp}-agreement-type-test-results.csv` — type classification results
|
|
89
|
+
|
|
90
|
+
For each FAIL:
|
|
91
|
+
|
|
92
|
+
| Failure Type | Likely Cause | Suggestion |
|
|
93
|
+
| --------------------- | ----------------------------------- | ------------------------------------------------------------------ |
|
|
94
|
+
| Wrong value extracted | Poor examples in manifest | Add more specific examples with exact text patterns from your docs |
|
|
95
|
+
| Empty extraction | Field not enabled or no examples | Set `customExtractionEnabled: true` and add examples |
|
|
96
|
+
| Wrong agreement type | AI not trained on your doc style | Add more `docs` to the agreement type, add better `aiDefinition` |
|
|
97
|
+
| Dropdown value off | Extracted text doesn't match option | Add example with that exact option as `confirmedValue` |
|
|
98
|
+
|
|
99
|
+
### Step 8: Report results to user
|
|
100
|
+
|
|
101
|
+
Summarize:
|
|
102
|
+
|
|
103
|
+
- Total tests: X passed, Y failed
|
|
104
|
+
- Fields with failures and suggested fixes
|
|
105
|
+
- Whether to re-upload manifest (`ds agm upload -y`) after changes
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## CSV Format Reference
|
|
110
|
+
|
|
111
|
+
```csv
|
|
112
|
+
filename,Agreement Type [Custom],Termination Date [Custom],Notice Period Days [Custom],Company Name [Standard]
|
|
113
|
+
supplier-term.pdf,Supplier Termination Letter,2025-12-31,30,Acme Corp
|
|
114
|
+
change-order.pdf,Change Order,,15,BuildCo Inc
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Column headers follow the pattern `{Field Label} [{Custom|Standard}]`.
|
|
118
|
+
|
|
119
|
+
Leave cells empty (not `N/A`) when a field is not present in a document.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Tips
|
|
124
|
+
|
|
125
|
+
- Run with `--partial-match` for long text fields where exact match is too strict:
|
|
126
|
+
```bash
|
|
127
|
+
ds agm test run -y --partial-match
|
|
128
|
+
```
|
|
129
|
+
- Re-ingest after adding new test documents (don't use `--dry-run`)
|
|
130
|
+
- Multiple test runs produce timestamped result files — old results are preserved
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Docusign Agreement Manager — IAM Toolkit CLI workflow guide for AI-powered document extraction
|
|
3
|
+
globs: ["**/*.json", "**/*.csv", "**/agreement-manager/**"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
@file:.claude/skills/ds-agm-autopilot/SKILL.md
|
|
8
|
+
@file:.claude/skills/ds-agreement-manager-workflow/SKILL.md
|
|
9
|
+
@file:.claude/skills/ds-testing/SKILL.md
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Docusign Agreement Manager — Gemini CLI Instructions
|
|
2
|
+
|
|
3
|
+
Read the following skill files for the full workflow guide and testing instructions:
|
|
4
|
+
|
|
5
|
+
- `.claude/skills/ds-agm-autopilot/SKILL.md`
|
|
6
|
+
- `.claude/skills/ds-agreement-manager-workflow/SKILL.md`
|
|
7
|
+
- `.claude/skills/ds-testing/SKILL.md`
|
|
8
|
+
|
|
9
|
+
These files contain step-by-step guidance for the `ds agm` CLI commands, manifest authoring rules, AI-assisted testing workflows, and full autopilot operation of the Agreement Manager lifecycle.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
applyTo: '**'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Docusign Agreement Manager — AI Coding Instructions
|
|
6
|
+
|
|
7
|
+
This workspace uses the Docusign IAM Toolkit CLI (`ds` command) for AI-powered document extraction with Docusign Agreement Manager.
|
|
8
|
+
|
|
9
|
+
## Available CLI Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
ds auth login -e <demo|production> # Authenticate
|
|
13
|
+
ds auth test # Verify auth
|
|
14
|
+
ds agm get catalog # Fetch standard types/fields
|
|
15
|
+
ds agm validate # Validate manifest
|
|
16
|
+
ds agm upload [-y|--dry-run] # Deploy manifest
|
|
17
|
+
ds agm ingest --directory <path> [-y|--dry-run] # Ingest documents
|
|
18
|
+
ds agm test generate-test-template [-y] [--prefill-extractions] # Create test CSV
|
|
19
|
+
ds agm test run [-y] [--partial-match] # Run extraction tests
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Workspace Structure
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
<workspace>/
|
|
26
|
+
├── .env
|
|
27
|
+
└── <project>/
|
|
28
|
+
└── agreement-manager/
|
|
29
|
+
├── configs/agreement-manager-manifest.json # Define types/fields here
|
|
30
|
+
├── files/
|
|
31
|
+
│ ├── train/ # Training documents
|
|
32
|
+
│ ├── test/ # Test documents
|
|
33
|
+
│ ├── tracking.json # Ingestion tracker
|
|
34
|
+
│ ├── standard-catalog.json # After 'get catalog'
|
|
35
|
+
│ └── custom-catalog.json
|
|
36
|
+
├── tests/testing.csv # Test expectations
|
|
37
|
+
└── output/ # Test results
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Autopilot Mode
|
|
41
|
+
|
|
42
|
+
To drive the full Agreement Manager lifecycle interactively, invoke the `ds-agm-autopilot` skill. It guides you through auth, manifest creation, upload, ingest, metadata ingestion, testing, and config migration with visual stage feedback. Say "autopilot" for autonomous operation or answer prompts step-by-step.
|
|
43
|
+
|
|
44
|
+
## Agreement Manager Workflow
|
|
45
|
+
|
|
46
|
+
1. `ds auth login -e demo`
|
|
47
|
+
2. `ds agm get catalog`
|
|
48
|
+
3. Edit `agreement-manager/configs/agreement-manager-manifest.json`
|
|
49
|
+
4. `ds agm validate`
|
|
50
|
+
5. `ds agm upload -y`
|
|
51
|
+
6. Add documents to `agreement-manager/files/test/`, then `ds agm ingest --directory ./agreement-manager/files/test -y`
|
|
52
|
+
7. `ds agm test generate-test-template -y --prefill-extractions`
|
|
53
|
+
8. Fill expected values in `agreement-manager/tests/testing.csv`
|
|
54
|
+
9. `ds agm test run -y`
|
|
55
|
+
|
|
56
|
+
## Manifest Rules
|
|
57
|
+
|
|
58
|
+
**Custom field `key`** must start with `C_` (e.g., `C_TerminationDate`). Use `displayName` for human-readable name. Add `aiDefinition` when `customExtractionEnabled: true`.
|
|
59
|
+
|
|
60
|
+
**Field types:** `String`, `Number`, `DateTime`, `Dropdown`
|
|
61
|
+
|
|
62
|
+
**Field categories:** `FinancialCategory`, `GeneralCategory`, `HumanResourcesCategory`, `LegalAndComplianceCategory`, `LifecycleCategory`, `PaymentCategory`, `RenewalCategory`, `TerminationCategory`, `OtherCategory`
|
|
63
|
+
|
|
64
|
+
**Agreement type categories:** `BusinessServices`, `HumanResources`, `Miscellaneous`, `OtherDocuments`
|
|
65
|
+
|
|
66
|
+
When `customExtractionEnabled: true`:
|
|
67
|
+
|
|
68
|
+
- `examples` array is required (3+ recommended)
|
|
69
|
+
- `aiDefinition` is required — describe what the field or document type represents
|
|
70
|
+
- `docs` in agreement types reference filenames only (not paths)
|
|
71
|
+
- `customFields` in agreement types reference fields by `displayName`, not `key`
|
|
72
|
+
|
|
73
|
+
## Testing Workflow (AI-Assisted)
|
|
74
|
+
|
|
75
|
+
When helping a user run extraction tests:
|
|
76
|
+
|
|
77
|
+
1. Check files exist in `agreement-manager/files/test/`
|
|
78
|
+
2. Check `tracking.json` — ingest any un-ingested files first
|
|
79
|
+
3. Run `ds agm test generate-test-template -y --prefill-extractions`
|
|
80
|
+
4. Read each test document and the manifest to understand expected values
|
|
81
|
+
5. Fill `agreement-manager/tests/testing.csv` — use ISO dates (`YYYY-MM-DD`), numeric-only for Number fields, exact dropdown option names
|
|
82
|
+
6. Run `ds agm test run -y`
|
|
83
|
+
7. Read timestamped result CSVs in `agreement-manager/output/` and explain failures
|
|
84
|
+
|
|
85
|
+
## Common Errors
|
|
86
|
+
|
|
87
|
+
| Error | Fix |
|
|
88
|
+
| ----------------- | ---------------------------------------------------------------- |
|
|
89
|
+
| name format | Add `C_` prefix to custom field/type keys |
|
|
90
|
+
| duplicate | Rename one of the duplicate displayNames |
|
|
91
|
+
| unreferenced | Add field to a type's customFields or remove it |
|
|
92
|
+
| unknown field | customFields displayName doesn't match any field |
|
|
93
|
+
| AI constraint | Add examples and aiDefinition when customExtractionEnabled: true |
|
|
94
|
+
| dropdown mismatch | confirmedValue must exactly match a dropdownOptions name |
|
package/package.json
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@docusign/cli",
|
|
3
|
+
"version": "1.0.0-rc",
|
|
4
|
+
"author": "Docusign",
|
|
5
|
+
"description": "The Docusign CLI simplifies the implementation of Docusign Agreement Manager. With this CLI, you can bulk configure Agreement Manager with custom fields and types, map fields to types, provide AI training sets for custom extractions, programmatically test extraction accuracy, and export/import your setup across accounts. This offering is currently in beta.",
|
|
6
|
+
"main": "dist/index.mjs",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"bin": {
|
|
9
|
+
"docusign": "./dist/index.mjs",
|
|
10
|
+
"ds": "./dist/index.mjs"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/index.mjs",
|
|
14
|
+
"dist/templates/"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"ado:build": "npm run build",
|
|
18
|
+
"ado:lint": "npm run lint",
|
|
19
|
+
"ado:test": "npm run test:unit",
|
|
20
|
+
"ado:version:validate": "ts-node scripts/validateVersion.ts",
|
|
21
|
+
"cli": "node dist/index.mjs",
|
|
22
|
+
"cli:dev": "ts-node src/index.ts",
|
|
23
|
+
"build": "tsc -p tsconfig.build.json && node scripts/build.mjs",
|
|
24
|
+
"postbuild": "",
|
|
25
|
+
"clean": "node -e \"require('fs-extra').removeSync('dist')\" && node -e \"require('fs-extra').removeSync('.build-intermediate')\"",
|
|
26
|
+
"prebuild": "npm run clean",
|
|
27
|
+
"prepare": "husky",
|
|
28
|
+
"prelink": "npm run build",
|
|
29
|
+
"link": "npm link",
|
|
30
|
+
"unlink": "npm unlink -g @docusign/cli",
|
|
31
|
+
"lint": "eslint .",
|
|
32
|
+
"lint:fix": "eslint . --fix",
|
|
33
|
+
"format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"",
|
|
34
|
+
"format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"",
|
|
35
|
+
"test": "npm run test:unit",
|
|
36
|
+
"test:watch": "jest --watch",
|
|
37
|
+
"test:coverage": "jest --coverage",
|
|
38
|
+
"test:verbose": "jest --verbose",
|
|
39
|
+
"test:unit": "jest",
|
|
40
|
+
"test:e2e": "jest --config jest.config.e2e.js",
|
|
41
|
+
"test:e2e:verbose": "jest --config jest.config.e2e.js --verbose"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@inquirer/prompts": "^7.3.2",
|
|
45
|
+
"axios": "^1.7.9",
|
|
46
|
+
"chalk": "^4.1.2",
|
|
47
|
+
"commander": "^14.0.2",
|
|
48
|
+
"csv-parse": "^6.1.0",
|
|
49
|
+
"fs-extra": "^11.3.2",
|
|
50
|
+
"lodash": "^4.17.21",
|
|
51
|
+
"luxon": "^3.7.2",
|
|
52
|
+
"mixpanel": "^0.20.0",
|
|
53
|
+
"open": "^10.2.0",
|
|
54
|
+
"ora": "^9.3.0",
|
|
55
|
+
"reflect-metadata": "^0.2.2",
|
|
56
|
+
"semver": "^7.7.4",
|
|
57
|
+
"tslib": "^2.8.1",
|
|
58
|
+
"tsyringe": "^4.10.0",
|
|
59
|
+
"zod": "^4.1.12"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@eslint/js": "^9.39.1",
|
|
63
|
+
"@types/docusign-esign": "^5.19.9",
|
|
64
|
+
"@types/fs-extra": "^11.0.4",
|
|
65
|
+
"@types/jest": "^30.0.0",
|
|
66
|
+
"@types/luxon": "^3.7.1",
|
|
67
|
+
"@types/node": "^22.10.0",
|
|
68
|
+
"@types/semver": "^7.7.1",
|
|
69
|
+
"@typescript-eslint/eslint-plugin": "^8.46.3",
|
|
70
|
+
"@typescript-eslint/parser": "^8.46.3",
|
|
71
|
+
"docusign-esign": "^8.5.0",
|
|
72
|
+
"esbuild": "^0.27.3",
|
|
73
|
+
"eslint": "^9.39.1",
|
|
74
|
+
"eslint-config-prettier": "^10.1.8",
|
|
75
|
+
"eslint-plugin-import": "^2.32.0",
|
|
76
|
+
"eslint-plugin-jest": "^29.0.1",
|
|
77
|
+
"globals": "^16.5.0",
|
|
78
|
+
"husky": "^9.1.7",
|
|
79
|
+
"jest": "^30.2.0",
|
|
80
|
+
"jest-junit": "^16.0.0",
|
|
81
|
+
"prettier": "^3.6.2",
|
|
82
|
+
"ts-jest": "^29.4.5",
|
|
83
|
+
"ts-node": "^10.9.2",
|
|
84
|
+
"typescript": "^5.9.3",
|
|
85
|
+
"typescript-eslint": "^8.46.3"
|
|
86
|
+
},
|
|
87
|
+
"engines": {
|
|
88
|
+
"node": ">=22.0.0"
|
|
89
|
+
}
|
|
90
|
+
}
|