@seclai/cli 1.4.0 → 1.5.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,161 @@
1
+ # Changelog
2
+
3
+ ## [1.5.0] - 2026-07-31
4
+
5
+ ### Changed
6
+
7
+ - Require `--step-type` on `agents ai history`. The API marks the parameter required and the command had no way to supply it, so every call answered 422 — the command could not succeed before and the requirement breaks nothing. `--step-id`, `--limit` and `--offset` are now accepted as well
8
+ - Deprecate `agents runs delete`. It never deleted anything — the endpoint it calls is the cancel endpoint, and the API has no delete-a-run operation — so it now warns on stderr and cancels. stdout stays `{"ok": true}`; use `agents runs cancel`, which prints the cancelled run
9
+ - Warn on an empty `--api-version` and ignore it as before. Unlike the four above it costs only the version header, so it keeps working; a future release will reject it
10
+ - Warn on a `--severity` passed to `alerts list` and stop sending it. `GET /alerts` declares no such filter, so it never filtered, and sending it becomes a 422 once `--api-version` is `2026-07-27` or later. The flag still parses and a future release will remove it
11
+ - Reject a non-numeric `--page`, `--limit` or `--offset` at parse time instead of sending `NaN` and reporting the server's 422
12
+ - Require `@seclai/sdk` 1.5.0
13
+
14
+ ### Added
15
+
16
+ - Add an `--api-version <date>` global option, sent as the `Seclai-Version` header, opting into dated API changes released on or before that date. Omitted by default, so upgrading the CLI alone never changes a command's output. `SECLAI_API_VERSION` sets it for a shell, and `--allow-unknown-api-version` permits a date this release was not built against
17
+ - Add `api-version get`, `api-version set <date>` and `api-version clear` to read the version a request resolves to and to pin or clear the account's version. `set` rejects anything that is not a `YYYY-MM-DD` date, since the pin applies to every client on the account and nothing re-checks it afterwards
18
+ - Add the `email` command group covering agent email: `domains` (list, add, remove, verify, set-primary, use-shared, test-email, dmarc), `blocked` (list, add, remove, auto-block-mode), `inbound` (status, rejections, cancel-queued, resume) and `optouts` (list, remove)
19
+ - Add `agents disable` and `agents enable` to pause and resume an agent across every trigger path, and `agents callers` to list the live agents that call it via a `call_agent` step
20
+ - Add `agents triggers email-config` to set the alias, sender allowlist and inbound-handling flags on an `EMAIL_RECEIVED` trigger
21
+ - Add `me`, reporting the authenticated user's account ID and organization memberships
22
+ - Add `docs search` for keyword or semantic search over the Seclai documentation. `--mode` accepts `keyword` or `semantic` and rejects anything else at parse time
23
+ - Add `models tiers`, mapping each media-generation modality and tier to its model and cost
24
+ - Add `--supports-input-media` and `--supports-output-media` filters to `models list`
25
+ - Add `--paged` to `evals criteria list`, wrapping the results in `{data: [...]}` instead of a bare array so `.data` reads the same whatever `--api-version` is in effect. The `pagination` block appears only once the API sends one, from `2026-07-27`
26
+
27
+ ### Fixed
28
+
29
+ - Reject an empty `--api-key`, `--profile`, `--account-id` or `--config-dir` instead of acting as an identity the caller never named. A shell expanding an unset variable passes `""`, which the SDK's credential chain discards, so each silently resolved elsewhere: `--api-key` to `SECLAI_API_KEY` and then a cached SSO session, `--config-dir` to another account's cached tokens, `--account-id` to the default org, `--profile` to the built-in SSO defaults. The command then exited 0, having read or written somewhere other than where it was pointed. Guard the flag rather than the value — `seclai ${KEY:+--api-key "$KEY"} …`
30
+ - Ship current skill content from `skills install`. The files it writes are string constants compiled into the CLI, regenerated by a script that nothing ran, so since March it had been installing a skill that documented a since-removed flag and none of the commands added after 1.1.0
31
+ - Split the installed skill into a short index plus per-domain references, so an agent loads a command map rather than every command. `skills install` now writes 12 files instead of 4, and the set is discovered from disk rather than hard-coded
32
+ - Complete the `auth` and `configure` groups and their subcommands, and `models list` / `models get`, in bash, zsh and fish. All were reachable but absent from the generated completion scripts — including `configure sso`, the first command a new user runs
33
+ - Offer `--profile`, `--account-id` and `--config-dir` in the zsh and fish completions. They have been accepted as global options since 1.2.0 but were never suggested
34
+
35
+ ## [1.4.0] - 2026-06-05
36
+
37
+ ### Added
38
+
39
+ - Add `agents attachment-references` to read an agent's static attachment-reference contract before staging uploads ([#9](https://github.com/seclai/seclai-cli/pull/9))
40
+ - Add `agents runs download-attachment` for a file emitted by a run step, writing to `--output` or streaming raw bytes to stdout ([#9](https://github.com/seclai/seclai-cli/pull/9))
41
+ - Add `models experiments delete` to soft-delete a model playground experiment ([#9](https://github.com/seclai/seclai-cli/pull/9))
42
+
43
+ ## [1.3.0] - 2026-05-22
44
+
45
+ ### Added
46
+
47
+ - Add `agents preview-import` to validate an agent definition without creating anything, reporting step, schedule, alert, criteria and policy counts plus any unresolved entity refs ([#8](https://github.com/seclai/seclai-cli/pull/8))
48
+
49
+ ## [1.2.2] - 2026-04-24
50
+
51
+ ### Added
52
+
53
+ - Add `models list` and `models get` for the model catalog ([#7](https://github.com/seclai/seclai-cli/pull/7))
54
+ - Add model playground commands `models experiments list`, `create`, `get` and `cancel` ([#7](https://github.com/seclai/seclai-cli/pull/7))
55
+
56
+ ## [1.2.1] - 2026-04-02
57
+
58
+ ### Added
59
+
60
+ - Add `agents export`, returning a portable JSON snapshot of an agent definition ([#6](https://github.com/seclai/seclai-cli/pull/6))
61
+
62
+ ## [1.2.0] - 2026-03-27
63
+
64
+ ### Added
65
+
66
+ - Add `auth login`, `logout`, `status` and `refresh` for browser-based OAuth2/PKCE SSO, with tokens cached locally and refreshed automatically. `login` takes `--no-browser` and `--port` ([#5](https://github.com/seclai/seclai-cli/pull/5))
67
+ - Add `configure sso` and `configure list` to create and inspect `~/.seclai/config` profiles ([#5](https://github.com/seclai/seclai-cli/pull/5))
68
+ - Add `--profile` and `--config-dir` global options, selecting the SSO profile and config directory ([#5](https://github.com/seclai/seclai-cli/pull/5))
69
+
70
+ ## [1.1.1] - 2026-03-24
71
+
72
+ ### Added
73
+
74
+ - Add `mcp configure` to write Seclai MCP server config into AI coding tool config files, and `mcp show` to print the snippet for manual setup ([#4](https://github.com/seclai/seclai-cli/pull/4))
75
+
76
+ ## [1.1.0] - 2026-03-24
77
+
78
+ ### Added
79
+
80
+ - Expand coverage from agents, sources and contents to knowledge bases, memory banks, source exports, embedding migrations, solutions, governance, evaluations, alerts, model alerts and the AI assistants ([#3](https://github.com/seclai/seclai-cli/pull/3))
81
+ - Add `agents run --events` to stream every SSE event as newline-delimited JSON, with `--event-filter` and `--output full|data|status`, and `--poll` to submit and poll until completion ([#3](https://github.com/seclai/seclai-cli/pull/3))
82
+ - Add `search` across all resource types in an account ([#3](https://github.com/seclai/seclai-cli/pull/3))
83
+ - Add `skills install` to install Seclai CLI skill files into AI coding tool directories ([#3](https://github.com/seclai/seclai-cli/pull/3))
84
+ - Add `completion bash|zsh|fish` to generate shell completion scripts ([#3](https://github.com/seclai/seclai-cli/pull/3))
85
+
86
+ ## [1.0.6] - 2026-01-30
87
+
88
+ ### Added
89
+
90
+ - Add `contents upload` to replace existing content with a file upload, taking `--title` and `--mime-type`
91
+ - Add `--metadata` and `--metadata-file` to the upload commands
92
+
93
+ ### Removed
94
+
95
+ - **Breaking:** Remove the `<agentId>` argument from the run-scoped commands. The API stopped requiring it in 1.0.4, where it was retained and ignored; pass the run ID alone
96
+
97
+ ## [1.0.5] - 2026-01-30
98
+
99
+ _Documentation only. Every command and option gained help text; there are no functional changes._
100
+
101
+ ## [1.0.4] - 2026-01-27
102
+
103
+ ### Added
104
+
105
+ - Accept a run ID alone in `agents runs get` and `agents runs cancel`. The agent ID argument is still accepted, and is removed in 1.0.6
106
+
107
+ ## [1.0.3] - 2026-01-20
108
+
109
+ ### Added
110
+
111
+ - Accept `source` as an alias for the `sources` command
112
+
113
+ ### Fixed
114
+
115
+ - Send requests to `https://api.seclai.com` by default rather than relying on the SDK's default, and honour `SECLAI_API_URL` when set
116
+ - Resolve the entrypoint through symlinks, so a globally installed `seclai` runs instead of exiting silently
117
+ - Report SDK errors with status, URL and response body instead of a bare message
118
+
119
+ ## [1.0.2] - 2026-01-13
120
+
121
+ ### Changed
122
+
123
+ - Require `@seclai/sdk` 1.0.3
124
+
125
+ ## [1.0.1] - 2026-01-13
126
+
127
+ ### Added
128
+
129
+ - Add `agents run --stream` to wait for a streaming run to complete and print the final result
130
+
131
+ ## [1.0.0] - 2026-01-12
132
+
133
+ _Stable release. No functional changes since 0.0.2._
134
+
135
+ ## [0.0.2] - 2026-01-12
136
+
137
+ ### Fixed
138
+
139
+ - Report the published version in the generated documentation instead of `0.0.0`
140
+
141
+ ## [0.0.1] - 2026-01-12
142
+
143
+ _Initial release._
144
+
145
+ [1.5.0]: https://github.com/seclai/seclai-cli/releases/tag/1.5.0
146
+ [1.4.0]: https://github.com/seclai/seclai-cli/releases/tag/1.4.0
147
+ [1.3.0]: https://github.com/seclai/seclai-cli/releases/tag/1.3.0
148
+ [1.2.2]: https://github.com/seclai/seclai-cli/releases/tag/1.2.2
149
+ [1.2.1]: https://github.com/seclai/seclai-cli/releases/tag/1.2.1
150
+ [1.2.0]: https://github.com/seclai/seclai-cli/releases/tag/1.2.0
151
+ [1.1.1]: https://github.com/seclai/seclai-cli/releases/tag/1.1.1
152
+ [1.1.0]: https://github.com/seclai/seclai-cli/releases/tag/1.1.0
153
+ [1.0.6]: https://github.com/seclai/seclai-cli/releases/tag/1.0.6
154
+ [1.0.5]: https://github.com/seclai/seclai-cli/releases/tag/1.0.5
155
+ [1.0.4]: https://github.com/seclai/seclai-cli/releases/tag/1.0.4
156
+ [1.0.3]: https://github.com/seclai/seclai-cli/releases/tag/1.0.3
157
+ [1.0.2]: https://github.com/seclai/seclai-cli/releases/tag/1.0.2
158
+ [1.0.1]: https://github.com/seclai/seclai-cli/releases/tag/1.0.1
159
+ [1.0.0]: https://github.com/seclai/seclai-cli/releases/tag/1.0.0
160
+ [0.0.2]: https://github.com/seclai/seclai-cli/releases/tag/0.0.2
161
+ [0.0.1]: https://github.com/seclai/seclai-cli/releases/tag/0.0.1
package/README.md CHANGED
@@ -42,7 +42,7 @@ npx add-mcp https://api.seclai.com/mcp --header "X-API-Key: $SECLAI_API_KEY" --n
42
42
 
43
43
  ## Documentation
44
44
 
45
- Command reference (latest): https://seclai.github.io/seclai-cli/1.4.0/
45
+ Command reference (latest): https://seclai.github.io/seclai-cli/1.5.0/
46
46
 
47
47
  ## Authentication
48
48
 
@@ -86,6 +86,16 @@ or set environment variables:
86
86
  | `SECLAI_SSO_CLIENT_ID` | Cognito app client ID | `4bgf8v9qmc5puivbaqon9n5lmr` |
87
87
  | `SECLAI_SSO_REGION` | AWS region | `us-west-2` |
88
88
 
89
+ Set profiles up interactively, and list the ones you have:
90
+
91
+ ```bash
92
+ # Prompts for domain, client ID, region, and account ID
93
+ seclai configure sso [--profile-name <name>]
94
+
95
+ # Show every configured profile
96
+ seclai configure list
97
+ ```
98
+
89
99
  Use a named profile with `--profile`:
90
100
 
91
101
  ```bash
@@ -102,6 +112,7 @@ Tokens are cached in `~/.seclai/sso/cache/` and auto-refreshed when expired.
102
112
  | `SECLAI_API_URL` | Override API base URL (default: `https://api.seclai.com`) |
103
113
  | `SECLAI_PROFILE` | Default SSO profile name (default: `default`) |
104
114
  | `SECLAI_CONFIG_DIR` | Config directory path (default: `~/.seclai`) |
115
+ | `SECLAI_API_VERSION` | Dated API version (alternative to `--api-version`) |
105
116
  | `SECLAI_SSO_DOMAIN` | Override SSO domain (default: `auth.seclai.com`) |
106
117
  | `SECLAI_SSO_CLIENT_ID` | Override SSO client ID (default: `4bgf8v9qmc5puivbaqon9n5lmr`) |
107
118
  | `SECLAI_SSO_REGION` | Override SSO region (default: `us-west-2`) |
@@ -114,11 +125,54 @@ Tokens are cached in `~/.seclai/sso/cache/` and auto-refreshed when expired.
114
125
  | `--profile <name>` | SSO profile name |
115
126
  | `--account-id <id>` | Account ID (`X-Account-Id` header) |
116
127
  | `--config-dir <path>` | Config directory path |
128
+ | `--api-version <date>` | Opt into dated API changes released on or before this `YYYY-MM-DD` |
129
+ | `--allow-unknown-api-version` | Send an `--api-version` this CLI was not built against |
117
130
  | `--compact` | Output compact (single-line) JSON |
118
131
  | `-V, --version` | Print version |
119
132
 
120
133
  ---
121
134
 
135
+ ## API Versions
136
+
137
+ The API is versioned by date. Responses can change shape between versions — a
138
+ bare array becoming a `{data, pagination}` envelope, for instance — so the CLI
139
+ sends **no version header by default**. Upgrading the CLI on its own never
140
+ changes what a command prints.
141
+
142
+ ```bash
143
+ # See which version a request resolves to
144
+ seclai api-version get
145
+
146
+ # Opt one invocation into the changes released up to a date
147
+ seclai --api-version 2026-07-27 alerts list
148
+
149
+ # Or for every client on the account, not just this CLI
150
+ seclai api-version set 2026-07-27
151
+ seclai api-version clear # revert to the default
152
+ ```
153
+
154
+ An `--api-version` this CLI was not built against is rejected, because a newer
155
+ version can reshape a response the CLI would then misread. Pass
156
+ `--allow-unknown-api-version` to send it anyway. `api-version set` takes a
157
+ `YYYY-MM-DD` date and rejects anything else, because the pin applies to every
158
+ client on the account and nothing re-checks it afterwards.
159
+
160
+ `--api-key`, `--profile`, `--account-id` and `--config-dir` reject an empty
161
+ value. A shell expanding an unset variable passes `""`, which the SDK discards,
162
+ so `--api-key "$KEY"` with `KEY` unset would fall back to `SECLAI_API_KEY` or a
163
+ cached SSO session and run as a different identity — and `--account-id ""` would
164
+ act on the default org rather than the one you named. Guard the flag instead of
165
+ the value:
166
+
167
+ ```bash
168
+ seclai ${KEY:+--api-key "$KEY"} agents list
169
+ ```
170
+
171
+ An empty `--api-version` is still accepted, with a warning: it costs only the
172
+ version header. A future release will reject that too.
173
+
174
+ ---
175
+
122
176
  ## Commands
123
177
 
124
178
  ### Agents
@@ -129,6 +183,20 @@ seclai agents create --json '{"name":"My Agent"}'
129
183
  seclai agents get <agentId>
130
184
  seclai agents update <agentId> --json '{"name":"Renamed"}'
131
185
  seclai agents delete <agentId>
186
+
187
+ # Pause an agent across every trigger path, then resume it
188
+ seclai agents disable <agentId>
189
+ seclai agents enable <agentId>
190
+
191
+ # Which live agents call this one via a call_agent step?
192
+ seclai agents callers <agentId>
193
+ ```
194
+
195
+ #### Triggers
196
+
197
+ ```bash
198
+ # Alias, sender allowlist, and inbound-handling flags for an EMAIL_RECEIVED trigger
199
+ seclai agents triggers email-config <agentId> <triggerId> --json '{"alias":"support"}'
132
200
  ```
133
201
 
134
202
  #### Running Agents
@@ -158,8 +226,8 @@ seclai agents run <agentId> --json '{"input":"Hi"}' --poll --poll-interval-ms 20
158
226
  ```bash
159
227
  seclai agents runs list <agentId> [--page N] [--limit N]
160
228
  seclai agents runs get <runId> [--include-step-outputs]
161
- seclai agents runs delete <runId>
162
229
  seclai agents runs cancel <runId>
230
+ seclai agents runs delete <runId> # deprecated alias for `runs cancel`
163
231
  seclai agents runs search [--page N] [--limit N] [--json '...']
164
232
  seclai agents runs eval-results <agentId> <runId> [--page N] [--limit N]
165
233
  # Download a file attachment emitted by a run step. attachmentId is the
@@ -204,7 +272,8 @@ seclai agents input-status <agentId> <uploadId>
204
272
  ```bash
205
273
  seclai agents ai gen-steps <agentId> --user-input "Build a QA chatbot"
206
274
  seclai agents ai step-config <agentId> --user-input "Configure the search step"
207
- seclai agents ai history <agentId>
275
+ # --step-type is required: the API rejects the request without it.
276
+ seclai agents ai history <agentId> --step-type llm [--step-id <id>] [--limit N] [--offset N]
208
277
  seclai agents ai mark <agentId> <conversationId> --json '{"accepted":true}'
209
278
  ```
210
279
 
@@ -303,7 +372,7 @@ seclai memory ai accept <conversationId> --json '{"accepted":true}'
303
372
  #### Criteria
304
373
 
305
374
  ```bash
306
- seclai evals criteria list <agentId> [--page N] [--limit N]
375
+ seclai evals criteria list <agentId> [--page N] [--limit N] [--paged]
307
376
  seclai evals criteria create <agentId> --json '{"name":"Quality"}'
308
377
  seclai evals criteria get <criteriaId>
309
378
  seclai evals criteria update <criteriaId> --json '{"name":"Renamed"}'
@@ -311,6 +380,12 @@ seclai evals criteria delete <criteriaId>
311
380
  seclai evals criteria summary <criteriaId>
312
381
  ```
313
382
 
383
+ `--paged` wraps the results in `{"data": [...]}` instead of returning a bare
384
+ array, so `.data` is a stable path to read whatever `--api-version` is in
385
+ effect. Nothing is invented: the `pagination` block appears only once the API
386
+ sends one, from `--api-version 2026-07-27`. Migrate scripts to `.data` first,
387
+ then opt in to get `.pagination`.
388
+
314
389
  #### Results
315
390
 
316
391
  ```bash
@@ -375,7 +450,7 @@ seclai governance ai decline <conversationId>
375
450
  ### Alerts
376
451
 
377
452
  ```bash
378
- seclai alerts list [--page N] [--limit N] [--status open] [--severity high]
453
+ seclai alerts list [--page N] [--limit N] [--status open]
379
454
  seclai alerts get <alertId>
380
455
  seclai alerts status <alertId> --json '{"status":"resolved"}'
381
456
  seclai alerts comment <alertId> --json '{"comment":"Investigating"}'
@@ -383,6 +458,10 @@ seclai alerts subscribe <alertId>
383
458
  seclai alerts unsubscribe <alertId>
384
459
  ```
385
460
 
461
+ `--severity` is accepted for compatibility but ignored with a warning, and will
462
+ be removed. `GET /alerts` declares no severity filter, so it never filtered.
463
+ Filter client-side: `seclai alerts list | jq '[.data[] | select(.severity == "high")]'`.
464
+
386
465
  #### Alert Configurations
387
466
 
388
467
  ```bash
@@ -402,6 +481,15 @@ seclai alerts prefs update <organizationId> <alertType> --json '{"enabled":true}
402
481
 
403
482
  ### Models
404
483
 
484
+ ```bash
485
+ seclai models list [--provider <name>] [--supports-tool-use] [--supports-thinking]
486
+ seclai models list --supports-input-media image --supports-output-media video
487
+ seclai models get <modelId>
488
+
489
+ # Each media-generation modality and tier, with its model and cost
490
+ seclai models tiers
491
+ ```
492
+
405
493
  #### Model Alerts
406
494
 
407
495
  ```bash
@@ -431,6 +519,63 @@ seclai models experiments delete <experimentId> # soft-delete, preserves audit
431
519
 
432
520
  ```bash
433
521
  seclai search --query "deployment guide" [--limit N] [--entity-type agent|source|kb]
522
+
523
+ # Search the Seclai documentation
524
+ seclai docs search --query "memory banks" [--mode keyword|semantic] [--limit N]
525
+ ```
526
+
527
+ ### Account
528
+
529
+ ```bash
530
+ # The authenticated user's account ID and organization memberships
531
+ seclai me
532
+ ```
533
+
534
+ ### Email
535
+
536
+ Agent email: the domains agents send from, the inbound blocklist, inbound
537
+ health, and recipient opt-outs.
538
+
539
+ #### Domains
540
+
541
+ ```bash
542
+ seclai email domains list
543
+ seclai email domains add --kind custom --value mail.example.com [--delegated]
544
+ seclai email domains verify <domainId> # check DNS now
545
+ seclai email domains set-primary <domainId>
546
+ seclai email domains test-email <domainId> # send a test to the account owner
547
+ seclai email domains dmarc <domainId> [--days N] [--top-sources N]
548
+ seclai email domains remove <domainId>
549
+ seclai email domains use-shared # revert to agent.seclai.com
550
+ ```
551
+
552
+ `add` returns the DNS records to publish. Use `--delegated` when the domain's
553
+ DNS is delegated to Seclai, so those records are published for you.
554
+
555
+ #### Blocked Senders
556
+
557
+ ```bash
558
+ seclai email blocked list [--limit N] [--offset N]
559
+ seclai email blocked add --sender-email spam@example.com [--note "phishing"]
560
+ seclai email blocked add --sender-email example.com --match-type domain
561
+ seclai email blocked remove <blockedId>
562
+ seclai email blocked auto-block-mode disabled|input|input_and_output
563
+ ```
564
+
565
+ #### Inbound Health
566
+
567
+ ```bash
568
+ seclai email inbound status # quota, pause state, queued runs
569
+ seclai email inbound rejections [--agent-id <id>] [--limit N]
570
+ seclai email inbound cancel-queued # fail all over-quota parked runs
571
+ seclai email inbound resume # lift the account-wide pause
572
+ ```
573
+
574
+ #### Opt-outs
575
+
576
+ ```bash
577
+ seclai email optouts list [--agent-id <id>] [--limit N] [--offset N]
578
+ seclai email optouts remove <optoutId>
434
579
  ```
435
580
 
436
581
  ### AI Assistant