@eigenpal/cli 0.15.1 → 0.16.0

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.
@@ -0,0 +1,175 @@
1
+ # eigenpal email-servers
2
+
3
+ Manage outbound email servers (ems\_…): list, inspect, create, update, delete, and send a real test message.
4
+
5
+ ## Contents
6
+
7
+ - [Surface](#surface)
8
+ - [Commands](#commands)
9
+ - [Core](#core)
10
+ - [Details](#details)
11
+ - [`eigenpal email-servers|email-server list|ls [options]`](#eigenpal-email-serversemail-server-listls-options)
12
+ - [`eigenpal email-servers|email-server get [options] <id>`](#eigenpal-email-serversemail-server-get-options-id)
13
+ - [`eigenpal email-servers|email-server create [options]`](#eigenpal-email-serversemail-server-create-options)
14
+ - [`eigenpal email-servers|email-server update [options] <id>`](#eigenpal-email-serversemail-server-update-options-id)
15
+ - [`eigenpal email-servers|email-server delete [options] <id>`](#eigenpal-email-serversemail-server-delete-options-id)
16
+ - [`eigenpal email-servers|email-server test [options] <id>`](#eigenpal-email-serversemail-server-test-options-id)
17
+
18
+ ## Surface
19
+
20
+ ```
21
+ email-servers
22
+ ├── list|ls
23
+ ├── get <id>
24
+ ├── create
25
+ ├── update <id>
26
+ ├── delete <id>
27
+ └── test <id>
28
+ ```
29
+
30
+ ## Commands
31
+
32
+ ### Core
33
+
34
+ | Command | Description |
35
+ | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
36
+ | `eigenpal email-servers\|email-server list\|ls [options]` | List outbound email servers for the current workspace. |
37
+ | `eigenpal email-servers\|email-server get [options] <id>` | Inspect one email server. Human output is redacted even if the API regresses. |
38
+ | `eigenpal email-servers\|email-server create [options]` | Create an outbound email server. Resend requires an API key; SMTP accepts optional username/password except with --security none, plus optional CA PEM, and defaults to starttls on port 587. |
39
+ | `eigenpal email-servers\|email-server update [options] <id>` | Update metadata or replace transport configuration. Omitted secrets are retained. Passing --transport smtp requires --host, --port, --security, --from-email, and --from-name (no security/port defaults). Metadata-only updates omit --transport. |
40
+ | `eigenpal email-servers\|email-server delete [options] <id>` | Soft-delete an outbound email server. |
41
+ | `eigenpal email-servers\|email-server test [options] <id>` | Send a real connectivity test email through the stored server to --to. Disabled servers fail with a conflict. |
42
+
43
+ ## Details
44
+
45
+ ### `eigenpal email-servers|email-server list|ls [options]`
46
+
47
+ List outbound email servers for the current workspace.
48
+
49
+ ### Options
50
+
51
+ | Flag | Required | Default | Description |
52
+ | ------------------ | -------- | ------- | ------------------------------------ |
53
+ | `--limit <n>` | no | `50` | Page size |
54
+ | `--offset <n>` | no | `0` | Page offset |
55
+ | `--base-url <url>` | no | | Server base URL |
56
+ | `--json` | no | | Emit machine-readable JSON on stdout |
57
+
58
+ ### `eigenpal email-servers|email-server get [options] <id>`
59
+
60
+ Inspect one email server. Human output is redacted even if the API regresses.
61
+
62
+ ### Arguments
63
+
64
+ | Name | Required | Variadic | Description |
65
+ | ---- | -------- | -------- | ----------- |
66
+ | `id` | yes | no | |
67
+
68
+ ### Options
69
+
70
+ | Flag | Required | Default | Description |
71
+ | ------------------ | -------- | ------- | ------------------------------------ |
72
+ | `--base-url <url>` | no | | Server base URL |
73
+ | `--json` | no | | Emit machine-readable JSON on stdout |
74
+
75
+ ### `eigenpal email-servers|email-server create [options]`
76
+
77
+ Create an outbound email server. Resend requires an API key; SMTP accepts optional username/password except with --security none, plus optional CA PEM, and defaults to starttls on port 587.
78
+
79
+ ### Options
80
+
81
+ | Flag | Required | Default | Description |
82
+ | ------------------------ | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
83
+ | `--config-json <json>` | no | | JSON object (non-secret fields only; use secret _-stdin/_-file flags) |
84
+ | `--config-file <path>` | no | | JSON file path (`-` reads stdin; non-secret fields only) |
85
+ | `--name <name>` | no | | Display name |
86
+ | `--transport <kind>` | no | | Transport: resend or smtp |
87
+ | `--from-email <email>` | no | | From address |
88
+ | `--from-name <name>` | no | | From display name (no control characters or <>) |
89
+ | `--enabled` | no | | Enable the server (default on create) |
90
+ | `--disabled` | no | | Disable the server |
91
+ | `--host <host>` | no | | SMTP host (required on update when --transport smtp) |
92
+ | `--port <n>` | no | | SMTP port. Required on update when --transport smtp; create defaults from --security |
93
+ | `--security <mode>` | no | | SMTP security: starttls, tls, or none (unauthenticated trusted relays; credentials are rejected). Required on update when --transport smtp; create defaults to starttls |
94
+ | `--username <user>` | no | | SMTP username (non-secret) |
95
+ | `--api-key-stdin` | no | | Read the Resend API key from stdin |
96
+ | `--api-key-file <path>` | no | | Read the Resend API key from a file (`-` for stdin) |
97
+ | `--password-stdin` | no | | Read the SMTP password from stdin |
98
+ | `--password-file <path>` | no | | Read the SMTP password from a file (`-` for stdin) |
99
+ | `--ca-pem-stdin` | no | | Read a custom SMTP CA PEM from stdin |
100
+ | `--ca-pem-file <path>` | no | | Read a custom SMTP CA PEM from a file (`-` for stdin) |
101
+ | `--base-url <url>` | no | | Server base URL |
102
+ | `--json` | no | | Emit machine-readable JSON on stdout |
103
+
104
+ ### `eigenpal email-servers|email-server update [options] <id>`
105
+
106
+ Update metadata or replace transport configuration. Omitted secrets are retained. Passing --transport smtp requires --host, --port, --security, --from-email, and --from-name (no security/port defaults). Metadata-only updates omit --transport.
107
+
108
+ ### Arguments
109
+
110
+ | Name | Required | Variadic | Description |
111
+ | ---- | -------- | -------- | ----------- |
112
+ | `id` | yes | no | |
113
+
114
+ ### Options
115
+
116
+ | Flag | Required | Default | Description |
117
+ | ------------------------ | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
118
+ | `--config-json <json>` | no | | JSON object (non-secret fields only; use secret _-stdin/_-file flags) |
119
+ | `--config-file <path>` | no | | JSON file path (`-` reads stdin; non-secret fields only) |
120
+ | `--name <name>` | no | | Display name |
121
+ | `--transport <kind>` | no | | Transport: resend or smtp |
122
+ | `--from-email <email>` | no | | From address |
123
+ | `--from-name <name>` | no | | From display name (no control characters or <>) |
124
+ | `--enabled` | no | | Enable the server (default on create) |
125
+ | `--disabled` | no | | Disable the server |
126
+ | `--host <host>` | no | | SMTP host (required on update when --transport smtp) |
127
+ | `--port <n>` | no | | SMTP port. Required on update when --transport smtp; create defaults from --security |
128
+ | `--security <mode>` | no | | SMTP security: starttls, tls, or none (unauthenticated trusted relays; credentials are rejected). Required on update when --transport smtp; create defaults to starttls |
129
+ | `--username <user>` | no | | SMTP username (non-secret) |
130
+ | `--api-key-stdin` | no | | Read the Resend API key from stdin |
131
+ | `--api-key-file <path>` | no | | Read the Resend API key from a file (`-` for stdin) |
132
+ | `--password-stdin` | no | | Read the SMTP password from stdin |
133
+ | `--password-file <path>` | no | | Read the SMTP password from a file (`-` for stdin) |
134
+ | `--ca-pem-stdin` | no | | Read a custom SMTP CA PEM from stdin |
135
+ | `--ca-pem-file <path>` | no | | Read a custom SMTP CA PEM from a file (`-` for stdin) |
136
+ | `--clear-ca-pem` | no | | Remove a stored custom SMTP CA certificate |
137
+ | `--clear-username` | no | | Clear stored SMTP username/password pair |
138
+ | `--base-url <url>` | no | | Server base URL |
139
+ | `--json` | no | | Emit machine-readable JSON on stdout |
140
+
141
+ ### `eigenpal email-servers|email-server delete [options] <id>`
142
+
143
+ Soft-delete an outbound email server.
144
+
145
+ ### Arguments
146
+
147
+ | Name | Required | Variadic | Description |
148
+ | ---- | -------- | -------- | ----------- |
149
+ | `id` | yes | no | |
150
+
151
+ ### Options
152
+
153
+ | Flag | Required | Default | Description |
154
+ | ------------------ | -------- | ------- | ------------------------------------ |
155
+ | `--yes` | no | `false` | Required for non-TTY shells |
156
+ | `--base-url <url>` | no | | Server base URL |
157
+ | `--json` | no | | Emit machine-readable JSON on stdout |
158
+
159
+ ### `eigenpal email-servers|email-server test [options] <id>`
160
+
161
+ Send a real connectivity test email through the stored server to --to. Disabled servers fail with a conflict.
162
+
163
+ ### Arguments
164
+
165
+ | Name | Required | Variadic | Description |
166
+ | ---- | -------- | -------- | ----------- |
167
+ | `id` | yes | no | |
168
+
169
+ ### Options
170
+
171
+ | Flag | Required | Default | Description |
172
+ | ------------------ | -------- | ------- | ------------------------------------ |
173
+ | `--to <email>` | yes | | Recipient for the live test message |
174
+ | `--base-url <url>` | no | | Server base URL |
175
+ | `--json` | no | | Emit machine-readable JSON on stdout |
@@ -114,6 +114,13 @@ eigenpal
114
114
  │ └── pull [target]
115
115
  ├── models
116
116
  │ └── list|ls
117
+ ├── email-servers|email-server
118
+ │ ├── list|ls
119
+ │ ├── get <id>
120
+ │ ├── create
121
+ │ ├── update <id>
122
+ │ ├── delete <id>
123
+ │ └── test <id>
117
124
  ├── run <target>
118
125
  ├── rerun <run-id>
119
126
  ├── runs
@@ -5025,6 +5025,252 @@ Output schema:
5025
5025
  ```
5026
5026
 
5027
5027
 
5028
+ #### `action.email` — Send Email
5029
+
5030
+ Send an email with optional attachments via a selected email server. At most 10 recipients combined across to, cc, and bcc.
5031
+
5032
+ **Behavior and examples:** `eigenpal docs read steps/action/email`
5033
+
5034
+ **Durable retry:** This control step is not retried durably.
5035
+
5036
+ **Config** (in `step.with`):
5037
+
5038
+ | Field | Type | Required | Default | Description |
5039
+ | --- | --- | --- | --- | --- |
5040
+ | `server` | string | yes | | Outbound email server id (`ems_…`) |
5041
+ | `to` | string \| array<string> | yes | | Primary recipient(s). String, comma-separated list, or nonempty string array. Combined with cc and bcc, at most 10 recipients. |
5042
+ | `cc` | string \| array<string> | no | | Carbon-copy recipient(s). String, comma-separated list, or string array. Combined with to and bcc, at most 10 recipients. |
5043
+ | `bcc` | string \| array<string> | no | | Blind carbon-copy recipient(s). String, comma-separated list, or string array. Combined with to and cc, at most 10 recipients. |
5044
+ | `replyTo` | string | no | | Reply-To address (supports template expressions) |
5045
+ | `subject` | string | yes | | Email subject |
5046
+ | `text` | string | yes | | Plain-text email body (max 50KiB) |
5047
+ | `attachments` | array<string \| object> | no | | Optional same-run attachments as { fileId, filename? } or a bare fileId string (12MiB combined) |
5048
+
5049
+ **Output:** `object`
5050
+
5051
+ | Field | Type | Required | Default | Description |
5052
+ | --- | --- | --- | --- | --- |
5053
+ | `serverId` | string | yes | | Email server that sent (or would have sent) the message |
5054
+ | `messageId` | string \| null | yes | | Provider message id. Null when delivery was skipped (evaluation runs). |
5055
+ | `provider` | `"resend"` \| `"smtp"` \| null | yes | | Email provider that sent the message. Null when delivery was skipped. |
5056
+ | `to` | array<string> | yes | | Normalized To recipients |
5057
+ | `cc` | array<string> | yes | | Normalized Cc recipients |
5058
+ | `bcc` | array<string> | yes | | Normalized Bcc recipients |
5059
+ | `attachmentCount` | integer | yes | | Number of attachments sent |
5060
+ | `totalBytes` | integer | yes | | Total attachment size in bytes |
5061
+
5062
+ ##### Complete machine-readable schemas
5063
+
5064
+ Config schema:
5065
+
5066
+ ```json
5067
+ {
5068
+ "$schema": "http://json-schema.org/draft-07/schema#",
5069
+ "type": "object",
5070
+ "properties": {
5071
+ "server": {
5072
+ "type": "string",
5073
+ "maxLength": 128,
5074
+ "pattern": "^ems_[A-Za-z0-9_-]+$",
5075
+ "description": "Outbound email server id (`ems_…`)"
5076
+ },
5077
+ "to": {
5078
+ "anyOf": [
5079
+ {
5080
+ "type": "string",
5081
+ "minLength": 1
5082
+ },
5083
+ {
5084
+ "minItems": 1,
5085
+ "type": "array",
5086
+ "items": {
5087
+ "type": "string",
5088
+ "minLength": 1
5089
+ }
5090
+ }
5091
+ ],
5092
+ "description": "Primary recipient(s). String, comma-separated list, or nonempty string array. Combined with cc and bcc, at most 10 recipients."
5093
+ },
5094
+ "cc": {
5095
+ "description": "Carbon-copy recipient(s). String, comma-separated list, or string array. Combined with to and bcc, at most 10 recipients.",
5096
+ "anyOf": [
5097
+ {
5098
+ "type": "string",
5099
+ "minLength": 1
5100
+ },
5101
+ {
5102
+ "type": "array",
5103
+ "items": {
5104
+ "type": "string",
5105
+ "minLength": 1
5106
+ }
5107
+ }
5108
+ ]
5109
+ },
5110
+ "bcc": {
5111
+ "description": "Blind carbon-copy recipient(s). String, comma-separated list, or string array. Combined with to and cc, at most 10 recipients.",
5112
+ "anyOf": [
5113
+ {
5114
+ "type": "string",
5115
+ "minLength": 1
5116
+ },
5117
+ {
5118
+ "type": "array",
5119
+ "items": {
5120
+ "type": "string",
5121
+ "minLength": 1
5122
+ }
5123
+ }
5124
+ ]
5125
+ },
5126
+ "replyTo": {
5127
+ "description": "Reply-To address (supports template expressions)",
5128
+ "type": "string",
5129
+ "minLength": 1
5130
+ },
5131
+ "subject": {
5132
+ "type": "string",
5133
+ "minLength": 1,
5134
+ "description": "Email subject"
5135
+ },
5136
+ "text": {
5137
+ "type": "string",
5138
+ "minLength": 1,
5139
+ "description": "Plain-text email body (max 50KiB)"
5140
+ },
5141
+ "attachments": {
5142
+ "description": "Optional same-run attachments as { fileId, filename? } or a bare fileId string (12MiB combined)",
5143
+ "maxItems": 10,
5144
+ "type": "array",
5145
+ "items": {
5146
+ "anyOf": [
5147
+ {
5148
+ "type": "string",
5149
+ "minLength": 1,
5150
+ "description": "File id or template expression that resolves to a file id"
5151
+ },
5152
+ {
5153
+ "type": "object",
5154
+ "properties": {
5155
+ "fileId": {
5156
+ "type": "string",
5157
+ "minLength": 1,
5158
+ "description": "File id or template expression that resolves to a file id"
5159
+ },
5160
+ "filename": {
5161
+ "description": "Optional download filename override",
5162
+ "type": "string",
5163
+ "minLength": 1
5164
+ }
5165
+ },
5166
+ "required": [
5167
+ "fileId"
5168
+ ],
5169
+ "additionalProperties": false
5170
+ }
5171
+ ]
5172
+ }
5173
+ }
5174
+ },
5175
+ "required": [
5176
+ "server",
5177
+ "to",
5178
+ "subject",
5179
+ "text"
5180
+ ],
5181
+ "additionalProperties": false
5182
+ }
5183
+ ```
5184
+
5185
+
5186
+ Output schema:
5187
+
5188
+ ```json
5189
+ {
5190
+ "$schema": "http://json-schema.org/draft-07/schema#",
5191
+ "type": "object",
5192
+ "properties": {
5193
+ "serverId": {
5194
+ "type": "string",
5195
+ "maxLength": 128,
5196
+ "pattern": "^ems_[A-Za-z0-9_-]+$",
5197
+ "description": "Email server that sent (or would have sent) the message"
5198
+ },
5199
+ "messageId": {
5200
+ "anyOf": [
5201
+ {
5202
+ "type": "string"
5203
+ },
5204
+ {
5205
+ "type": "null"
5206
+ }
5207
+ ],
5208
+ "description": "Provider message id. Null when delivery was skipped (evaluation runs)."
5209
+ },
5210
+ "provider": {
5211
+ "anyOf": [
5212
+ {
5213
+ "type": "string",
5214
+ "enum": [
5215
+ "resend",
5216
+ "smtp"
5217
+ ]
5218
+ },
5219
+ {
5220
+ "type": "null"
5221
+ }
5222
+ ],
5223
+ "description": "Email provider that sent the message. Null when delivery was skipped."
5224
+ },
5225
+ "to": {
5226
+ "type": "array",
5227
+ "items": {
5228
+ "type": "string"
5229
+ },
5230
+ "description": "Normalized To recipients"
5231
+ },
5232
+ "cc": {
5233
+ "type": "array",
5234
+ "items": {
5235
+ "type": "string"
5236
+ },
5237
+ "description": "Normalized Cc recipients"
5238
+ },
5239
+ "bcc": {
5240
+ "type": "array",
5241
+ "items": {
5242
+ "type": "string"
5243
+ },
5244
+ "description": "Normalized Bcc recipients"
5245
+ },
5246
+ "attachmentCount": {
5247
+ "type": "integer",
5248
+ "minimum": 0,
5249
+ "maximum": 9007199254740991,
5250
+ "description": "Number of attachments sent"
5251
+ },
5252
+ "totalBytes": {
5253
+ "type": "integer",
5254
+ "minimum": 0,
5255
+ "maximum": 9007199254740991,
5256
+ "description": "Total attachment size in bytes"
5257
+ }
5258
+ },
5259
+ "required": [
5260
+ "serverId",
5261
+ "messageId",
5262
+ "provider",
5263
+ "to",
5264
+ "cc",
5265
+ "bcc",
5266
+ "attachmentCount",
5267
+ "totalBytes"
5268
+ ],
5269
+ "additionalProperties": false
5270
+ }
5271
+ ```
5272
+
5273
+
5028
5274
  ### Control steps — flow control
5029
5275
 
5030
5276
  #### `control.if` — Condition
@@ -1215,7 +1215,8 @@ This JSON Schema is generated from the same Zod schema used to parse workflow YA
1215
1215
  "enum": [
1216
1216
  "action.http",
1217
1217
  "action.invoke-workflow",
1218
- "action.website-reader"
1218
+ "action.website-reader",
1219
+ "action.email"
1219
1220
  ]
1220
1221
  },
1221
1222
  "name": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eigenpal/cli",
3
- "version": "0.15.1",
3
+ "version": "0.16.0",
4
4
  "description": "Eigenpal CLI — author and run document workflows from your terminal. Agent-ready.",
5
5
  "keywords": [
6
6
  "eigenpal",