@knowttl/checkpoint-axi 0.1.0 → 0.1.2
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/README.md +136 -421
- package/axi-credential.schema.json +29 -10
- package/dist/src/catalogue.d.ts +3 -1
- package/dist/src/catalogue.js +6 -1
- package/dist/src/profiles.js +7 -3
- package/dist/src/reads.js +18 -8
- package/dist/src/response-invalid.d.ts +2 -0
- package/dist/src/response-invalid.js +17 -0
- package/dist/src/transport.d.ts +1 -0
- package/dist/src/transport.js +11 -8
- package/docs/agent-guide.md +114 -0
- package/docs/commands.md +29 -1
- package/docs/configuration.md +77 -0
- package/docs/design.md +165 -0
- package/docs/downloads.md +32 -0
- package/docs/reads.md +93 -0
- package/docs/writes.md +200 -0
- package/package.json +2 -2
- package/skills/checkpoint-axi/SKILL.md +16 -10
package/README.md
CHANGED
|
@@ -1,458 +1,173 @@
|
|
|
1
1
|
# checkpoint-axi
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
Slices C1-C11 of 12 ship local profile discovery, regional authentication, a bounded live `doctor` check, email search/detail reads, event/task reads, exception reads, gated email quarantine/restore, name-only event actions, exception writes for all eight kinds and guarded email/attachment downloads.
|
|
5
|
-
Artium integration follows in C12.
|
|
6
|
-
The full API surface and commissioning deferrals are tracked in [the design](docs/design.md).
|
|
3
|
+
Inspect Check Point Email Security through compact, guarded AXI commands
|
|
7
4
|
|
|
8
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@knowttl/checkpoint-axi) [](LICENSE) [](package.json) [](https://www.npmjs.com/package/@knowttl/checkpoint-axi#provenance) [](https://github.com/knowttl)
|
|
9
6
|
|
|
10
|
-
|
|
7
|
+
[Why](#why-this-exists) | [Quickstart](#quickstart) | [Agents](#use-with-your-agent) | [Coverage](#what-it-covers) | [Safety](#safety) | [Configuration](#configuration) | [Output](#output-and-exit-codes) | [Troubleshooting](#troubleshooting) | [Contributing](#contributing) | [Security](#security) | [License](#license)
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
corepack pnpm install --frozen-lockfile --ignore-scripts
|
|
14
|
-
corepack pnpm run build
|
|
15
|
-
node bin/checkpoint-axi.js
|
|
16
|
-
node bin/checkpoint-axi.js config path
|
|
17
|
-
node bin/checkpoint-axi.js profile list
|
|
18
|
-
node bin/checkpoint-axi.js auth status --help
|
|
19
|
-
```
|
|
9
|
+
## Why this exists
|
|
20
10
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
Check Point Email Security (Harmony Email & Collaboration) exposes a large API with inconsistent examples and undocumented response shapes.
|
|
12
|
+
Agents need bounded results and explicit uncertainty to avoid guessing routes or replaying disruptive actions.
|
|
13
|
+
This CLI returns compact TOON, redacts secret-derived text and provides next-step hints.
|
|
14
|
+
Reads have request, byte and time budgets; writes require exact permission, confirmation and durable intent.
|
|
15
|
+
Live API contracts still require manual verification; offline fixtures do not establish live compatibility.
|
|
24
16
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
| `checkpoint-axi attachment download-all` | Download available attachments as a ZIP to a new private file with opt-in, a 50 MiB cap and mandatory SHA-256 verification; ZIP hash availability and scopes are unverified; HTTP 200 may contain only some attachments (guide pages 135-137) |
|
|
30
|
-
| `checkpoint-axi auth status` | Validate the selected local profile and secret source without API calls |
|
|
31
|
-
| `checkpoint-axi config path` | Show config and state paths without reading files; --profile does not affect paths |
|
|
32
|
-
| `checkpoint-axi doctor` | Check regional API authentication and one bounded email search without printing tenant data |
|
|
33
|
-
| `checkpoint-axi email download` | Download an email to a new private file with profile opt-in, a 50 MiB cap and mandatory SHA-256 verification; scopes and email hash availability are unverified (guide pages 131-132) |
|
|
34
|
-
| `checkpoint-axi email quarantine` | Preview or request asynchronous email quarantine through the gated write coordinator (guide pages 28-30) |
|
|
35
|
-
| `checkpoint-axi email restore` | Preview or request asynchronous email restore through the gated write coordinator (guide pages 28-30) |
|
|
36
|
-
| `checkpoint-axi email search` | Search emails with a bounded date window and scroll continuation (API guide pages 18-27) |
|
|
37
|
-
| `checkpoint-axi email show` | Show one email with verdicts, actions and available actions (API guide pages 10-18) |
|
|
38
|
-
| `checkpoint-axi event action` | Preview or request a name-only event action; parameterized actions refuse ENDPOINT_UNVERIFIED pending commissioning (guide pages 35-37, 42-45) |
|
|
39
|
-
| `checkpoint-axi event list` | List security events with bounded scroll continuation (API guide pages 37-42) |
|
|
40
|
-
| `checkpoint-axi event show` | Show one event, actions taken and available actions (API guide pages 34-37) |
|
|
41
|
-
| `checkpoint-axi exception clear` | Refuse click-time/malware/url/dlp clear with ENDPOINT_UNVERIFIED until commissioning establishes counts and delete contracts (guide pages 87-88, 96-97, 107-110, 117-120, 128-131) |
|
|
42
|
-
| `checkpoint-axi exception create` | Preview or create one exception of any kind; anomaly/click-time/malware/url/dlp response identities are unverified (guide pages 61-64, 75-78, 84-85, 91-93, 102-105, 113-116, 123-126) |
|
|
43
|
-
| `checkpoint-axi exception list` | List bounded exceptions for phishing-allow, phishing-block, spam-allow, anomaly, click-time, malware, url or dlp (guide pages 49-123) |
|
|
44
|
-
| `checkpoint-axi exception remove` | Preview or remove one phishing/spam/anomaly/click-time exception by ID; malware/url/dlp refuse ENDPOINT_UNVERIFIED before authentication (guide pages 67-69, 81-82, 85-87, 98-99, 108-110, 119-120, 129-131) |
|
|
45
|
-
| `checkpoint-axi exception remove-items` | Preview or remove 1-20 click-time items by caller-supplied IDs; existence is unverified (guide pages 97-98) |
|
|
46
|
-
| `checkpoint-axi exception show` | Show an exception by kind and ID/value; anomaly refuses ENDPOINT_UNVERIFIED pending commissioning (guide pages 52-123) |
|
|
47
|
-
| `checkpoint-axi exception update` | Preview or replace one exception; phishing/spam/click-time require an ID; malware/url/dlp identify it in --input without an ID; anomaly unsupported (guide pages 64-67, 78-81, 94-96, 105-107, 116-117, 126-127) |
|
|
48
|
-
| `checkpoint-axi home` | Show local profile context without resolving secrets or making API calls |
|
|
49
|
-
| `checkpoint-axi profile list` | List file profiles without resolving secrets; --profile does not filter this list |
|
|
50
|
-
| `checkpoint-axi task show` | Show asynchronous task status and per-action details (API guide pages 30-33) |
|
|
51
|
-
<!-- command-registry:end -->
|
|
17
|
+
## Quickstart
|
|
18
|
+
|
|
19
|
+
Requires Node.js 22.12 or later.
|
|
20
|
+
Install and open the local home view, which needs no credentials or network:
|
|
52
21
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
The C6 coordinator durably records intent, re-reads every event and sends one batch only if the action remains available on every target.
|
|
59
|
-
Accepted responses identify a task for every event; use `checkpoint-axi task show <taskId>` to inspect execution.
|
|
60
|
-
Ambiguous outcomes are never retried.
|
|
61
|
-
|
|
62
|
-
`event show <id>` lists all available actions, including parameterized actions deferred until live commissioning through Artium.
|
|
63
|
-
Nonempty `actionParameter` objects and repeated action names refuse `ENDPOINT_UNVERIFIED`, including during preview.
|
|
64
|
-
The guide exposes parameter objects on pages 36-37 but requires `eventActionParam` strings on page 43; C7 does not guess serialization or add a parameter selector.
|
|
65
|
-
Name-only actions send `eventActionParam: [""]`; this and all live-only behavior remain uncommissioned.
|
|
66
|
-
|
|
67
|
-
## Profiles
|
|
68
|
-
|
|
69
|
-
`config path` reports platform paths without reading files.
|
|
70
|
-
Config defaults to `$XDG_CONFIG_HOME/checkpoint-axi/config.json` (or `~/.config/checkpoint-axi/config.json`) on Linux/macOS, and `%APPDATA%\checkpoint-axi\config.json` on Windows.
|
|
71
|
-
State defaults to `$XDG_STATE_HOME/checkpoint-axi` (or `~/.local/state/checkpoint-axi`), and `%LOCALAPPDATA%\checkpoint-axi` on Windows.
|
|
72
|
-
Windows ignores XDG variables.
|
|
73
|
-
No command discovers config from the current directory or writes configuration.
|
|
74
|
-
|
|
75
|
-
Create a config file with this synthetic shape and protect it from group/other writes:
|
|
76
|
-
|
|
77
|
-
```json
|
|
78
|
-
{
|
|
79
|
-
"version": 1,
|
|
80
|
-
"defaultProfile": "example",
|
|
81
|
-
"profiles": {
|
|
82
|
-
"example": {
|
|
83
|
-
"region": "eu",
|
|
84
|
-
"clientId": "synthetic-client",
|
|
85
|
-
"clientSecret": { "env": "CHECKPOINT_AXI_CLIENT_SECRET" },
|
|
86
|
-
"saas": "office365_emails",
|
|
87
|
-
"downloads": { "allow": false },
|
|
88
|
-
"writes": { "allowWrites": false, "operations": [] }
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
22
|
+
```sh
|
|
23
|
+
npm install --global @knowttl/checkpoint-axi
|
|
24
|
+
checkpoint-axi
|
|
25
|
+
# Or without a global install:
|
|
26
|
+
npx -y @knowttl/checkpoint-axi
|
|
92
27
|
```
|
|
93
28
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
`auth status` resolves the selected reference locally and reports only its kind (`env` or `file`); it never prints the value, client ID, variable name or secret file path.
|
|
97
|
-
It confirms local readiness, not API authentication.
|
|
98
|
-
`profile list` and home never resolve secret files.
|
|
99
|
-
Supported regions are `us`, `eu`, `ca`, `au`, `uk`, `uae` and `in`; there is no origin override.
|
|
100
|
-
Optional `saas` defaults to `office365_emails`; `doctor`, `email search` and `event list` accept `--saas <name>` to override it for that call.
|
|
101
|
-
Optional `scope` supplies the required email download `scopes` header and the default optional attachment `scope` query.
|
|
102
|
-
The host-facing [credential schema](axi-credential.schema.json) describes one strict profile.
|
|
103
|
-
|
|
104
|
-
Config precedence is `--config`, then `CHECKPOINT_AXI_CONFIG`, then the platform path.
|
|
105
|
-
Profile precedence is `--profile`, `CHECKPOINT_AXI_PROFILE`, complete env profile, config default, sole file profile, then an explicit missing/ambiguous error.
|
|
106
|
-
An env profile requires `CHECKPOINT_AXI_REGION`, `CHECKPOINT_AXI_CLIENT_ID` and `CHECKPOINT_AXI_CLIENT_SECRET` together; optional `CHECKPOINT_AXI_SAAS` and `CHECKPOINT_AXI_SCOPE` cannot stand alone.
|
|
107
|
-
File-selected metadata never mixes with env-profile fields, though an explicit SecretRef can name an environment variable.
|
|
108
|
-
Environment profiles always disable writes and downloads.
|
|
109
|
-
`CHECKPOINT_AXI_READ_ONLY` accepts `1`/`true` or `0`/`false` case-insensitively; any other value fails closed.
|
|
110
|
-
`CHECKPOINT_AXI_WRITE_LOG` overrides the write journal, defaulting to `writes.log` in the platform state directory.
|
|
111
|
-
An empty override uses that default.
|
|
112
|
-
|
|
113
|
-
POSIX reads reject symlinks, foreign ownership, group/other-writable config and any group/other access to secret files.
|
|
114
|
-
Secret file content is UTF-8 with a leading BOM and trailing whitespace removed.
|
|
115
|
-
On Windows, regular files and reparse points are checked without interpreting mode bits; `auth status`, `doctor` and email, event, task and exception API commands also verify a protected DACL for the current user, SYSTEM and Administrators.
|
|
116
|
-
|
|
117
|
-
## Doctor and commissioning
|
|
118
|
-
|
|
119
|
-
`checkpoint-axi doctor --profile <name>` explicitly contacts the selected public regional gateway.
|
|
120
|
-
It authenticates and runs one page of email search over the past 24 hours for the selected SaaS.
|
|
121
|
-
It reports region, SaaS and pass/fail for auth and read, without email data or credentials; a failed check exits 1.
|
|
122
|
-
Home, the hook, command help and `auth status` remain offline.
|
|
123
|
-
The owner will commission authentication and all other slices together through Artium after the full build (Q4).
|
|
124
|
-
Only a pass/fail commissioning note enters this public repository, never tenant identifiers, raw responses, secrets or tokens.
|
|
125
|
-
No commissioning run has been performed by the automated tests.
|
|
126
|
-
|
|
127
|
-
The vendor guide does not document the token response shape or lifetime (page 8).
|
|
128
|
-
The provisional parser accepts one distinct nonempty printable ASCII token without whitespace from `token`, `access_token` or `accessToken` at the root or within `data` or `responseData`.
|
|
129
|
-
Unsupported, conflicting or invalid values fail with `AUTH_SHAPE_UNVERIFIED`, requiring owner commissioning rather than printing the response.
|
|
130
|
-
Token persistence and reauthentication rules are defined in [the transport design](docs/design.md#credentials-and-transport).
|
|
131
|
-
All requests carry a new request UUID; authenticated API calls carry Bearer authorization.
|
|
132
|
-
TLS certificate verification stays enabled and redirects are refused.
|
|
133
|
-
Read sessions allow at most 10 HTTP requests; write sessions allow at most 44.
|
|
134
|
-
Both are bounded by 8 MiB of JSON response bytes and 60 seconds, including auth, re-exchange, read retries and delays.
|
|
135
|
-
Download bodies have a separate 50 MiB cap per response within the same request/time budgets.
|
|
136
|
-
Reads retry HTTP 429 at most twice, honoring numeric or HTTP-date `Retry-After` within that budget.
|
|
137
|
-
Exception reads and writes share separate 1 request/second Anti-Phishing and 10 requests/second other-exception spacers.
|
|
138
|
-
|
|
139
|
-
## Email reads (C3)
|
|
140
|
-
|
|
141
|
-
`checkpoint-axi email search` reads compact ID, subject, action state and combined verdict rows (guide pages 18-27).
|
|
142
|
-
`checkpoint-axi email show <id>` returns the entity payload, security results, actions taken and available actions (guide pages 10-18).
|
|
143
|
-
Search defaults to the past 24 hours and 50 rows; `--start-date` and `--end-date` accept ISO timestamps with timezones, with a positive window of at most 31 days.
|
|
144
|
-
`--saas` overrides the selected profile and `--saas-entity` optionally selects the entity type.
|
|
145
|
-
`--filter` accepts a JSON array of the documented `saasAttrName`, `saasAttrOp` and `saasAttrValue` filters (guide pages 19-20).
|
|
146
|
-
For example, `--filter '[{"saasAttrName":"entityPayload.subject","saasAttrOp":"contains","saasAttrValue":"Synthetic"}]'` selects a subject substring.
|
|
147
|
-
Use `--limit <1-1000>` or `--all`, which stops at 1,000 rows, 10 HTTP requests, 60 seconds or 8 MiB, including authentication and retries.
|
|
148
|
-
Incomplete searches return `complete: false`; when an opaque `cursor` is present, repeat with `--cursor <cursor>` and the same original selectors to continue.
|
|
149
|
-
Cursors preserve the original window, bind profile/client identity, regional origin, operation and selectors, and retain an offset when a row limit splits a server page.
|
|
150
|
-
The API has no page-size parameter, so continuation within a page replays that page; results changed between calls may be skipped or repeated.
|
|
151
|
-
Searches that split a page and all their continuations report `complete: false` with `reason: replay-may-skip-or-repeat`, even after reaching the final page, when no cursor is returned.
|
|
152
|
-
Continuation at a whole-page boundary can report `complete: true` on reaching the final page if no earlier page was split.
|
|
153
|
-
Treat cursors as sensitive search state and do not edit them.
|
|
154
|
-
Cursor strings are never truncated; email text is redacted before 500-character previews, with `--full` for complete text.
|
|
155
|
-
See [downloads](#downloads-c11) for private file output.
|
|
156
|
-
|
|
157
|
-
## Event and task reads (C4)
|
|
158
|
-
|
|
159
|
-
`checkpoint-axi event list` returns compact ID, type, state and severity rows (guide pages 37-42).
|
|
160
|
-
`checkpoint-axi event show <id>` preserves event details, action history and available actions (guide pages 34-37).
|
|
161
|
-
`checkpoint-axi task show <id>` returns task status, progress and per-action details for asynchronous actions (guide pages 30-33).
|
|
162
|
-
Task states are `init`, `inprogress`, `completed`, `failed`, `stopped` and `paused`; task show performs one read without polling.
|
|
163
|
-
Event list accepts comma-separated `--event-types`, `--event-states`, `--severities`, `--event-ids` and `--saas`, plus `--confidence-indicator` and `--description` text selectors.
|
|
164
|
-
SaaS defaults to the selected profile's value or `office365_emails`; other event selectors default to unfiltered.
|
|
165
|
-
Event list uses the same date windows, row and transport budgets, bound continuation and honest page replay flags as [email search](#email-reads-c3).
|
|
166
|
-
Repeat all original event selectors with `--cursor`; the cursor preserves the original date window.
|
|
167
|
-
Event and task text is redacted before 500-character previews; use `--full` for full strings and `--fields` to select top-level fields.
|
|
168
|
-
For writes, see [event actions](#event-actions-c7).
|
|
169
|
-
These reads are verified offline with synthetic fixtures; authentication, token lifetime and live API behavior remain uncommissioned until the owner tests everything together through Artium.
|
|
170
|
-
|
|
171
|
-
## Exception reads (C5)
|
|
172
|
-
|
|
173
|
-
`checkpoint-axi exception list <kind>` and `exception show <kind> <id-or-value>` cover `phishing-allow`, `phishing-block`, `spam-allow`, `anomaly`, `click-time`, `malware`, `url` and `dlp` (guide pages 49-123).
|
|
174
|
-
Legacy whitelist/blacklist reads use the same routes as phishing-allow/phishing-block, without duplicate commands (pages 49-60).
|
|
175
|
-
Phishing and Spam lists return compact ID, sender, subject and comment fields; show preserves the full record and verifies the returned entity ID (pages 56-60, 70-74).
|
|
176
|
-
Click-time defaults to list routes; add `--items` to list or show for item routes (pages 87-91).
|
|
177
|
-
Malware, URL and DLP require `--type` on both commands:
|
|
178
|
-
|
|
179
|
-
| Kind | Types | Guide pages |
|
|
180
|
-
|---|---|---|
|
|
181
|
-
| malware | `hash`, `micro_hash`, `file_type`, `ppat_sender_name`, `allow_file_type`, `sender_email` | 100-102 |
|
|
182
|
-
| url | `allow-url`, `allow-domain`, `block-url`, `block-domain` | 110-112 |
|
|
183
|
-
| dlp | `hash`, `text_content`, `sender_email`, `recipient_email` | 120-123 |
|
|
184
|
-
|
|
185
|
-
For example, `checkpoint-axi exception show url 'https://example.com/path' --type allow-url` encodes the supplied value as one path segment.
|
|
186
|
-
Anomaly has only a documented list GET, with no detail endpoint or response identity schema (pages 83-84).
|
|
187
|
-
`exception show anomaly <id>` therefore refuses with `ENDPOINT_UNVERIFIED` before authentication until owner commissioning settles the contract.
|
|
188
|
-
The guide also publishes no response schemas for click-time, malware, URL or DLP reads.
|
|
189
|
-
These families and anomaly list preserve JSON values, marked `responseSchema: unverified`, without inventing identity fields or claiming live compatibility.
|
|
190
|
-
Unknown-shape detail results are arrays of returned JSON values; documented Phishing/Spam details return one validated object.
|
|
191
|
-
Live commissioning of these contracts happens later with all slices together through Artium.
|
|
192
|
-
|
|
193
|
-
Lists default to 50 rows, accept `--limit <1-1000>` or `--all` capped at 1000 rows, and share the 10-request, 8 MiB and 60-second transport budgets.
|
|
194
|
-
No paging request parameter is documented for these GET routes, so each command reads one response without guessing a scroll query.
|
|
195
|
-
Truncation, nonempty scroll metadata or a larger advertised total returns `complete: false` and an explanation; there is no exception continuation cursor.
|
|
196
|
-
Anti-Phishing list/detail requests share a 1 request/second spacer; all other exception routes share a 10 requests/second spacer within each invocation, including retries and reauthentication replays.
|
|
197
|
-
Text is redacted before 500-character previews; `--full` restores complete strings, and `--fields` selects top-level output fields.
|
|
198
|
-
|
|
199
|
-
## Email writes (C6)
|
|
200
|
-
|
|
201
|
-
`checkpoint-axi email quarantine --ids <id1>,<id2>` and `email restore --ids <id1>,<id2>` preview asynchronous email actions (guide pages 28-30).
|
|
202
|
-
The selected file profile must opt in with `writes: { "allowWrites": true, "operations": ["email.quarantine", "email.restore"] }`, listing only the exact operations it needs.
|
|
203
|
-
Wildcards never grant scope, environment-only profiles cannot write, and `CHECKPOINT_AXI_READ_ONLY` always wins.
|
|
204
|
-
These gates apply to previews too.
|
|
205
|
-
Supply 1-20 unique entity IDs, comma-separated without spaces.
|
|
206
|
-
Previews read each entity, verify its identity and email type, check the available action and show current state.
|
|
207
|
-
An explicit `--dry-run` also previews and cannot combine with `--execute`.
|
|
208
|
-
|
|
209
|
-
Every action is disruptive.
|
|
210
|
-
Sending an action requires `--execute` plus exact confirmation containing the operation, a space and the comma-separated supplied IDs in order:
|
|
29
|
+
A fresh home view includes `status: not configured` and `count: 0`.
|
|
30
|
+
For a read-only environment profile, supply `CHECKPOINT_AXI_CLIENT_SECRET` through your secret manager or private environment before running:
|
|
211
31
|
|
|
212
32
|
```sh
|
|
213
|
-
|
|
33
|
+
export CHECKPOINT_AXI_REGION=eu
|
|
34
|
+
export CHECKPOINT_AXI_CLIENT_ID=synthetic-client
|
|
35
|
+
checkpoint-axi auth status
|
|
36
|
+
checkpoint-axi doctor
|
|
37
|
+
checkpoint-axi email search --limit 5
|
|
214
38
|
```
|
|
215
39
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
Previews and initial no-ops create no journal.
|
|
222
|
-
The [write safety design](docs/design.md#read-write-and-download-safety) defines journal privacy, durability and file requirements.
|
|
223
|
-
An intent-recording failure returns `INTENT_NOT_RECORDED` before sending.
|
|
224
|
-
An outcome-recording failure returns `OUTCOME_NOT_RECORDED` and requires reconciliation.
|
|
225
|
-
|
|
226
|
-
Successful submission returns `outcome: accepted`, `auditId` and per-entity `tasks` containing `entityId`, `taskId` and `outcome: accepted`.
|
|
227
|
-
Use `checkpoint-axi task show <taskId>` to inspect execution; submission does not establish that an email was changed.
|
|
228
|
-
Action requests never retry, including on 401 or 429, and never follow redirects.
|
|
229
|
-
A disconnected, invalid, incomplete or otherwise unsuccessful acknowledgement returns `OUTCOME_UNKNOWN` with its audit ID.
|
|
230
|
-
Read back every target and reconcile the journal before any further action; never replay automatically.
|
|
231
|
-
Write preflights, authentication and the action share the [transport limits](#doctor-and-commissioning); read retries also consume that budget.
|
|
232
|
-
All C6 verification is offline and synthetic; live action behavior, auth shape and token lifetime remain unverified until owner commissioning through Artium.
|
|
233
|
-
|
|
234
|
-
## Anti-Phishing and Spam writes (C8)
|
|
235
|
-
|
|
236
|
-
`exception create <kind>`, `exception update <kind> <id>` and `exception remove <kind> <id>` support `phishing-allow`, `phishing-block` and `spam-allow` (guide pages 61-69, 75-83).
|
|
237
|
-
Every command uses the C6 coordinator, including previews: the selected file profile needs `writes.allowWrites: true` and the exact operation `exception.<kind>.<create|update|remove>`.
|
|
238
|
-
`CHECKPOINT_AXI_READ_ONLY` always wins.
|
|
239
|
-
Each invocation targets one rule; update/remove require its exception ID.
|
|
240
|
-
Create/update require `--input /absolute/rule.json`, a private regular JSON file (POSIX mode 0600; Windows protected DACL) containing the documented `requestData` fields directly, without an envelope:
|
|
241
|
-
|
|
242
|
-
```json
|
|
243
|
-
{
|
|
244
|
-
"senderEmail": "sender@example.com",
|
|
245
|
-
"senderEmailMatching": "contains",
|
|
246
|
-
"subject": "Synthetic exception",
|
|
247
|
-
"subjectMatching": "contains",
|
|
248
|
-
"comment": "Synthetic rule",
|
|
249
|
-
"ignoringSpfCheck": false
|
|
250
|
-
}
|
|
251
|
-
```
|
|
40
|
+
Replace the synthetic client ID with your API client ID.
|
|
41
|
+
`auth status` checks credentials locally; `doctor` authenticates and reads one search page without printing email data.
|
|
42
|
+
Use [file profiles](docs/configuration.md) for named credentials and write/download permissions.
|
|
43
|
+
|
|
44
|
+
## Use with your agent
|
|
252
45
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
46
|
+
`checkpoint-axi-hook` is the session entry point: configure your agent's session-start hook to run it on explicit request.
|
|
47
|
+
It emits local home context, grants no permissions and makes no API calls.
|
|
48
|
+
There is no automatic hook installer or `setup hooks` command.
|
|
49
|
+
To remove it, delete the hook entry you added in your agent configuration.
|
|
50
|
+
|
|
51
|
+
For on-demand discovery, install the skill:
|
|
259
52
|
|
|
260
53
|
```sh
|
|
261
|
-
|
|
262
|
-
checkpoint-axi exception update spam-allow synthetic-exception-1 --input /absolute/rule.json
|
|
263
|
-
checkpoint-axi exception remove phishing-block synthetic-exception-1
|
|
54
|
+
npx skills add knowttl/checkpoint-axi --skill checkpoint-axi
|
|
264
55
|
```
|
|
265
56
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
Update/remove validate one matching detail response or an empty result; an absent update returns `NOT_FOUND`.
|
|
271
|
-
Identical creates/replacements and absent removals detected on the initial read are no-ops without confirmation, a journal or a send.
|
|
272
|
-
If the final read detects a no-op, the command returns `outcome: noop` with `auditId` and records `NOT_SENT` in the journal.
|
|
273
|
-
After exact confirmation, durable redacted intent precedes a final state read, profile check and single send.
|
|
274
|
-
The journal contains operation/target metadata, never the JSON payload.
|
|
275
|
-
Preflight reads and the mutation share the exception rate spacer and the write transport budgets.
|
|
276
|
-
|
|
277
|
-
Successful envelopes return `outcome: accepted` and `auditId`; these exception endpoints provide no task ID or created ID.
|
|
278
|
-
Use `exception list <kind>` after create or `exception show <kind> <id>` after update/remove to reconcile.
|
|
279
|
-
The remove acknowledgement also accepts the guide's envelope code 204.
|
|
280
|
-
HTTP errors, redirects, disconnections and invalid acknowledgements become `OUTCOME_UNKNOWN`, without retries or token re-exchange.
|
|
281
|
-
Reconcile before any further action and never replay automatically.
|
|
282
|
-
All C8 verification uses offline synthetic fixtures; live exception behavior, auth shape and token lifetime remain unverified until owner commissioning through Artium.
|
|
283
|
-
|
|
284
|
-
## Anomaly and click-time writes (C9)
|
|
285
|
-
|
|
286
|
-
`exception create anomaly`, `exception remove anomaly <rule-id>`, `exception create click-time`, `exception update click-time <item-id>`, `exception remove click-time <item-id>` and `exception remove-items click-time --ids <id1>,<id2>` implement the documented requests on guide pages 84-99.
|
|
287
|
-
Every operation uses the C6 coordinator and requires configured writes.allowWrites, exact operation scope `exception.<kind>.<action>` and no forced read-only override, including for previews.
|
|
288
|
-
Create and update read a private absolute `--input` JSON file containing the requestData fields directly, without an envelope.
|
|
289
|
-
Anomaly create accepts `addedBy` and `requestJson` with `whitelist-option:new_country`, `apply-to-past` (`Yes` or `No`), `anomaly-comment` and `event_id`:
|
|
290
|
-
|
|
291
|
-
```json
|
|
292
|
-
{
|
|
293
|
-
"addedBy": "",
|
|
294
|
-
"requestJson": {
|
|
295
|
-
"whitelist-option:new_country": "synthetic-country-1",
|
|
296
|
-
"apply-to-past": "Yes",
|
|
297
|
-
"anomaly-comment": "Synthetic rule",
|
|
298
|
-
"event_id": "synthetic-event-1"
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
```
|
|
57
|
+
The skill supplies static guidance and the full command table; it grants no credentials or write permission.
|
|
58
|
+
Use the hook, the skill or both; neither is required for ordinary CLI use.
|
|
59
|
+
Start investigations with the compact [agent guide](docs/agent-guide.md), linked from [SKILL.md](skills/checkpoint-axi/SKILL.md).
|
|
60
|
+
Use the [command reference](docs/commands.md) for the full catalogue.
|
|
302
61
|
|
|
303
|
-
|
|
62
|
+
## What it covers
|
|
304
63
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
64
|
+
<!-- command-registry:start -->
|
|
65
|
+
| Group | Purpose | Access | Reference |
|
|
66
|
+
|---|---|---|---|
|
|
67
|
+
| attachment | Save hash-verified attachments or ZIPs to new private files | Read / local file write | [Guide](docs/downloads.md) |
|
|
68
|
+
| auth | Validate local credential readiness without API calls | Local read | [Guide](docs/configuration.md) |
|
|
69
|
+
| config | Show effective configuration and state paths | Local read | [Guide](docs/configuration.md) |
|
|
70
|
+
| doctor | Verify authentication and one bounded search | API read | [Guide](docs/reads.md#doctor-and-transport) |
|
|
71
|
+
| email | Search, inspect and download emails; preview or request quarantine/restore | Read / gated write / local file write | [Guide](docs/reads.md#email-reads) |
|
|
72
|
+
| event | Inspect events and request available name-only actions | Read / gated write | [Guide](docs/writes.md#event-actions) |
|
|
73
|
+
| exception | Inspect eight kinds; preview or request supported rule changes | Read / gated write | [Guide](docs/writes.md) |
|
|
74
|
+
| home | Show local profile context without resolving secrets | Local read | [Guide](docs/configuration.md) |
|
|
75
|
+
| profile | List named file profiles | Local read | [Guide](docs/configuration.md) |
|
|
76
|
+
| task | Inspect asynchronous action status without polling | Read | [Guide](docs/reads.md#event-and-task-reads) |
|
|
77
|
+
|
|
78
|
+
Email search --filter accepts a JSON array of {saasAttrName, saasAttrOp, saasAttrValue}.
|
|
79
|
+
saasAttrName is a field path, not a closed enum (guide pages 19-20).
|
|
80
|
+
Documented examples: entityPayload.subject, entityPayload.fromEmail, entityPayload.attachmentCount.
|
|
81
|
+
Other documented email payload paths (pages 15-16, 24-25): entityPayload.internetMessageId, entityPayload.received, entityPayload.size, entityPayload.emailLinks, entityPayload.attachments, entityPayload.mode, entityPayload.recipients, entityPayload.fromDomain, entityPayload.fromUser, entityPayload.fromName, entityPayload.to, entityPayload.toUser, entityPayload.cc, entityPayload.ccUser, entityPayload.bcc, entityPayload.bccUser, entityPayload.replyToEmail, entityPayload.replyToNickname, entityPayload.isRead, entityPayload.isDeleted, entityPayload.isIncoming, entityPayload.isInternal, entityPayload.isOutgoing, entityPayload.isQuarantined, entityPayload.isQuarantineNotification, entityPayload.isRestored, entityPayload.isRestoreRequested, entityPayload.isRestoreDeclined, entityPayload.saasSpamVerdict, entityPayload.SpfResult.
|
|
82
|
+
saasAttrOp: is, contains, startsWith, isEmpty, isNot, notContains, isNotEmpty, greaterThan, lessThan.
|
|
83
|
+
The guide defines operators globally, without a per-field compatibility matrix; examples pair fromEmail with is and attachmentCount with greaterThan.
|
|
84
|
+
saasAttrValue is a string.
|
|
85
|
+
<!-- command-registry:end -->
|
|
312
86
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
Click-time create and remove-items share POST items, distinguished by create fields or listItemIds; update sends PUT items/{item_id}, and remove sends a bodyless POST items/{item_id}.
|
|
317
|
-
Collection PUT items (pages 93-94) is deferred until commissioning; update requires one positional item ID.
|
|
318
|
-
|
|
319
|
-
The guide does not document response schemas for anomaly/click-time reads or acknowledgements.
|
|
320
|
-
C9 previews explicitly show targetState: unverified and do not infer existence, identity or no-op state from arbitrary JSON.
|
|
321
|
-
Execution requires `--execute` and the preview's exact `--confirm`, even if a target might already be absent or a rule already exists.
|
|
322
|
-
Create confirms the complete private payload SHA-256; other commands confirm every caller-supplied ID in order.
|
|
323
|
-
Durable redacted intent and final configuration/scope checks precede one send; requests never retry or reauthenticate after a mutation response.
|
|
324
|
-
The journal holds metadata only, never input or response bodies.
|
|
325
|
-
Successful HTTP status and any supplied successful response envelope return outcome: accepted, auditId, responseSchema: unverified and the bounded raw JSON response, redacted before the usual 500-character string previews.
|
|
326
|
-
Never repeat a mutation to retrieve truncated strings; use read-only list or item commands to reconcile.
|
|
327
|
-
An empty HTTP 204 is represented as response: null.
|
|
328
|
-
No created ID, task ID or count is derived; reconcile using list or item reads, whose response identities also remain unverified.
|
|
329
|
-
|
|
330
|
-
`exception clear click-time` refuses ENDPOINT_UNVERIFIED before authentication, including previews: the required freshly read count cannot be trusted from an undocumented list shape (pages 87-88, 96-97).
|
|
331
|
-
Clear, collection PUT, response identities, existence/no-op detection and acknowledgement shapes remain live-commissioning follow-ups through Artium.
|
|
332
|
-
All tests are offline and synthetic; no live behavior or token lifetime has been commissioned.
|
|
333
|
-
|
|
334
|
-
## Malware, URL and DLP writes (C10)
|
|
335
|
-
|
|
336
|
-
`exception create <malware|url|dlp> --input /absolute/rule.json` sends POST to the family route; add `--specific` to use its documented `/exceptions` create-specific route (guide pages 102-105, 113-116, 123-126).
|
|
337
|
-
`exception update <malware|url|dlp> --input /absolute/rule.json` sends PUT to the family route (pages 105-107, 116-117, 126-127).
|
|
338
|
-
Updates take no positional ID: `exception_type` and `exception_str` in the body identify the target.
|
|
339
|
-
Families map to `checkpoint2`, `avanan_url` and `avanan_dlp` under `/sectool-exceptions/`.
|
|
340
|
-
The private input file contains requestData fields directly, without an envelope.
|
|
341
|
-
Create requires `exception_type`, `exception_str`, `comment`, `entity_type`, `entity_id`, `file_name`, `created_by_email` and boolean `is_exclusive`.
|
|
342
|
-
Malware create additionally requires `exception_payload` with a nonempty string `condition`, for example `{ "condition": "with_link" }`.
|
|
343
|
-
Update requires only `exception_type`, `exception_str`, `comment` and `exception_payload` with a nonempty string `condition`.
|
|
344
|
-
Types are the same family-specific values listed in [exception reads](#exception-reads-c5); type, value and entity selectors must be nonempty.
|
|
345
|
-
Unknown fields are rejected, including nested payload fields.
|
|
346
|
-
These provisional input contracts follow the guide's request bodies: it publishes no parameter tables defining optionality or additional payload fields.
|
|
347
|
-
|
|
348
|
-
```json
|
|
349
|
-
{
|
|
350
|
-
"exception_type": "allow-url",
|
|
351
|
-
"exception_str": "https://example.com/path",
|
|
352
|
-
"comment": "Synthetic rule",
|
|
353
|
-
"entity_type": "user",
|
|
354
|
-
"entity_id": "synthetic-user-1",
|
|
355
|
-
"file_name": "synthetic.json",
|
|
356
|
-
"created_by_email": "sender@example.com",
|
|
357
|
-
"is_exclusive": true
|
|
358
|
-
}
|
|
359
|
-
```
|
|
87
|
+
The command catalogue generates this overview and the full references.
|
|
88
|
+
Run `checkpoint-axi <command> --help` for the selected command's flags.
|
|
89
|
+
The [coverage ledger](docs/design.md#api-coverage-ledger) records documented routes and refused operations; it never enables execution.
|
|
360
90
|
|
|
361
|
-
|
|
362
|
-
Commands preview by default; execution requires `--execute` and the exact preview confirmation.
|
|
363
|
-
Both create and update confirmations bind the complete normalized payload and create-specific route choice by SHA-256, so changing either requires a new confirmation.
|
|
364
|
-
The guide provides no response schemas for existence or no-op checks, so C10 follows C9: previews mark target state unverified, and initial/final state callbacks retain uncertainty without inferring identity or no-op state.
|
|
365
|
-
Durable redacted intent and final scope/configuration checks precede one send; the journal contains metadata only.
|
|
366
|
-
Requests never retry or reauthenticate after a mutation response.
|
|
367
|
-
Successful HTTP status with valid JSON (or empty HTTP 204) and any supplied successful response envelope returns `accepted`, `auditId`, `responseSchema: unverified` and the bounded redacted response.
|
|
368
|
-
No created ID or task ID is inferred; reconcile with `exception list <kind> --type <type>`.
|
|
369
|
-
Ambiguous acknowledgements return `OUTCOME_UNKNOWN`; never replay automatically.
|
|
370
|
-
|
|
371
|
-
All six `exception remove <malware|url|dlp> <value>` and `exception clear <malware|url|dlp>` commands refuse `ENDPOINT_UNVERIFIED` before configuration, credentials, authentication or journaling, including previews.
|
|
372
|
-
The guide documents them as identical to create requests (pages 102 vs 107, 104 vs 108, 113 vs 117, 114 vs 119, 123 vs 128, 124 vs 129).
|
|
373
|
-
No guessed delete request can be sent through the transport.
|
|
374
|
-
Delete contracts, response identities, input optionality, existence/no-op detection, acknowledgement shapes, auth and token lifetime remain unverified until the owner commissions everything together through Artium.
|
|
375
|
-
All automated verification is offline with synthetic requests and arbitrary provisional acknowledgements.
|
|
376
|
-
|
|
377
|
-
## Downloads (C11)
|
|
378
|
-
|
|
379
|
-
Enable `downloads.allow: true` in a file profile before using `email download <entity-id>`, `attachment download <entity-id> <attachment-id>` or `attachment download-all <entity-id>` (guide pages 131-137).
|
|
380
|
-
Every command requires an absolute `--out` path to a new file in an existing directory.
|
|
381
|
-
Existing files and symlinks are refused before authentication; filenames from response headers are ignored.
|
|
382
|
-
The file is created exclusively with mode 0600 on POSIX or a protected DACL on Windows before any content is written.
|
|
383
|
-
Binary content is buffered up to 50 MiB per response, verified against the required `x-av-sha256` header, then written and synced; failed downloads remove their new output file.
|
|
384
|
-
No binary content, server filename, headers or response body enters stdout; success prints only `path`, `size` and `sha256`.
|
|
385
|
-
Downloads permit one token re-exchange after 401 and two 429 retries respecting Retry-After, within 10 total requests and 60 seconds including authentication.
|
|
386
|
-
TLS verification and the fixed regional gateway restriction apply throughout; redirects are refused.
|
|
91
|
+
## Safety
|
|
387
92
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
93
|
+
Read-only by default: file profiles must explicitly enable `writes.allowWrites` and each exact operation.
|
|
94
|
+
Previews also require these permissions; no wildcard or environment-only profile grants writes.
|
|
95
|
+
Execution requires `--execute` and the preview's exact `--confirm`, with durable redacted intent before one send.
|
|
96
|
+
`CHECKPOINT_AXI_READ_ONLY=1` overrides write permission; invalid values fail closed.
|
|
97
|
+
There is no `CHECKPOINT_AXI_ALLOW_*` environment gate.
|
|
98
|
+
Ambiguous outcomes are never retried; reconcile using reads before requesting another action.
|
|
99
|
+
Downloads separately require file-profile `downloads.allow`, a new private output file and verified SHA-256.
|
|
100
|
+
Secrets use environment/file SecretRefs, never inline config values or argv; tokens stay in memory.
|
|
101
|
+
Only seven fixed public regional gateways are allowed, with verified TLS and no redirects.
|
|
102
|
+
See [write gates and reconciliation](docs/writes.md), [download safety](docs/downloads.md) and [profile permissions](docs/configuration.md#write-and-download-permissions).
|
|
394
103
|
|
|
395
|
-
|
|
396
|
-
`--original` selects the unmodified email; default false includes the service's processing headers.
|
|
397
|
-
Attachment commands use optional `--scope` as a query selector, defaulting to profile `scope` when configured; no scope query is sent when both are absent.
|
|
398
|
-
Scope authorization and the relationship between the email `scopes` header and attachment `scope` query remain unverified until owner commissioning through Artium.
|
|
399
|
-
The guide specifies `x-av-sha256` for individual attachments (page 134) but omits it for email and ZIP responses (pages 132, 136).
|
|
400
|
-
All three commands enforce the approved hash requirement: a missing or malformed header returns `DOWNLOAD_HASH_INVALID`, and a mismatch returns `DOWNLOAD_HASH_MISMATCH`, with output removed.
|
|
401
|
-
Email/ZIP hash availability therefore remains unverified and may require a commissioning follow-up before those downloads can succeed live.
|
|
402
|
-
An attachment ZIP may contain only the attachments the service could retrieve even on HTTP 200 (page 136); a successful download does not prove attachment completeness.
|
|
403
|
-
Archives are saved as received, never extracted automatically.
|
|
404
|
-
Environment profiles cannot enable downloads; remote mutation scope and write confirmation remain separate from this download opt-in.
|
|
405
|
-
All live-only facts, including token shape/lifetime, delete requests and download scopes, remain unverified; automated tests use only synthetic offline data.
|
|
104
|
+
## Configuration
|
|
406
105
|
|
|
407
|
-
|
|
106
|
+
No command writes configuration or discovers it from the current directory.
|
|
107
|
+
Use `checkpoint-axi config path` to print the effective paths.
|
|
408
108
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
109
|
+
| Platform | Default config | Default state directory |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| Linux/macOS | `~/.config/checkpoint-axi/config.json` | `~/.local/state/checkpoint-axi` |
|
|
112
|
+
| Windows | `%APPDATA%\checkpoint-axi\config.json` | `%LOCALAPPDATA%\checkpoint-axi` |
|
|
412
113
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
114
|
+
Config precedence: `--config`, `CHECKPOINT_AXI_CONFIG`, platform path.
|
|
115
|
+
Profile precedence: `--profile`, `CHECKPOINT_AXI_PROFILE`, complete environment profile, config default, sole file profile.
|
|
116
|
+
File metadata never mixes with environment-profile fields; SecretRefs may explicitly name environment variables.
|
|
416
117
|
|
|
417
|
-
|
|
418
|
-
|
|
118
|
+
| Environment variable | Purpose | Default |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `CHECKPOINT_AXI_CONFIG` | Config file override | Platform path |
|
|
121
|
+
| `CHECKPOINT_AXI_PROFILE` | Named file profile | Selection order above |
|
|
122
|
+
| `CHECKPOINT_AXI_REGION` | Environment-profile region | Required with client ID/secret |
|
|
123
|
+
| `CHECKPOINT_AXI_CLIENT_ID` | Environment-profile client ID | Required with region/secret |
|
|
124
|
+
| `CHECKPOINT_AXI_CLIENT_SECRET` | Environment secret source | Default SecretRef; required for env profile |
|
|
125
|
+
| `CHECKPOINT_AXI_SAAS` | Environment-profile SaaS application name, not a URL; see [SaaS and scope](docs/configuration.md#saas-and-scope) for selection and format | `office365_emails` (Microsoft 365 email) |
|
|
126
|
+
| `CHECKPOINT_AXI_SCOPE` | Environment-profile download scope; see [SaaS and scope](docs/configuration.md#saas-and-scope) for values and [download requirements](docs/downloads.md) for usage and permission limits | Unset |
|
|
127
|
+
| `CHECKPOINT_AXI_READ_ONLY` | Force read-only: `1`/`true`; `0`/`false` releases override | Unset |
|
|
128
|
+
| `CHECKPOINT_AXI_WRITE_LOG` | Write journal path | State directory's `writes.log`; blank uses default |
|
|
129
|
+
| `XDG_CONFIG_HOME` | Absolute config base on Linux/macOS | `~/.config` |
|
|
130
|
+
| `XDG_STATE_HOME` | Absolute state base on Linux/macOS | `~/.local/state` |
|
|
131
|
+
| `APPDATA` | Absolute Windows config base | `~/AppData/Roaming` |
|
|
132
|
+
| `LOCALAPPDATA` | Absolute Windows state base | `~/AppData/Local` |
|
|
133
|
+
|
|
134
|
+
Windows ignores XDG variables; relative base-directory overrides use platform defaults.
|
|
135
|
+
SecretRefs may name additional environment variables.
|
|
136
|
+
See [configuration](docs/configuration.md) for JSON, file protection, supported regions and scope handling, and the [credential schema](axi-credential.schema.json).
|
|
137
|
+
|
|
138
|
+
## Output and exit codes
|
|
139
|
+
|
|
140
|
+
Output, including structured errors and next-step hints, is TOON.
|
|
141
|
+
Secret-derived strings are redacted before 500-character previews; `--full` restores complete strings and `--fields` selects top-level output fields where supported.
|
|
142
|
+
Never replay a mutation to recover truncated output.
|
|
143
|
+
Searches default to 50 rows over 24 hours; `--all` caps rows at 1000 within transport budgets.
|
|
144
|
+
Inspect `complete`, `reason` and `cursor`; see [read continuation](docs/reads.md#email-reads) for page replay limitations.
|
|
145
|
+
Bare `--version`, `-v` or `-V` prints the package version.
|
|
146
|
+
|
|
147
|
+
| Exit | Meaning |
|
|
148
|
+
|---|---|
|
|
149
|
+
| 0 | Success, preview or no-op |
|
|
150
|
+
| 1 | Configuration, authentication, transport or operation failure |
|
|
151
|
+
| 2 | Invalid command syntax or flags (`VALIDATION_ERROR`) |
|
|
419
152
|
|
|
420
|
-
##
|
|
153
|
+
## Troubleshooting
|
|
421
154
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
```
|
|
155
|
+
| Code | Next action |
|
|
156
|
+
|---|---|
|
|
157
|
+
| `PROFILE_REQUIRED` | Configure a complete environment profile or a named file profile. |
|
|
158
|
+
| `CONFIG_INSECURE` | Apply the [private-file permissions](docs/configuration.md) for your platform. |
|
|
159
|
+
| `AUTH_SHAPE_UNVERIFIED` | Verify the undocumented token contract manually; never paste the response into chat. |
|
|
160
|
+
| `ENDPOINT_UNVERIFIED` | Read the [operation limitations](docs/writes.md); the CLI refuses to guess. |
|
|
161
|
+
| `OUTCOME_UNKNOWN` | Reconcile with read commands and the journal; never replay automatically. |
|
|
430
162
|
|
|
431
|
-
|
|
432
|
-
The affected-test selector includes the fixed safety baseline and runs the full suite for shared infrastructure changes.
|
|
433
|
-
To regenerate catalogue docs or the capability inventory:
|
|
163
|
+
## Contributing
|
|
434
164
|
|
|
435
|
-
|
|
436
|
-
corepack pnpm run build
|
|
437
|
-
corepack pnpm run docs:generate
|
|
438
|
-
corepack pnpm run spec:generate
|
|
439
|
-
```
|
|
165
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for offline development checks and release mechanics, and [AGENTS.md](AGENTS.md) for repository boundaries.
|
|
440
166
|
|
|
441
|
-
|
|
442
|
-
The PDF is not redistributed because its redistribution permission has not been established.
|
|
443
|
-
The default check is offline and checks the ledger against generated metadata; it cannot recheck absent PDF bytes.
|
|
444
|
-
After downloading a copy outside git, verify its bytes explicitly:
|
|
167
|
+
## Security
|
|
445
168
|
|
|
446
|
-
|
|
447
|
-
node scripts/specs.mjs --check --pdf /absolute/path/to/guide.pdf
|
|
448
|
-
```
|
|
169
|
+
Report vulnerabilities using [SECURITY.md](SECURITY.md).
|
|
449
170
|
|
|
450
|
-
##
|
|
171
|
+
## License
|
|
451
172
|
|
|
452
|
-
|
|
453
|
-
The package and release manifest start at `0.0.0`; release-please explicitly targets `0.1.0` for the next release PR.
|
|
454
|
-
Release publication runs build, lint, offline tests and metadata checks, then publishes the verified tarball with npm OIDC trusted publishing and provenance.
|
|
455
|
-
The placeholder `0.0.0` package and trusted publisher are configured.
|
|
456
|
-
After that release, remove the one-time `release-as` override before preparing a later version.
|
|
457
|
-
No npm publishing token is used.
|
|
458
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for testing and public-repository rules.
|
|
173
|
+
[MIT](LICENSE).
|