@eigenpal/cli 0.16.3 → 0.16.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.
@@ -3002,6 +3002,156 @@ Output schema:
3002
3002
  ```
3003
3003
 
3004
3004
 
3005
+ #### `ai.search-files` — Search Files
3006
+
3007
+ Investigate a ZIP archive with a question and return an answer plus file citations. Read-only: the step opens files in the archive and never writes back. ZIP is the only accepted format in this version. Optionally scope the search to a folder prefix and cap how many files and investigation turns may run.
3008
+
3009
+ **Behavior and examples:** `eigenpal docs read steps/ai/search-files`
3010
+
3011
+ **Durable retry:** Provider request retries are separate; the workflow engine does not durably retry this step.
3012
+
3013
+ **Config** (in `step.with`):
3014
+
3015
+ | Field | Type | Required | Default | Description |
3016
+ | --- | --- | --- | --- | --- |
3017
+ | `archive` | string | yes | | Template expression or file reference for the ZIP archive to inspect. ZIP is the only accepted format in this version. |
3018
+ | `query` | string | yes | | Natural-language question to answer from files inside the archive. |
3019
+ | `root` | string | no | | Optional folder prefix inside the archive. When set, only files under this path are in scope. |
3020
+ | `provider` | string | no | | Provider ID from eigenpal.config.yaml. Falls back to the tenant default LLM provider when omitted. |
3021
+ | `model` | string | no | | Model override (advanced). |
3022
+ | `reasoningEffort` | `"none"` \| `"minimal"` \| `"low"` \| `"medium"` \| `"high"` \| `"xhigh"` \| `"max"` | no | | Reasoning effort for models that support it. Omit to use the selected model's default. |
3023
+ | `maxIterations` | integer | no | `12` | Maximum investigation turns. Default 12, capped at 50. |
3024
+ | `maxFiles` | integer | no | `50` | Maximum files the step may open. Default 50, capped at 200. |
3025
+
3026
+ **Output:** `object`
3027
+
3028
+ | Field | Type | Required | Default | Description |
3029
+ | --- | --- | --- | --- | --- |
3030
+ | `answer` | string | yes | | The investigation answer. Citations point at inspected files; the answer text itself is model-generated. |
3031
+ | `citations` | array<object> | yes | | Citations to files the step inspected. Excerpts, when present, are copied from inspected text. |
3032
+ | `filesInspected` | array<string> | yes | | Archive-relative paths of files the step opened during investigation. |
3033
+
3034
+ ##### Complete machine-readable schemas
3035
+
3036
+ Config schema:
3037
+
3038
+ ```json
3039
+ {
3040
+ "$schema": "http://json-schema.org/draft-07/schema#",
3041
+ "type": "object",
3042
+ "properties": {
3043
+ "archive": {
3044
+ "type": "string",
3045
+ "minLength": 1,
3046
+ "description": "Template expression or file reference for the ZIP archive to inspect. ZIP is the only accepted format in this version."
3047
+ },
3048
+ "query": {
3049
+ "type": "string",
3050
+ "minLength": 1,
3051
+ "description": "Natural-language question to answer from files inside the archive."
3052
+ },
3053
+ "root": {
3054
+ "description": "Optional folder prefix inside the archive. When set, only files under this path are in scope.",
3055
+ "type": "string"
3056
+ },
3057
+ "provider": {
3058
+ "description": "Provider ID from eigenpal.config.yaml. Falls back to the tenant default LLM provider when omitted.",
3059
+ "type": "string"
3060
+ },
3061
+ "model": {
3062
+ "description": "Model override (advanced).",
3063
+ "type": "string"
3064
+ },
3065
+ "reasoningEffort": {
3066
+ "description": "Reasoning effort for models that support it. Omit to use the selected model's default.",
3067
+ "type": "string",
3068
+ "enum": [
3069
+ "none",
3070
+ "minimal",
3071
+ "low",
3072
+ "medium",
3073
+ "high",
3074
+ "xhigh",
3075
+ "max"
3076
+ ]
3077
+ },
3078
+ "maxIterations": {
3079
+ "description": "Maximum investigation turns. Default 12, capped at 50.",
3080
+ "default": 12,
3081
+ "type": "integer",
3082
+ "minimum": 1,
3083
+ "maximum": 50
3084
+ },
3085
+ "maxFiles": {
3086
+ "description": "Maximum files the step may open. Default 50, capped at 200.",
3087
+ "default": 50,
3088
+ "type": "integer",
3089
+ "minimum": 1,
3090
+ "maximum": 200
3091
+ }
3092
+ },
3093
+ "required": [
3094
+ "archive",
3095
+ "query"
3096
+ ],
3097
+ "additionalProperties": false
3098
+ }
3099
+ ```
3100
+
3101
+
3102
+ Output schema:
3103
+
3104
+ ```json
3105
+ {
3106
+ "$schema": "http://json-schema.org/draft-07/schema#",
3107
+ "type": "object",
3108
+ "properties": {
3109
+ "answer": {
3110
+ "type": "string",
3111
+ "minLength": 1,
3112
+ "description": "The investigation answer. Citations point at inspected files; the answer text itself is model-generated."
3113
+ },
3114
+ "citations": {
3115
+ "type": "array",
3116
+ "items": {
3117
+ "type": "object",
3118
+ "properties": {
3119
+ "path": {
3120
+ "type": "string",
3121
+ "minLength": 1,
3122
+ "description": "Archive-relative path of a file the step inspected and cited."
3123
+ },
3124
+ "excerpt": {
3125
+ "description": "Optional excerpt copied from the inspected file text. Omitted when no verbatim excerpt was supplied.",
3126
+ "type": "string",
3127
+ "maxLength": 2000
3128
+ }
3129
+ },
3130
+ "required": [
3131
+ "path"
3132
+ ],
3133
+ "additionalProperties": false
3134
+ },
3135
+ "description": "Citations to files the step inspected. Excerpts, when present, are copied from inspected text."
3136
+ },
3137
+ "filesInspected": {
3138
+ "type": "array",
3139
+ "items": {
3140
+ "type": "string"
3141
+ },
3142
+ "description": "Archive-relative paths of files the step opened during investigation."
3143
+ }
3144
+ },
3145
+ "required": [
3146
+ "answer",
3147
+ "citations",
3148
+ "filesInspected"
3149
+ ],
3150
+ "additionalProperties": false
3151
+ }
3152
+ ```
3153
+
3154
+
3005
3155
  ### Transform steps — deterministic data transforms
3006
3156
 
3007
3157
  #### `transform.set` — Set Value
@@ -4717,6 +4867,224 @@ Output schema:
4717
4867
  ```
4718
4868
 
4719
4869
 
4870
+ #### `transform.archive-list` — List Archive
4871
+
4872
+ List files inside a ZIP archive. Returns sorted normalized paths with compressed and uncompressed sizes. Optionally filter by folder prefix or substring, then page with offset and limit. ZIP is the only accepted format in this version. Pair with foreach or parallel_map and transform.archive-extract to open individual files.
4873
+
4874
+ **Behavior and examples:** `eigenpal docs read steps/transform/archive-list`
4875
+
4876
+ **Durable retry:** Transforms, including those that write files, are not durably retried.
4877
+
4878
+ **Config** (in `step.with`):
4879
+
4880
+ | Field | Type | Required | Default | Description |
4881
+ | --- | --- | --- | --- | --- |
4882
+ | `archive` | string | yes | | Template expression or file reference for the ZIP archive to list. ZIP is the only accepted format in this version. |
4883
+ | `prefix` | string | no | | Optional folder prefix inside the archive after path normalization (for example invoices or invoices/). |
4884
+ | `search` | string | no | | Optional case-insensitive substring match on the normalized archive path. |
4885
+ | `offset` | integer | no | | Number of matching entries to skip after sorting. Default 0. |
4886
+ | `limit` | integer | no | | Maximum matching entries to return after sorting. Capped at 10000. Omit to return every matching entry up to that cap. |
4887
+
4888
+ **Output:** `object`
4889
+
4890
+ | Field | Type | Required | Default | Description |
4891
+ | --- | --- | --- | --- | --- |
4892
+ | `entries` | array<object> | yes | | Matching files, sorted by normalized path. Directories and junk paths are omitted. |
4893
+ | `total` | integer | yes | | Number of matching entries before offset/limit pagination. |
4894
+
4895
+ ##### Complete machine-readable schemas
4896
+
4897
+ Config schema:
4898
+
4899
+ ```json
4900
+ {
4901
+ "$schema": "http://json-schema.org/draft-07/schema#",
4902
+ "type": "object",
4903
+ "properties": {
4904
+ "archive": {
4905
+ "type": "string",
4906
+ "minLength": 1,
4907
+ "description": "Template expression or file reference for the ZIP archive to list. ZIP is the only accepted format in this version."
4908
+ },
4909
+ "prefix": {
4910
+ "description": "Optional folder prefix inside the archive after path normalization (for example invoices or invoices/).",
4911
+ "type": "string"
4912
+ },
4913
+ "search": {
4914
+ "description": "Optional case-insensitive substring match on the normalized archive path.",
4915
+ "type": "string"
4916
+ },
4917
+ "offset": {
4918
+ "description": "Number of matching entries to skip after sorting. Default 0.",
4919
+ "type": "integer",
4920
+ "minimum": 0,
4921
+ "maximum": 9007199254740991
4922
+ },
4923
+ "limit": {
4924
+ "description": "Maximum matching entries to return after sorting. Capped at 10000. Omit to return every matching entry up to that cap.",
4925
+ "type": "integer",
4926
+ "minimum": 1,
4927
+ "maximum": 10000
4928
+ }
4929
+ },
4930
+ "required": [
4931
+ "archive"
4932
+ ],
4933
+ "additionalProperties": false
4934
+ }
4935
+ ```
4936
+
4937
+
4938
+ Output schema:
4939
+
4940
+ ```json
4941
+ {
4942
+ "$schema": "http://json-schema.org/draft-07/schema#",
4943
+ "type": "object",
4944
+ "properties": {
4945
+ "entries": {
4946
+ "type": "array",
4947
+ "items": {
4948
+ "type": "object",
4949
+ "properties": {
4950
+ "path": {
4951
+ "type": "string",
4952
+ "description": "Normalized archive-relative path"
4953
+ },
4954
+ "compressedSize": {
4955
+ "type": "integer",
4956
+ "minimum": 0,
4957
+ "maximum": 9007199254740991,
4958
+ "description": "Declared compressed size in bytes"
4959
+ },
4960
+ "uncompressedSize": {
4961
+ "type": "integer",
4962
+ "minimum": 0,
4963
+ "maximum": 9007199254740991,
4964
+ "description": "Declared uncompressed size in bytes"
4965
+ }
4966
+ },
4967
+ "required": [
4968
+ "path",
4969
+ "compressedSize",
4970
+ "uncompressedSize"
4971
+ ],
4972
+ "additionalProperties": false
4973
+ },
4974
+ "description": "Matching files, sorted by normalized path. Directories and junk paths are omitted."
4975
+ },
4976
+ "total": {
4977
+ "type": "integer",
4978
+ "minimum": 0,
4979
+ "maximum": 9007199254740991,
4980
+ "description": "Number of matching entries before offset/limit pagination."
4981
+ }
4982
+ },
4983
+ "required": [
4984
+ "entries",
4985
+ "total"
4986
+ ],
4987
+ "additionalProperties": false
4988
+ }
4989
+ ```
4990
+
4991
+
4992
+ #### `transform.archive-extract` — Extract Archive File
4993
+
4994
+ Extract exactly one file from a ZIP archive and store it as a run output file. Downstream steps can pass {{ steps.extract.output }} into Parse, Vision, or another archive step. Nested ZIPs are stored as ZIP files, not unpacked. Each extraction is capped at 64 MiB. ZIP is the only accepted format in this version.
4995
+
4996
+ **Behavior and examples:** `eigenpal docs read steps/transform/archive-extract`
4997
+
4998
+ **Durable retry:** Transforms, including those that write files, are not durably retried.
4999
+
5000
+ **Config** (in `step.with`):
5001
+
5002
+ | Field | Type | Required | Default | Description |
5003
+ | --- | --- | --- | --- | --- |
5004
+ | `archive` | string | yes | | Template expression or file reference for the ZIP archive. ZIP is the only accepted format in this version. |
5005
+ | `path` | string | yes | | Archive-relative path of the single file to extract, for example {{ item.path }} from a prior archive-list step. |
5006
+
5007
+ **Output:** `object`
5008
+
5009
+ | Field | Type | Required | Default | Description |
5010
+ | --- | --- | --- | --- | --- |
5011
+ | `fileId` | string | yes | | File ID from the files table |
5012
+ | `path` | string | yes | | Normalized archive-relative path that was extracted |
5013
+ | `filename` | string | yes | | Basename of the extracted file |
5014
+ | `mimeType` | string | yes | | Detected MIME type of the extracted file |
5015
+ | `size` | integer | yes | | Uncompressed size in bytes |
5016
+
5017
+ ##### Complete machine-readable schemas
5018
+
5019
+ Config schema:
5020
+
5021
+ ```json
5022
+ {
5023
+ "$schema": "http://json-schema.org/draft-07/schema#",
5024
+ "type": "object",
5025
+ "properties": {
5026
+ "archive": {
5027
+ "type": "string",
5028
+ "minLength": 1,
5029
+ "description": "Template expression or file reference for the ZIP archive. ZIP is the only accepted format in this version."
5030
+ },
5031
+ "path": {
5032
+ "type": "string",
5033
+ "minLength": 1,
5034
+ "description": "Archive-relative path of the single file to extract, for example {{ item.path }} from a prior archive-list step."
5035
+ }
5036
+ },
5037
+ "required": [
5038
+ "archive",
5039
+ "path"
5040
+ ],
5041
+ "additionalProperties": false
5042
+ }
5043
+ ```
5044
+
5045
+
5046
+ Output schema:
5047
+
5048
+ ```json
5049
+ {
5050
+ "$schema": "http://json-schema.org/draft-07/schema#",
5051
+ "type": "object",
5052
+ "properties": {
5053
+ "fileId": {
5054
+ "type": "string",
5055
+ "description": "File ID from the files table"
5056
+ },
5057
+ "path": {
5058
+ "type": "string",
5059
+ "description": "Normalized archive-relative path that was extracted"
5060
+ },
5061
+ "filename": {
5062
+ "type": "string",
5063
+ "description": "Basename of the extracted file"
5064
+ },
5065
+ "mimeType": {
5066
+ "type": "string",
5067
+ "description": "Detected MIME type of the extracted file"
5068
+ },
5069
+ "size": {
5070
+ "type": "integer",
5071
+ "minimum": 0,
5072
+ "maximum": 9007199254740991,
5073
+ "description": "Uncompressed size in bytes"
5074
+ }
5075
+ },
5076
+ "required": [
5077
+ "fileId",
5078
+ "path",
5079
+ "filename",
5080
+ "mimeType",
5081
+ "size"
5082
+ ],
5083
+ "additionalProperties": false
5084
+ }
5085
+ ```
5086
+
5087
+
4720
5088
  ### Action steps — external side effects
4721
5089
 
4722
5090
  #### `action.http` — HTTP Request
@@ -1008,7 +1008,8 @@ This JSON Schema is generated from the same Zod schema used to parse workflow YA
1008
1008
  "ai.segment",
1009
1009
  "ai.classify",
1010
1010
  "ai.classify-pages",
1011
- "ai.vision"
1011
+ "ai.vision",
1012
+ "ai.search-files"
1012
1013
  ]
1013
1014
  },
1014
1015
  "name": {
@@ -1116,7 +1117,9 @@ This JSON Schema is generated from the same Zod schema used to parse workflow YA
1116
1117
  "transform.json-to-xlsx",
1117
1118
  "transform.script",
1118
1119
  "transform.text-chunker",
1119
- "transform.regex-extract"
1120
+ "transform.regex-extract",
1121
+ "transform.archive-list",
1122
+ "transform.archive-extract"
1120
1123
  ]
1121
1124
  },
1122
1125
  "name": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eigenpal/cli",
3
- "version": "0.16.3",
3
+ "version": "0.16.4",
4
4
  "description": "Eigenpal CLI — author and run document workflows from your terminal. Agent-ready.",
5
5
  "keywords": [
6
6
  "eigenpal",