@eigenpal/cli 0.20.2 → 0.20.4

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.
@@ -182,6 +182,18 @@ eigenpal workflow dataset review-request item <workflow-id> <review-id> <item-id
182
182
  --expected-updated-at <iso> --json
183
183
  eigenpal workflow dataset review-request item <workflow-id> <review-id> <item-id> \
184
184
  --action reject --comment "not usable" --expected-updated-at <iso> --json
185
+ # Expected-output FILES have their own loop: pull the snapshot (or the
186
+ # reviewer's corrected bytes) into <dir>/<example>/expected/, correct a file
187
+ # with edit-file (--file-path corrects, --new-path uploads brand-new), then
188
+ # record a per-file decision with a note. A comment without a decision is a
189
+ # note and needs an existing decision.
190
+ eigenpal workflow dataset review-request pull <workflow-id> <review-id> --out ./review-<id>
191
+ eigenpal workflow dataset review-request item <workflow-id> <review-id> <item-id> \
192
+ --action edit-file --file-path expected/report.pdf --file ./report-fixed.pdf \
193
+ --comment "fixed total" --expected-updated-at <iso> --json
194
+ eigenpal workflow dataset review-request item <workflow-id> <review-id> <item-id> \
195
+ --action file-decision --file-path expected/report.pdf --decision approved \
196
+ --comment "totals match" --expected-updated-at <iso> --json
185
197
  eigenpal workflow dataset pull <workflow-id> --out ./dataset.zip
186
198
  # Manually copy approved/edited expected.json per example into the dataset,
187
199
  # then push. Reject is recommendation-only — nothing is deleted by the API.
@@ -407,8 +419,10 @@ If you were given any examples: request a dataset review BEFORE iterating
407
419
  to perfection (`eigenpal agents dataset review-request create agents.<slug>
408
420
  --title ... --example-name ... --focus ... --status open --json`). Ship a V0,
409
421
  get ground truth reviewed first — poll `.progress.complete`, record field
410
- decisions / approve / reject with comments, `dataset pull` and MANUAL
411
- per-example reconcile (no auto-apply), then
422
+ decisions / approve / reject with comments, `review-request pull --out <dir>`
423
+ to fetch expected files (snapshot or reviewer-corrected), correct bytes with
424
+ `item --action edit-file`, record per-file decisions with notes,
425
+ `dataset pull` and MANUAL per-example reconcile (no auto-apply), then
412
426
  `review-request update ... --status closed`.
413
427
 
414
428
  ## Runs And Artifacts
@@ -52,6 +52,7 @@ Manage Eigenpal agents: Git source, datasets, experiments, sessions, and release
52
52
  - [`eigenpal agents dataset review-request items [options] <automation-id> <review-id>`](#eigenpal-agents-dataset-review-request-items-options-automation-id-review-id)
53
53
  - [`eigenpal agents dataset review-request events [options] <automation-id> <review-id>`](#eigenpal-agents-dataset-review-request-events-options-automation-id-review-id)
54
54
  - [`eigenpal agents dataset review-request item [options] <automation-id> <review-id> <item-id>`](#eigenpal-agents-dataset-review-request-item-options-automation-id-review-id-item-id)
55
+ - [`eigenpal agents dataset review-request pull [options] <automation-id> <review-id>`](#eigenpal-agents-dataset-review-request-pull-options-automation-id-review-id)
55
56
  - [`eigenpal agents experiment|exp run [options] <agent-id-or-slug>`](#eigenpal-agents-experimentexp-run-options-agent-id-or-slug)
56
57
  - [`eigenpal agents experiment|exp status [options] <agent-id-or-slug> <batch-id>`](#eigenpal-agents-experimentexp-status-options-agent-id-or-slug-batch-id)
57
58
  - [`eigenpal agents experiment|exp results [options] <agent-id-or-slug> [batch-id]`](#eigenpal-agents-experimentexp-results-options-agent-id-or-slug-batch-id)
@@ -110,7 +111,8 @@ agents
110
111
  │ ├── update <automation-id> <review-id>
111
112
  │ ├── items <automation-id> <review-id>
112
113
  │ ├── events <automation-id> <review-id>
113
- │ └── item <automation-id> <review-id> <item-id>
114
+ │ ├── item <automation-id> <review-id> <item-id>
115
+ │ └── pull <automation-id> <review-id>
114
116
  ├── experiment|exp
115
117
  │ ├── run <agent-id-or-slug>
116
118
  │ ├── status <agent-id-or-slug> <batch-id>
@@ -174,19 +176,20 @@ agents
174
176
 
175
177
  ### Dataset
176
178
 
177
- | Command | Description |
178
- | --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
179
- | `eigenpal agents dataset list\|ls [options] <agent-id-or-slug>` | List dataset examples for an agent. |
180
- | `eigenpal agents dataset push [options] <agent-id-or-slug>` | Upload dataset examples from a local dataset directory or zip archive. |
181
- | `eigenpal agents dataset pull [options] <agent-id-or-slug>` | Download an agent dataset as a .zip archive. |
182
- | `eigenpal agents dataset validate [options] [path]` | Validate a local dataset directory against the canonical examples/<name> layout. Defaults to ./dataset/. |
183
- | `eigenpal agents dataset review-request list\|ls [options] <automation-id>` | |
184
- | `eigenpal agents dataset review-request create [options] <automation-id>` | Request human review of dataset ground truth. Snapshot examples and poll progress until review is complete. |
185
- | `eigenpal agents dataset review-request get [options] <automation-id> <review-id>` | Fetch one dataset review request with items, progress, focus fields, ignored fields, and events. |
186
- | `eigenpal agents dataset review-request update [options] <automation-id> <review-id>` | Update review metadata or lifecycle status. Set --status closed when review is finished. |
187
- | `eigenpal agents dataset review-request items [options] <automation-id> <review-id>` | List snapshotted review items and their statuses. |
188
- | `eigenpal agents dataset review-request events [options] <automation-id> <review-id>` | List review activity, including example and field notes. |
189
- | `eigenpal agents dataset review-request item [options] <automation-id> <review-id> <item-id>` | Approve, reject, reopen, comment, edit, or record a field-decision on one review item. |
179
+ | Command | Description |
180
+ | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
181
+ | `eigenpal agents dataset list\|ls [options] <agent-id-or-slug>` | List dataset examples for an agent. |
182
+ | `eigenpal agents dataset push [options] <agent-id-or-slug>` | Upload dataset examples from a local dataset directory or zip archive. |
183
+ | `eigenpal agents dataset pull [options] <agent-id-or-slug>` | Download an agent dataset as a .zip archive. |
184
+ | `eigenpal agents dataset validate [options] [path]` | Validate a local dataset directory against the canonical examples/<name> layout. Defaults to ./dataset/. |
185
+ | `eigenpal agents dataset review-request list\|ls [options] <automation-id>` | |
186
+ | `eigenpal agents dataset review-request create [options] <automation-id>` | Request human review of dataset ground truth. Snapshot examples and poll progress until review is complete. |
187
+ | `eigenpal agents dataset review-request get [options] <automation-id> <review-id>` | Fetch one dataset review request with items, progress, focus fields, ignored fields, expected files, file decisions, and events. |
188
+ | `eigenpal agents dataset review-request update [options] <automation-id> <review-id>` | Update review metadata or lifecycle status. Set --status closed when review is finished. |
189
+ | `eigenpal agents dataset review-request items [options] <automation-id> <review-id>` | List snapshotted review items and their statuses. |
190
+ | `eigenpal agents dataset review-request events [options] <automation-id> <review-id>` | List review activity, including example and field notes. |
191
+ | `eigenpal agents dataset review-request item [options] <automation-id> <review-id> <item-id>` | Approve, reject, reopen, comment, edit, or record a field- or file-decision on one review item. Upload corrected expected-file bytes with edit-file. |
192
+ | `eigenpal agents dataset review-request pull [options] <automation-id> <review-id>` | Download review snapshots: per-example expected files (snapshot or reviewer-corrected) plus item JSON. |
190
193
 
191
194
  ### Experiment
192
195
 
@@ -740,7 +743,7 @@ Request human review of dataset ground truth. Snapshot examples and poll progres
740
743
 
741
744
  ### `eigenpal agents dataset review-request get [options] <automation-id> <review-id>`
742
745
 
743
- Fetch one dataset review request with items, progress, focus fields, ignored fields, and events.
746
+ Fetch one dataset review request with items, progress, focus fields, ignored fields, expected files, file decisions, and events.
744
747
 
745
748
  ### Arguments
746
749
 
@@ -820,7 +823,7 @@ List review activity, including example and field notes.
820
823
 
821
824
  ### `eigenpal agents dataset review-request item [options] <automation-id> <review-id> <item-id>`
822
825
 
823
- Approve, reject, reopen, comment, edit, or record a field-decision on one review item.
826
+ Approve, reject, reopen, comment, edit, or record a field- or file-decision on one review item. Upload corrected expected-file bytes with edit-file.
824
827
 
825
828
  ### Arguments
826
829
 
@@ -832,17 +835,39 @@ Approve, reject, reopen, comment, edit, or record a field-decision on one review
832
835
 
833
836
  ### Options
834
837
 
835
- | Flag | Required | Default | Description |
836
- | ------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------ |
837
- | `--base-url <url>` | no | | Server base URL |
838
- | `--json` | no | | Emit machine-readable JSON on stdout |
839
- | `--action <approve\|reject\|reopen\|comment\|edit\|field-decision>` | yes | | Item action |
840
- | `--expected-updated-at <iso>` | yes | | Item updatedAt the client last observed (optimistic concurrency) |
841
- | `--comment <text>` | no | | Note stored on the item or field |
842
- | `--field-path <path>` | no | | Dotted expected-output path for comment or field-decision |
843
- | `--decision <approved\|rejected\|null>` | no | | Field decision for --action field-decision (null/clear removes it) |
844
- | `--clear` | no | `false` | Clear a field decision (sends decision: null) |
845
- | `--expected-json <json>` | no | | Replacement expected JSON when --action edit |
838
+ | Flag | Required | Default | Description |
839
+ | --------------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------- |
840
+ | `--base-url <url>` | no | | Server base URL |
841
+ | `--json` | no | | Emit machine-readable JSON on stdout |
842
+ | `--action <approve\|reject\|reopen\|comment\|edit\|field-decision\|file-decision\|edit-file>` | yes | | Item action |
843
+ | `--expected-updated-at <iso>` | yes | | Item updatedAt the client last observed (optimistic concurrency) |
844
+ | `--comment <text>` | no | | Note stored on the item, field, or file |
845
+ | `--field-path <path>` | no | | Dotted expected-output path for comment or field-decision |
846
+ | `--file-path <path>` | no | | Expected-file path for file-decision or edit-file (correct) |
847
+ | `--new-path <path>` | no | | Expected-file path for edit-file uploads of brand-new reviewer files |
848
+ | `--file <local path>` | no | | Local file bytes to upload when --action edit-file |
849
+ | `--decision <approved\|rejected\|null>` | no | | Field or file decision for --action field-decision or file-decision (null/clear removes it) |
850
+ | `--clear` | no | `false` | Clear a field or file decision (sends decision: null) |
851
+ | `--expected-json <json>` | no | | Replacement expected JSON when --action edit |
852
+
853
+ ### `eigenpal agents dataset review-request pull [options] <automation-id> <review-id>`
854
+
855
+ Download review snapshots: per-example expected files (snapshot or reviewer-corrected) plus item JSON.
856
+
857
+ ### Arguments
858
+
859
+ | Name | Required | Variadic | Description |
860
+ | --------------- | -------- | -------- | ----------- |
861
+ | `automation-id` | yes | no | |
862
+ | `review-id` | yes | no | |
863
+
864
+ ### Options
865
+
866
+ | Flag | Required | Default | Description |
867
+ | ------------------ | -------- | ------- | ---------------------------------------------- |
868
+ | `--base-url <url>` | no | | Server base URL |
869
+ | `--json` | no | | Emit machine-readable JSON on stdout |
870
+ | `--out <dir>` | yes | | Local directory to materialize the review into |
846
871
 
847
872
  ### `eigenpal agents experiment|exp run [options] <agent-id-or-slug>`
848
873
 
@@ -45,7 +45,8 @@ eigenpal
45
45
  │ │ ├── update <automation-id> <review-id>
46
46
  │ │ ├── items <automation-id> <review-id>
47
47
  │ │ ├── events <automation-id> <review-id>
48
- │ │ └── item <automation-id> <review-id> <item-id>
48
+ │ │ ├── item <automation-id> <review-id> <item-id>
49
+ │ │ └── pull <automation-id> <review-id>
49
50
  │ ├── templates
50
51
  │ │ ├── upload <file>
51
52
  │ │ ├── list|ls
@@ -119,7 +120,8 @@ eigenpal
119
120
  │ │ ├── update <automation-id> <review-id>
120
121
  │ │ ├── items <automation-id> <review-id>
121
122
  │ │ ├── events <automation-id> <review-id>
122
- │ │ └── item <automation-id> <review-id> <item-id>
123
+ │ │ ├── item <automation-id> <review-id> <item-id>
124
+ │ │ └── pull <automation-id> <review-id>
123
125
  │ ├── experiment|exp
124
126
  │ │ ├── run <agent-id-or-slug>
125
127
  │ │ ├── status <agent-id-or-slug> <batch-id>
@@ -47,6 +47,7 @@ Manage workflows: push, pull, and evaluate.
47
47
  - [`eigenpal workflow dataset review-request items [options] <automation-id> <review-id>`](#eigenpal-workflow-dataset-review-request-items-options-automation-id-review-id)
48
48
  - [`eigenpal workflow dataset review-request events [options] <automation-id> <review-id>`](#eigenpal-workflow-dataset-review-request-events-options-automation-id-review-id)
49
49
  - [`eigenpal workflow dataset review-request item [options] <automation-id> <review-id> <item-id>`](#eigenpal-workflow-dataset-review-request-item-options-automation-id-review-id-item-id)
50
+ - [`eigenpal workflow dataset review-request pull [options] <automation-id> <review-id>`](#eigenpal-workflow-dataset-review-request-pull-options-automation-id-review-id)
50
51
  - [`eigenpal workflow templates upload [options] <file>`](#eigenpal-workflow-templates-upload-options-file)
51
52
  - [`eigenpal workflow templates list|ls [options]`](#eigenpal-workflow-templates-listls-options)
52
53
  - [`eigenpal workflow templates get|inspect [options] <template-id>`](#eigenpal-workflow-templates-getinspect-options-template-id)
@@ -107,7 +108,8 @@ workflow
107
108
  │ ├── update <automation-id> <review-id>
108
109
  │ ├── items <automation-id> <review-id>
109
110
  │ ├── events <automation-id> <review-id>
110
- │ └── item <automation-id> <review-id> <item-id>
111
+ │ ├── item <automation-id> <review-id> <item-id>
112
+ │ └── pull <automation-id> <review-id>
111
113
  ├── templates
112
114
  │ ├── upload <file>
113
115
  │ ├── list|ls
@@ -175,23 +177,24 @@ workflow
175
177
 
176
178
  ### Dataset
177
179
 
178
- | Command | Description |
179
- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
180
- | `eigenpal workflow dataset list\|ls [options] <workflow-id>` | List eval examples for the workflow. |
181
- | `eigenpal workflow dataset pull [options] <workflow-id>` | Download the workflow's dataset as a ZIP archive. |
182
- | `eigenpal workflow dataset push [options] <workflow-id>` | Replace or extend the workflow's dataset from a ZIP or folder. |
183
- | `eigenpal workflow dataset example create [options] <workflow-id>` | Create one eval example without re-uploading the dataset. |
184
- | `eigenpal workflow dataset example update [options] <workflow-id> <exampleId>` | Patch one eval example. Omitted flags are left alone. |
185
- | `eigenpal workflow dataset example delete [options] <workflow-id> <exampleId>` | Delete one eval example by id. Non-TTY shells require --yes. |
186
- | `eigenpal workflow dataset example get [options] <workflow-id> <exampleId>` | Fetch one eval example with full triggerInput, expectedOutput, and metadata. |
187
- | `eigenpal workflow dataset validate [options] [path]` | Validate a dataset folder against the examples/<name>/{input,expected,meta} convention. Defaults to ./dataset/. |
188
- | `eigenpal workflow dataset review-request list\|ls [options] <automation-id>` | |
189
- | `eigenpal workflow dataset review-request create [options] <automation-id>` | Request human review of dataset ground truth. Snapshot examples and poll progress until review is complete. |
190
- | `eigenpal workflow dataset review-request get [options] <automation-id> <review-id>` | Fetch one dataset review request with items, progress, focus fields, ignored fields, and events. |
191
- | `eigenpal workflow dataset review-request update [options] <automation-id> <review-id>` | Update review metadata or lifecycle status. Set --status closed when review is finished. |
192
- | `eigenpal workflow dataset review-request items [options] <automation-id> <review-id>` | List snapshotted review items and their statuses. |
193
- | `eigenpal workflow dataset review-request events [options] <automation-id> <review-id>` | List review activity, including example and field notes. |
194
- | `eigenpal workflow dataset review-request item [options] <automation-id> <review-id> <item-id>` | Approve, reject, reopen, comment, edit, or record a field-decision on one review item. |
180
+ | Command | Description |
181
+ | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
182
+ | `eigenpal workflow dataset list\|ls [options] <workflow-id>` | List eval examples for the workflow. |
183
+ | `eigenpal workflow dataset pull [options] <workflow-id>` | Download the workflow's dataset as a ZIP archive. |
184
+ | `eigenpal workflow dataset push [options] <workflow-id>` | Replace or extend the workflow's dataset from a ZIP or folder. |
185
+ | `eigenpal workflow dataset example create [options] <workflow-id>` | Create one eval example without re-uploading the dataset. |
186
+ | `eigenpal workflow dataset example update [options] <workflow-id> <exampleId>` | Patch one eval example. Omitted flags are left alone. |
187
+ | `eigenpal workflow dataset example delete [options] <workflow-id> <exampleId>` | Delete one eval example by id. Non-TTY shells require --yes. |
188
+ | `eigenpal workflow dataset example get [options] <workflow-id> <exampleId>` | Fetch one eval example with full triggerInput, expectedOutput, and metadata. |
189
+ | `eigenpal workflow dataset validate [options] [path]` | Validate a dataset folder against the examples/<name>/{input,expected,meta} convention. Defaults to ./dataset/. |
190
+ | `eigenpal workflow dataset review-request list\|ls [options] <automation-id>` | |
191
+ | `eigenpal workflow dataset review-request create [options] <automation-id>` | Request human review of dataset ground truth. Snapshot examples and poll progress until review is complete. |
192
+ | `eigenpal workflow dataset review-request get [options] <automation-id> <review-id>` | Fetch one dataset review request with items, progress, focus fields, ignored fields, expected files, file decisions, and events. |
193
+ | `eigenpal workflow dataset review-request update [options] <automation-id> <review-id>` | Update review metadata or lifecycle status. Set --status closed when review is finished. |
194
+ | `eigenpal workflow dataset review-request items [options] <automation-id> <review-id>` | List snapshotted review items and their statuses. |
195
+ | `eigenpal workflow dataset review-request events [options] <automation-id> <review-id>` | List review activity, including example and field notes. |
196
+ | `eigenpal workflow dataset review-request item [options] <automation-id> <review-id> <item-id>` | Approve, reject, reopen, comment, edit, or record a field- or file-decision on one review item. Upload corrected expected-file bytes with edit-file. |
197
+ | `eigenpal workflow dataset review-request pull [options] <automation-id> <review-id>` | Download review snapshots: per-example expected files (snapshot or reviewer-corrected) plus item JSON. |
195
198
 
196
199
  ### Templates
197
200
 
@@ -695,7 +698,7 @@ Request human review of dataset ground truth. Snapshot examples and poll progres
695
698
 
696
699
  ### `eigenpal workflow dataset review-request get [options] <automation-id> <review-id>`
697
700
 
698
- Fetch one dataset review request with items, progress, focus fields, ignored fields, and events.
701
+ Fetch one dataset review request with items, progress, focus fields, ignored fields, expected files, file decisions, and events.
699
702
 
700
703
  ### Arguments
701
704
 
@@ -775,7 +778,7 @@ List review activity, including example and field notes.
775
778
 
776
779
  ### `eigenpal workflow dataset review-request item [options] <automation-id> <review-id> <item-id>`
777
780
 
778
- Approve, reject, reopen, comment, edit, or record a field-decision on one review item.
781
+ Approve, reject, reopen, comment, edit, or record a field- or file-decision on one review item. Upload corrected expected-file bytes with edit-file.
779
782
 
780
783
  ### Arguments
781
784
 
@@ -787,17 +790,39 @@ Approve, reject, reopen, comment, edit, or record a field-decision on one review
787
790
 
788
791
  ### Options
789
792
 
790
- | Flag | Required | Default | Description |
791
- | ------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------ |
792
- | `--base-url <url>` | no | | Server base URL |
793
- | `--json` | no | | Emit machine-readable JSON on stdout |
794
- | `--action <approve\|reject\|reopen\|comment\|edit\|field-decision>` | yes | | Item action |
795
- | `--expected-updated-at <iso>` | yes | | Item updatedAt the client last observed (optimistic concurrency) |
796
- | `--comment <text>` | no | | Note stored on the item or field |
797
- | `--field-path <path>` | no | | Dotted expected-output path for comment or field-decision |
798
- | `--decision <approved\|rejected\|null>` | no | | Field decision for --action field-decision (null/clear removes it) |
799
- | `--clear` | no | `false` | Clear a field decision (sends decision: null) |
800
- | `--expected-json <json>` | no | | Replacement expected JSON when --action edit |
793
+ | Flag | Required | Default | Description |
794
+ | --------------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------- |
795
+ | `--base-url <url>` | no | | Server base URL |
796
+ | `--json` | no | | Emit machine-readable JSON on stdout |
797
+ | `--action <approve\|reject\|reopen\|comment\|edit\|field-decision\|file-decision\|edit-file>` | yes | | Item action |
798
+ | `--expected-updated-at <iso>` | yes | | Item updatedAt the client last observed (optimistic concurrency) |
799
+ | `--comment <text>` | no | | Note stored on the item, field, or file |
800
+ | `--field-path <path>` | no | | Dotted expected-output path for comment or field-decision |
801
+ | `--file-path <path>` | no | | Expected-file path for file-decision or edit-file (correct) |
802
+ | `--new-path <path>` | no | | Expected-file path for edit-file uploads of brand-new reviewer files |
803
+ | `--file <local path>` | no | | Local file bytes to upload when --action edit-file |
804
+ | `--decision <approved\|rejected\|null>` | no | | Field or file decision for --action field-decision or file-decision (null/clear removes it) |
805
+ | `--clear` | no | `false` | Clear a field or file decision (sends decision: null) |
806
+ | `--expected-json <json>` | no | | Replacement expected JSON when --action edit |
807
+
808
+ ### `eigenpal workflow dataset review-request pull [options] <automation-id> <review-id>`
809
+
810
+ Download review snapshots: per-example expected files (snapshot or reviewer-corrected) plus item JSON.
811
+
812
+ ### Arguments
813
+
814
+ | Name | Required | Variadic | Description |
815
+ | --------------- | -------- | -------- | ----------- |
816
+ | `automation-id` | yes | no | |
817
+ | `review-id` | yes | no | |
818
+
819
+ ### Options
820
+
821
+ | Flag | Required | Default | Description |
822
+ | ------------------ | -------- | ------- | ---------------------------------------------- |
823
+ | `--base-url <url>` | no | | Server base URL |
824
+ | `--json` | no | | Emit machine-readable JSON on stdout |
825
+ | `--out <dir>` | yes | | Local directory to materialize the review into |
801
826
 
802
827
  ### `eigenpal workflow templates upload [options] <file>`
803
828
 
@@ -20,7 +20,8 @@ dataset/
20
20
  │ │ └── Appendix.pdf
21
21
  │ ├── expected.json OPTIONAL — expected output or { "$error": ... }
22
22
  │ ├── expected/
23
- │ │ └── Invoice.docx referenced by expected.json
23
+ │ │ └── invoice/ file folder (one folder per expected file)
24
+ │ │ └── Invoice.docx referenced by expected.json
24
25
  │ └── meta.json OPTIONAL — { rowOrder?, annotation?, overrides?, review? }
25
26
  │
26
27
  └── unsupported-format/
@@ -52,6 +53,9 @@ same reference shape with the `expected/` prefix.
52
53
  `{ "$file": "input/<path>" }`.
53
54
  - Files under `expected/` must be referenced from `expected.json` as
54
55
  `{ "$file": "expected/<path>" }`.
56
+ - Entries directly under `expected/` must be file folders (one folder per
57
+ expected file, lowercase kebab/snake-case) — bare files are rejected by
58
+ `dataset validate`. `input/` files may sit at the top level.
55
59
  - File references cannot use `..`, absolute paths, backslashes, or null bytes.
56
60
  - `expected.json` is optional. When present, it must be a JSON object.
57
61
  - Failure-expected examples use `expected.json` with a single `$error` key.
@@ -79,8 +83,8 @@ For an example with:
79
83
  - `input.json`: `{"language":"en","contract":[{"$file":"input/Contract_2026.pdf"},{"$file":"input/Appendix.pdf"}]}`
80
84
  - `input/Contract_2026.pdf`
81
85
  - `input/Appendix.pdf`
82
- - `expected.json`: `{"invoiceNumber":"INV-001","generatedInvoice":{"$file":"expected/Invoice.docx"}}`
83
- - `expected/Invoice.docx`
86
+ - `expected.json`: `{"invoiceNumber":"INV-001","generatedInvoice":{"$file":"expected/invoice/Invoice.docx"}}`
87
+ - `expected/invoice/Invoice.docx`
84
88
 
85
89
  The stored row keeps the same input shape. When the example runs, each `$file`
86
90
  reference is resolved into the S3 file descriptor the worker consumes.
@@ -314,10 +318,14 @@ outputs without direct dataset write access, create a review request that
314
318
  snapshots selected examples. The server copies each example's `input.json`
315
319
  and `expected.json` values at creation time; file pointers stay as S3
316
320
  references. Reviewers approve, reject (recommendation only — nothing is
317
- deleted), leave comments, and record per-field decisions. There is **no
318
- auto-apply** by design: after review, `dataset pull` and manually reconcile
319
- each example into the live dataset (reviewers can err). Close via
320
- `update --status closed`.
321
+ deleted), leave comments, and record per-field decisions. Expected-output
322
+ files are reviewable the same way: reviewers correct bytes (`edit-file`,
323
+ either fixing an existing path or uploading a brand-new one) and record
324
+ per-file approve/reject with notes (`file-decision`); items carry
325
+ `currentExpectedFiles` (null means pristine snapshot) and `fileDecisions`.
326
+ There is **no auto-apply** by design: after review, `dataset pull` and
327
+ manually reconcile each example into the live dataset (reviewers can err).
328
+ Close via `update --status closed`.
321
329
 
322
330
  ```bash
323
331
  # Ask a reviewer to inspect specific fields, with reasons, then poll until done.
@@ -333,7 +341,7 @@ eigenpal workflow dataset review-request create <automation-id> \
333
341
  # List requests; `.progress.complete` means every example was decided.
334
342
  eigenpal workflow dataset review-request list <automation-id> --status open --json
335
343
 
336
- # Inspect items (includes fieldDecisions + inputDrifted), focus, and notes.
344
+ # Inspect items (includes fieldDecisions, fileDecisions, currentExpectedFiles, inputDrifted), focus, and notes.
337
345
  eigenpal workflow dataset review-request get <automation-id> <review-id> --json
338
346
  eigenpal workflow dataset review-request events <automation-id> <review-id> --json
339
347
 
@@ -342,6 +350,25 @@ eigenpal workflow dataset review-request item <automation-id> <review-id> <item-
342
350
  --action field-decision --field-path vendor.iban --decision approved \
343
351
  --expected-updated-at <iso> --json
344
352
 
353
+ # Expected-output files are first-class reviewable units, mirroring fields:
354
+ # identity-by-path, versioned bytes, durable approve/reject + notes. Fetch
355
+ # each example's files (reviewer-corrected when the item has an overlay entry,
356
+ # else the snapshot) into <out>/<example>/expected/ plus item.json, correct
357
+ # bytes with edit-file, then record per-file decisions.
358
+ eigenpal workflow dataset review-request pull <automation-id> <review-id> --out ./review-dsr
359
+ eigenpal workflow dataset review-request item <automation-id> <review-id> <item-id> \
360
+ --action edit-file --file-path expected/report.pdf --file ./report-fixed.pdf \
361
+ --comment "fixed total" --expected-updated-at <iso> --json
362
+ eigenpal workflow dataset review-request item <automation-id> <review-id> <item-id> \
363
+ --action edit-file --new-path expected/appendix.pdf --file ./appendix.pdf \
364
+ --expected-updated-at <iso> --json
365
+
366
+ # Per-file decision (approved | rejected). --clear / --decision null removes
367
+ # it. A --comment without a decision is a note and needs an existing decision.
368
+ eigenpal workflow dataset review-request item <automation-id> <review-id> <item-id> \
369
+ --action file-decision --file-path expected/report.pdf --decision approved \
370
+ --comment "totals match" --expected-updated-at <iso> --json
371
+
345
372
  # Per-example reject is a recommendation only — nothing is deleted.
346
373
  eigenpal workflow dataset review-request item <automation-id> <review-id> <item-id> \
347
374
  --action reject --comment "wrong vendor" --expected-updated-at <iso> --json
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eigenpal/cli",
3
- "version": "0.20.2",
3
+ "version": "0.20.4",
4
4
  "description": "Eigenpal CLI — author and run document workflows from your terminal. Agent-ready.",
5
5
  "keywords": [
6
6
  "eigenpal",