@eigenpal/cli 0.20.40 → 0.20.41

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.
@@ -317,7 +317,7 @@ the combined shape:
317
317
  ```yaml
318
318
  steps:
319
319
  - name: parse
320
- type: ai.parse
320
+ type: ai.parse-v2
321
321
  with: { ... }
322
322
  - name: extract
323
323
  type: ai.extract
@@ -434,7 +434,7 @@ process.
434
434
 
435
435
  ```yaml
436
436
  - name: parse
437
- type: ai.parse
437
+ type: ai.parse-v2
438
438
  with:
439
439
  input: '{{ input.document }}'
440
440
 
@@ -1726,9 +1726,9 @@ Output schema:
1726
1726
  ```
1727
1727
 
1728
1728
 
1729
- #### `ai.parse` — Parse Document — legacy
1729
+ #### `ai.parse` — Parse Document v1
1730
1730
 
1731
- Extract text from documents (PDF, DOCX, images) using native extraction, OCR, or vision models
1731
+ Parse Document v1, the retired parser, kept only so existing workflows run unchanged. Do not add it to workflows: use ai.parse-v2 (Parse Document), which picks native text, OCR or vision per page.
1732
1732
 
1733
1733
  **Behavior and examples:** `eigenpal docs read steps/ai/parse`
1734
1734
 
@@ -6992,6 +6992,157 @@ Output schema:
6992
6992
  ```
6993
6993
 
6994
6994
 
6995
+ #### `transform.merge-documents` — Merge Documents
6996
+
6997
+ Concatenate several files into one PDF run output, in order. Accepts PDFs, images (multi-page TIFF included) and Word, PowerPoint, OpenDocument or RTF documents. Use it when one logical document arrives as several uploads: pass {{ steps.merge.output.file }} into Parse so page labels, page ranges and vision page indices stay continuous across every source. Output sources[] maps each input file to its merged page range.
6998
+
6999
+ **Behavior and examples:** `eigenpal docs read steps/transform/merge-documents`
7000
+
7001
+ **Durable retry:** Transforms, including those that write files, are not durably retried.
7002
+
7003
+ **Config** (in `step.with`):
7004
+
7005
+ | Field | Type | Required | Default | Description |
7006
+ | --- | --- | --- | --- | --- |
7007
+ | `files` | string | yes | | Template expression resolving to the files to merge, in order: a file list input such as {{ input.documents }}, or a single file. PDF, images (JPEG, PNG, TIFF, WebP, GIF) and Word, PowerPoint, OpenDocument or RTF documents. |
7008
+ | `filename` | string | no | | Filename of the merged PDF. Defaults to merged.pdf; .pdf is appended when missing. |
7009
+
7010
+ **Output:** `object`
7011
+
7012
+ | Field | Type | Required | Default | Description |
7013
+ | --- | --- | --- | --- | --- |
7014
+ | `file` | object | yes | | The merged PDF. Pass {{ steps.<step>.output.file }} to Parse, Vision or any other file input. |
7015
+ | `pageCount` | integer | yes | | Total pages in the merged PDF |
7016
+ | `sources` | array<object> | yes | | One entry per input file, in merge order, with the merged page range it occupies. Use it to map a merged page index back to its source file. |
7017
+
7018
+ ##### Complete machine-readable schemas
7019
+
7020
+ Config schema:
7021
+
7022
+ ```json
7023
+ {
7024
+ "$schema": "http://json-schema.org/draft-07/schema#",
7025
+ "type": "object",
7026
+ "properties": {
7027
+ "files": {
7028
+ "type": "string",
7029
+ "minLength": 1,
7030
+ "description": "Template expression resolving to the files to merge, in order: a file list input such as {{ input.documents }}, or a single file. PDF, images (JPEG, PNG, TIFF, WebP, GIF) and Word, PowerPoint, OpenDocument or RTF documents."
7031
+ },
7032
+ "filename": {
7033
+ "description": "Filename of the merged PDF. Defaults to merged.pdf; .pdf is appended when missing.",
7034
+ "type": "string"
7035
+ }
7036
+ },
7037
+ "required": [
7038
+ "files"
7039
+ ],
7040
+ "additionalProperties": false
7041
+ }
7042
+ ```
7043
+
7044
+
7045
+ Output schema:
7046
+
7047
+ ```json
7048
+ {
7049
+ "$schema": "http://json-schema.org/draft-07/schema#",
7050
+ "type": "object",
7051
+ "properties": {
7052
+ "file": {
7053
+ "type": "object",
7054
+ "properties": {
7055
+ "fileId": {
7056
+ "type": "string",
7057
+ "description": "File ID of the merged PDF"
7058
+ },
7059
+ "filename": {
7060
+ "type": "string",
7061
+ "description": "Filename of the merged PDF"
7062
+ },
7063
+ "mimeType": {
7064
+ "type": "string",
7065
+ "description": "Always application/pdf"
7066
+ },
7067
+ "size": {
7068
+ "type": "integer",
7069
+ "minimum": 0,
7070
+ "maximum": 9007199254740991,
7071
+ "description": "Size of the merged PDF in bytes"
7072
+ }
7073
+ },
7074
+ "required": [
7075
+ "fileId",
7076
+ "filename",
7077
+ "mimeType",
7078
+ "size"
7079
+ ],
7080
+ "additionalProperties": false,
7081
+ "description": "The merged PDF. Pass {{ steps.<step>.output.file }} to Parse, Vision or any other file input."
7082
+ },
7083
+ "pageCount": {
7084
+ "type": "integer",
7085
+ "minimum": 0,
7086
+ "maximum": 9007199254740991,
7087
+ "description": "Total pages in the merged PDF"
7088
+ },
7089
+ "sources": {
7090
+ "type": "array",
7091
+ "items": {
7092
+ "type": "object",
7093
+ "properties": {
7094
+ "filename": {
7095
+ "type": "string",
7096
+ "description": "Filename of the source file"
7097
+ },
7098
+ "mimeType": {
7099
+ "type": "string",
7100
+ "description": "MIME type of the source file"
7101
+ },
7102
+ "pageCount": {
7103
+ "type": "integer",
7104
+ "minimum": 0,
7105
+ "maximum": 9007199254740991,
7106
+ "description": "Pages this source contributed"
7107
+ },
7108
+ "pageRange": {
7109
+ "type": "array",
7110
+ "items": [
7111
+ {
7112
+ "type": "integer",
7113
+ "minimum": -9007199254740991,
7114
+ "maximum": 9007199254740991
7115
+ },
7116
+ {
7117
+ "type": "integer",
7118
+ "minimum": -9007199254740991,
7119
+ "maximum": 9007199254740991
7120
+ }
7121
+ ],
7122
+ "description": "[startIndex, endIndex] inclusive, 0-based page indices in the merged PDF"
7123
+ }
7124
+ },
7125
+ "required": [
7126
+ "filename",
7127
+ "mimeType",
7128
+ "pageCount",
7129
+ "pageRange"
7130
+ ],
7131
+ "additionalProperties": false
7132
+ },
7133
+ "description": "One entry per input file, in merge order, with the merged page range it occupies. Use it to map a merged page index back to its source file."
7134
+ }
7135
+ },
7136
+ "required": [
7137
+ "file",
7138
+ "pageCount",
7139
+ "sources"
7140
+ ],
7141
+ "additionalProperties": false
7142
+ }
7143
+ ```
7144
+
7145
+
6995
7146
  ### Action steps — external side effects
6996
7147
 
6997
7148
  #### `action.http` — HTTP Request
@@ -377,7 +377,7 @@ Description-writing tips (mirrors Reducto's guidance):
377
377
 
378
378
  ```yaml
379
379
  - name: parse
380
- type: ai.parse
380
+ type: ai.parse-v2
381
381
  with:
382
382
  input: '{{ input.document }}'
383
383
 
@@ -1122,7 +1122,8 @@ This JSON Schema is generated from the same Zod schema used to parse workflow YA
1122
1122
  "transform.text-chunker",
1123
1123
  "transform.regex-extract",
1124
1124
  "transform.archive-list",
1125
- "transform.archive-extract"
1125
+ "transform.archive-extract",
1126
+ "transform.merge-documents"
1126
1127
  ]
1127
1128
  },
1128
1129
  "name": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eigenpal/cli",
3
- "version": "0.20.40",
3
+ "version": "0.20.41",
4
4
  "description": "Eigenpal CLI — author and run document workflows from your terminal. Agent-ready.",
5
5
  "keywords": [
6
6
  "eigenpal",
@@ -50,7 +50,7 @@
50
50
  "generate:cli-docs:check": "bun scripts/generate-cli-docs.ts --check",
51
51
  "generate:logo": "bun scripts/render-logo-ascii.ts --cells 20",
52
52
  "test": "bun test src/ scripts/",
53
- "typecheck": "tsc --noEmit"
53
+ "typecheck": "bun check"
54
54
  },
55
55
  "dependencies": {},
56
56
  "devDependencies": {