@seclai/cli 1.5.0 → 1.6.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 CHANGED
@@ -1,20 +1,21 @@
1
1
  # Changelog
2
2
 
3
- ## [1.5.0] - 2026-07-31
3
+ ## [1.5.0] - 2026-08-06
4
4
 
5
5
  ### Changed
6
6
 
7
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
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
9
+ - Reject a `--page`, `--limit` or `--offset` that is not a non-negative whole number at parse time, instead of sending `NaN` and reporting the server's 422. Hex and exponent literals are rejected too: `--limit 0x10` used to be read as 16
10
+ - 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
11
+ - Generate the shell completion scripts from the command tree rather than three hand-maintained copies, so every command is offered at every depth in bash, zsh and fish
12
+ - Reject an empty `--api-key`, `--profile`, `--account-id` or `--config-dir` when a command builds a client, rather than for every command — `completion`, `skills install`, `mcp show` and `configure` resolve no identity and are unaffected
12
13
  - Require `@seclai/sdk` 1.5.0
13
14
 
14
15
  ### Added
15
16
 
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
17
+ - 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. An empty value is warned about and ignored rather than silently adopting `SECLAI_API_VERSION`
18
+ - 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 a version this release was not built against the pin applies to every client on the account and nothing re-checks it afterwards, so it is held to the same standard as the `--api-version` header, with `--allow-unknown-api-version` as the same escape hatch
18
19
  - 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
20
  - 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
21
  - Add `agents triggers email-config` to set the alias, sender allowlist and inbound-handling flags on an `EMAIL_RECEIVED` trigger
@@ -22,13 +23,19 @@
22
23
  - 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
24
  - Add `models tiers`, mapping each media-generation modality and tier to its model and cost
24
25
  - 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
+ - Add `--paged` to every list whose shape is version-gated — `evals criteria list`, `alerts configs list`, `models alerts list` and `agents runs eval-results` — wrapping the results in `{data: [...]}` so `.data` reads the same whatever `--api-version` is in effect. Without it, opting into `2026-07-27` renames `configs` and `alerts` to `data` and a script reading the old key gets `null` with exit 0
27
+
28
+ ### Removed
29
+
30
+ - Remove `--severity` from `alerts list`. `GET /alerts` declares no such filter, so it never filtered — it returned unfiltered rows that looked filtered, and became a 422 once `--api-version` was `2026-07-27` or later. Filter client-side: `seclai alerts list | jq '[.data[] | select(.severity == "high")]'`
26
31
 
27
32
  ### Fixed
28
33
 
29
34
  - 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
35
  - 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
36
+ - Cancel a run. `agents runs cancel` posted to a path the API has never exposed, so it failed in every release since 1.0.4 including for callers following this release's advice to use it instead of `agents runs delete`
37
+ - Return results from `agents runs eval-results`, which decoded a shape the endpoint does not send and so returned nothing
38
+ - Paginate `models alerts list`. It sent a page parameter the endpoint does not accept, so every page after the first repeated page 1
32
39
  - 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
40
  - 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
41
 
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.5.0/
45
+ Command reference (latest): https://seclai.github.io/seclai-cli/1.6.0/
46
46
 
47
47
  ## Authentication
48
48
 
@@ -153,9 +153,10 @@ seclai api-version clear # revert to the default
153
153
 
154
154
  An `--api-version` this CLI was not built against is rejected, because a newer
155
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.
156
+ `--allow-unknown-api-version` to send it anyway. `api-version set` is held to
157
+ the same standard — it rejects a version this release was not built against,
158
+ with the same override — because the pin applies to every client on the account
159
+ and nothing re-checks it afterwards.
159
160
 
160
161
  `--api-key`, `--profile`, `--account-id` and `--config-dir` reject an empty
161
162
  value. A shell expanding an unset variable passes `""`, which the SDK discards,
@@ -229,7 +230,7 @@ seclai agents runs get <runId> [--include-step-outputs]
229
230
  seclai agents runs cancel <runId>
230
231
  seclai agents runs delete <runId> # deprecated alias for `runs cancel`
231
232
  seclai agents runs search [--page N] [--limit N] [--json '...']
232
- seclai agents runs eval-results <agentId> <runId> [--page N] [--limit N]
233
+ seclai agents runs eval-results <agentId> <runId> [--page N] [--limit N] [--paged]
233
234
  # Download a file attachment emitted by a run step. attachmentId is the
234
235
  # URL-safe-base64 storage_key from run output manifests / webhooks.
235
236
  seclai agents runs download-attachment <runId> <attachmentId> [--download-name <name>] [--output <path>]
@@ -382,7 +383,9 @@ seclai evals criteria summary <criteriaId>
382
383
 
383
384
  `--paged` wraps the results in `{"data": [...]}` instead of returning a bare
384
385
  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
+ effect. The same flag is on `alerts configs list`, `models alerts list` and
387
+ `agents runs eval-results`, whose top-level keys (`configs`, `alerts`) also
388
+ become `data` from `2026-07-27`. Nothing is invented: the `pagination` block appears only once the API
386
389
  sends one, from `--api-version 2026-07-27`. Migrate scripts to `.data` first,
387
390
  then opt in to get `.pagination`.
388
391
 
@@ -458,9 +461,9 @@ seclai alerts subscribe <alertId>
458
461
  seclai alerts unsubscribe <alertId>
459
462
  ```
460
463
 
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
+ There is no `--severity`: `GET /alerts` declares no such filter, so it never
465
+ filtered it returned unfiltered rows that looked filtered. Filter client-side:
466
+ `seclai alerts list | jq '[.data[] | select(.severity == "high")]'`.
464
467
 
465
468
  #### Alert Configurations
466
469