@knowttl/artium-axi 0.0.25 → 0.0.27
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 +2 -1
- package/bin/artium-axi.mjs +166 -53
- package/package.json +1 -1
- package/skill/artium-axi/SKILL.md +4 -1
package/README.md
CHANGED
|
@@ -133,7 +133,7 @@ Tool output limits vary; `--full` restores supported text within byte/time budge
|
|
|
133
133
|
| Artium exit | Meaning |
|
|
134
134
|
| --- | --- |
|
|
135
135
|
| 0 | Success |
|
|
136
|
-
| 1 | Authentication, server or
|
|
136
|
+
| 1 | Authentication, server, transport or local CLI failure |
|
|
137
137
|
| 2 | Usage or configuration error |
|
|
138
138
|
|
|
139
139
|
See [output behavior](docs/client-reference.md#toon-output-behavior) and the generated [error catalogue](docs/errors.md).
|
|
@@ -142,6 +142,7 @@ See [output behavior](docs/client-reference.md#toon-output-behavior) and the gen
|
|
|
142
142
|
|
|
143
143
|
| Symptom | Next step |
|
|
144
144
|
| --- | --- |
|
|
145
|
+
| A tool call failed | Follow the tool's help and keep the stderr `request_id` for an administrator; see [troubleshooting a failed tool call](docs/runbook.md#troubleshoot-a-failed-tool-call). |
|
|
145
146
|
| `CLIENT_CONFIG_INVALID` | Set the HTTPS URL and a readable CA file if needed, then sign in. |
|
|
146
147
|
| `PASSWORD_CHANGE_REQUIRED` | Run `artium-axi passwd`, then sign in again. |
|
|
147
148
|
| `CLI_OUTDATED` | Follow [installation-specific update guidance](docs/client-reference.md#verified-client). |
|
package/bin/artium-axi.mjs
CHANGED
|
@@ -6,7 +6,6 @@ var __export = (target, all) => {
|
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
// src/cli/main.ts
|
|
9
|
-
import { randomUUID as randomUUID5 } from "node:crypto";
|
|
10
9
|
import { homedir as homedir3 } from "node:os";
|
|
11
10
|
import { resolve as resolve4, relative, sep, isAbsolute as isAbsolute2 } from "node:path";
|
|
12
11
|
|
|
@@ -19740,6 +19739,7 @@ var definitions = {
|
|
|
19740
19739
|
UPSTREAM_AUTH_FAILED: { status: 503, message: "The upstream service rejected the credential.", next: "Ask an administrator to check the provider code, identity, secret expiry and permissions, then test again." },
|
|
19741
19740
|
UPSTREAM_NETWORK_FAILED: { status: 503, message: "The upstream service could not be reached.", next: "Ask an administrator to check DNS, routing, firewall rules and the diagnostic host and stage." },
|
|
19742
19741
|
UPSTREAM_TLS_FAILED: { status: 503, message: "The upstream certificate could not be verified.", next: "Ask an administrator to check the host, certificate chain and trusted CA configuration." },
|
|
19742
|
+
UPSTREAM_RESPONSE_INVALID: { status: 503, message: "The upstream service returned a response the tool could not accept.", next: "Ask an administrator to inspect the diagnostic message and hint, check the service endpoint and API compatibility, then test again." },
|
|
19743
19743
|
TOOL_REJECTED_INPUT: { status: 503, message: "The tool rejected its configuration or arguments.", next: "Ask an administrator to correct the field or combination named by the tool and test again." },
|
|
19744
19744
|
TOOL_FAILED: { status: 503, message: "The tool exited unsuccessfully.", next: "Ask an administrator to inspect the diagnostic message and hint from Test credential." },
|
|
19745
19745
|
INVALID_INPUT: { status: 400, message: "The request input is invalid.", next: "Check the request fields and content type." },
|
|
@@ -21365,6 +21365,8 @@ var auditCursorSchema = external_exports.string().max(50).regex(/^\d{1,16}:\d{1,
|
|
|
21365
21365
|
return [ceiling, time3, id].every(Number.isSafeInteger) && ceiling > 0 && id > 0 && id <= ceiling && time3 <= 864e13;
|
|
21366
21366
|
});
|
|
21367
21367
|
var auditFiltersSchema = external_exports.strictObject({
|
|
21368
|
+
requestId: external_exports.string().min(1).max(100).optional(),
|
|
21369
|
+
failed: external_exports.enum(["0", "1"]).optional(),
|
|
21368
21370
|
user: external_exports.string().min(1).max(256).optional(),
|
|
21369
21371
|
tool: toolSchema.optional(),
|
|
21370
21372
|
event: external_exports.string().min(1).max(100).optional(),
|
|
@@ -21507,7 +21509,7 @@ var nativeSettingsSchemas = {
|
|
|
21507
21509
|
})
|
|
21508
21510
|
};
|
|
21509
21511
|
var diagnosticSchema = external_exports.strictObject({
|
|
21510
|
-
stage: external_exports.enum(["configuration", "token acquisition", "DNS", "TCP", "TLS", "authentication", "tool run"]),
|
|
21512
|
+
stage: external_exports.enum(["configuration", "token acquisition", "DNS", "TCP", "TLS", "authentication", "response", "tool run"]),
|
|
21511
21513
|
message: external_exports.string().max(4096),
|
|
21512
21514
|
toolCode: external_exports.string().max(80).optional(),
|
|
21513
21515
|
providerCode: external_exports.string().max(80).optional(),
|
|
@@ -22012,7 +22014,8 @@ var toolsResponseSchema = external_exports.strictObject({
|
|
|
22012
22014
|
name: toolSchema,
|
|
22013
22015
|
version: external_exports.string(),
|
|
22014
22016
|
readOnly: external_exports.boolean().default(true),
|
|
22015
|
-
status: external_exports.enum(["unconfigured", "unknown", "checking", "ok", "error", "disabled"])
|
|
22017
|
+
status: external_exports.enum(["unconfigured", "unknown", "checking", "ok", "error", "disabled"]),
|
|
22018
|
+
errorCode: healthSchema.shape.errorCode.optional()
|
|
22016
22019
|
}))
|
|
22017
22020
|
});
|
|
22018
22021
|
var inputFileSchema = external_exports.strictObject({
|
|
@@ -22068,7 +22071,7 @@ import { resolve } from "node:path";
|
|
|
22068
22071
|
// package.json
|
|
22069
22072
|
var package_default = {
|
|
22070
22073
|
name: "artium-axi",
|
|
22071
|
-
version: "0.0.
|
|
22074
|
+
version: "0.0.27",
|
|
22072
22075
|
private: true,
|
|
22073
22076
|
license: "MIT",
|
|
22074
22077
|
type: "module",
|
|
@@ -22321,7 +22324,9 @@ var Client = class {
|
|
|
22321
22324
|
return this.storedSessions;
|
|
22322
22325
|
}
|
|
22323
22326
|
certificateVerified = false;
|
|
22327
|
+
requestId;
|
|
22324
22328
|
async request(path, method, input2, token, bytes = false, headers = {}) {
|
|
22329
|
+
this.requestId = void 0;
|
|
22325
22330
|
this.certificateVerified = false;
|
|
22326
22331
|
let ca;
|
|
22327
22332
|
try {
|
|
@@ -22341,6 +22346,8 @@ var Client = class {
|
|
|
22341
22346
|
signal: AbortSignal.any([controller.signal, this.cancellation.signal]),
|
|
22342
22347
|
headers: { ...headers, "x-artium-cli-version": cliVersion, ...token ? { authorization: `Bearer ${token}` } : {}, ...body ? { "content-type": "application/json" } : {} }
|
|
22343
22348
|
}, (response) => {
|
|
22349
|
+
const requestId = response.headers["x-artium-request-id"];
|
|
22350
|
+
if (typeof requestId === "string" && /^[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/.test(requestId)) this.requestId = requestId;
|
|
22344
22351
|
if (response.statusCode >= 300 && response.statusCode < 400) {
|
|
22345
22352
|
response.destroy();
|
|
22346
22353
|
reject(new ArtiumError("INVALID_RESPONSE", "Authenticated redirects are refused."));
|
|
@@ -22556,13 +22563,13 @@ var falcon_axi_default = {
|
|
|
22556
22563
|
generatedBy: "scripts/falcon-inventory.mjs",
|
|
22557
22564
|
tool: "falcon-axi",
|
|
22558
22565
|
repository: "https://github.com/knowttl/falcon-axi.git",
|
|
22559
|
-
tag: "v0.8.
|
|
22560
|
-
commit: "
|
|
22561
|
-
version: "0.8.
|
|
22566
|
+
tag: "v0.8.3",
|
|
22567
|
+
commit: "6d5b5a70137b84407fa4b844f4d90009a90c6629",
|
|
22568
|
+
version: "0.8.3",
|
|
22562
22569
|
distribution: {
|
|
22563
|
-
filename: "falcon_axi-0.8.
|
|
22564
|
-
sha256: "
|
|
22565
|
-
provenance: "https://pypi.org/integrity/falcon-axi/0.8.
|
|
22570
|
+
filename: "falcon_axi-0.8.3-py3-none-any.whl",
|
|
22571
|
+
sha256: "37d04718728493cff0ec6547d8d6345bb32a576a33348526feddb602c9bdb5b1",
|
|
22572
|
+
provenance: "https://pypi.org/integrity/falcon-axi/0.8.3/falcon_axi-0.8.3-py3-none-any.whl/provenance"
|
|
22566
22573
|
},
|
|
22567
22574
|
skillSha256: "893c2ad3a474d76734117e4e46a91b19278f1fdeafaf1b69189be4a09da333b1",
|
|
22568
22575
|
parser: {
|
|
@@ -44060,8 +44067,8 @@ var hybrid_axi_default = {
|
|
|
44060
44067
|
var beyondtrust_axi_default = {
|
|
44061
44068
|
generatedBy: "scripts/beyondtrust-inventory.mjs",
|
|
44062
44069
|
tool: "beyondtrust-axi",
|
|
44063
|
-
version: "0.1.
|
|
44064
|
-
integrity: "sha512-
|
|
44070
|
+
version: "0.1.4",
|
|
44071
|
+
integrity: "sha512-A6vBEpopJdcgsBozBIrnCMD891Saa9gwKTD8mH7XdGoi8zasKspY3uhmaw4fNUoL3898oT0EcE3X6Eq8tOrJHw==",
|
|
44065
44072
|
parserEvidence: "Published catalogue and reviewed native parsers, write coordinator, delete gates and download contracts",
|
|
44066
44073
|
sources: [
|
|
44067
44074
|
{
|
|
@@ -44070,7 +44077,7 @@ var beyondtrust_axi_default = {
|
|
|
44070
44077
|
},
|
|
44071
44078
|
{
|
|
44072
44079
|
path: "dist/src/cli.js",
|
|
44073
|
-
sha256: "
|
|
44080
|
+
sha256: "78171b922ce7be6da474c9b82a998dc93505ce6e3841f4a1450d8e3677b4c910"
|
|
44074
44081
|
},
|
|
44075
44082
|
{
|
|
44076
44083
|
path: "dist/src/computer-writes.js",
|
|
@@ -44094,7 +44101,7 @@ var beyondtrust_axi_default = {
|
|
|
44094
44101
|
},
|
|
44095
44102
|
{
|
|
44096
44103
|
path: "dist/src/jit-writes.js",
|
|
44097
|
-
sha256: "
|
|
44104
|
+
sha256: "b9c6df9b9062ff9d8b3e6ae00dcc6a5147a75c30d6d5775b9e7b9e3092511a7a"
|
|
44098
44105
|
},
|
|
44099
44106
|
{
|
|
44100
44107
|
path: "dist/src/policy-writes.js",
|
|
@@ -44114,11 +44121,15 @@ var beyondtrust_axi_default = {
|
|
|
44114
44121
|
},
|
|
44115
44122
|
{
|
|
44116
44123
|
path: "dist/src/resource-reads.js",
|
|
44117
|
-
sha256: "
|
|
44124
|
+
sha256: "52e0d50b351fa8464182aed4bc96a0c1501e19c14634ee80a4e2e15ac1608c1a"
|
|
44125
|
+
},
|
|
44126
|
+
{
|
|
44127
|
+
path: "dist/src/response-diagnostics.js",
|
|
44128
|
+
sha256: "7acea5c3133ebf8ca5b54aa5122ef7996ff183482c384c086eb4efdf709d140d"
|
|
44118
44129
|
},
|
|
44119
44130
|
{
|
|
44120
44131
|
path: "dist/src/transport.js",
|
|
44121
|
-
sha256: "
|
|
44132
|
+
sha256: "89b35e4fcb2b9c25fb496fc7037d9e3123d3006737c64691eb17e597b8216806"
|
|
44122
44133
|
},
|
|
44123
44134
|
{
|
|
44124
44135
|
path: "dist/src/windows-download.js",
|
|
@@ -44141,11 +44152,15 @@ var beyondtrust_axi_default = {
|
|
|
44141
44152
|
],
|
|
44142
44153
|
properties: {
|
|
44143
44154
|
clientId: {
|
|
44155
|
+
title: "Client ID",
|
|
44156
|
+
description: "The PM Cloud API account client ID.",
|
|
44144
44157
|
type: "string",
|
|
44145
44158
|
minLength: 1,
|
|
44146
44159
|
pattern: "\\S"
|
|
44147
44160
|
},
|
|
44148
44161
|
clientSecret: {
|
|
44162
|
+
title: "Client secret",
|
|
44163
|
+
description: "An environment variable or absolute file SecretRef for the API account client secret; never an inline secret. Defaults to BEYONDTRUST_AXI_CLIENT_SECRET.",
|
|
44149
44164
|
$ref: "#/$defs/secretRef",
|
|
44150
44165
|
"x-secret": true,
|
|
44151
44166
|
default: {
|
|
@@ -44153,6 +44168,8 @@ var beyondtrust_axi_default = {
|
|
|
44153
44168
|
}
|
|
44154
44169
|
},
|
|
44155
44170
|
downloads: {
|
|
44171
|
+
title: "Download permissions",
|
|
44172
|
+
description: "Set allow to true to permit raw-byte downloads from a named file profile to a new private destination file. Downloads are disabled by default.",
|
|
44156
44173
|
type: "object",
|
|
44157
44174
|
additionalProperties: false,
|
|
44158
44175
|
required: [
|
|
@@ -44168,6 +44185,8 @@ var beyondtrust_axi_default = {
|
|
|
44168
44185
|
}
|
|
44169
44186
|
},
|
|
44170
44187
|
writes: {
|
|
44188
|
+
title: "Write permissions",
|
|
44189
|
+
description: "Set allowWrites and list exact operations to permit writes from a named file profile. Deletes also require allowDeletes. Writes and deletes are disabled by default.",
|
|
44171
44190
|
type: "object",
|
|
44172
44191
|
additionalProperties: false,
|
|
44173
44192
|
required: [
|
|
@@ -44197,6 +44216,8 @@ var beyondtrust_axi_default = {
|
|
|
44197
44216
|
}
|
|
44198
44217
|
},
|
|
44199
44218
|
host: {
|
|
44219
|
+
title: "PM Cloud API host",
|
|
44220
|
+
description: "The PM Cloud API host as a lowercase DNS name in the documented <organization>-services.pm.beyondtrustcloud.com form, ending in .beyondtrustcloud.com, with no scheme, port or path.",
|
|
44200
44221
|
type: "string",
|
|
44201
44222
|
maxLength: 253,
|
|
44202
44223
|
pattern: "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+beyondtrustcloud\\.com(?![\\s\\S])"
|
|
@@ -44235,7 +44256,7 @@ var beyondtrust_axi_default = {
|
|
|
44235
44256
|
}
|
|
44236
44257
|
}
|
|
44237
44258
|
},
|
|
44238
|
-
skillSha256: "
|
|
44259
|
+
skillSha256: "242e35d3479e70d8e2f624d53480db82c110fdc441577239e8d23a8756f3eb6b",
|
|
44239
44260
|
nativeWriteSettings: {
|
|
44240
44261
|
supportedOperations: [
|
|
44241
44262
|
"admin-request.create",
|
|
@@ -44410,7 +44431,7 @@ var beyondtrust_axi_default = {
|
|
|
44410
44431
|
limit: "Maximum rows, 1-1000 (default: 50)",
|
|
44411
44432
|
all: "Read up to 1000 rows within 10 requests, 60 seconds and 8 MiB",
|
|
44412
44433
|
cursor: "Resume an opaque cursor with the same profile, command and filters",
|
|
44413
|
-
sort: "Sort property and order, e.g. name:asc (default:
|
|
44434
|
+
sort: "Sort property and order, e.g. name:asc (default: API order)",
|
|
44414
44435
|
decision: "Filter Decision (string)",
|
|
44415
44436
|
"created-on": "Filter CreatedOn (string)",
|
|
44416
44437
|
"active-only": "Filter ActiveOnly (boolean)",
|
|
@@ -44546,7 +44567,7 @@ var beyondtrust_axi_default = {
|
|
|
44546
44567
|
limit: "Maximum rows, 1-1000 (default: 50)",
|
|
44547
44568
|
all: "Read up to 1000 rows within 10 requests, 60 seconds and 8 MiB",
|
|
44548
44569
|
cursor: "Resume an opaque cursor with the same profile, command and filters",
|
|
44549
|
-
sort: "Sort property and order, e.g. name:asc (default:
|
|
44570
|
+
sort: "Sort property and order, e.g. name:asc (default: API order)",
|
|
44550
44571
|
"ticket-id": "Filter TicketId (string)",
|
|
44551
44572
|
user: "Filter User (string)",
|
|
44552
44573
|
"computer-name": "Filter ComputerName (string)",
|
|
@@ -44612,7 +44633,7 @@ var beyondtrust_axi_default = {
|
|
|
44612
44633
|
limit: "Maximum rows, 1-1000 (default: 50)",
|
|
44613
44634
|
all: "Read up to 1000 rows within 10 requests, 60 seconds and 8 MiB",
|
|
44614
44635
|
cursor: "Resume an opaque cursor with the same profile, command and filters",
|
|
44615
|
-
sort: "Sort property and order, e.g. name:asc (default:
|
|
44636
|
+
sort: "Sort property and order, e.g. name:asc (default: API order)",
|
|
44616
44637
|
decision: "Filter Decision (string)",
|
|
44617
44638
|
"created-on": "Filter CreatedOn (string)",
|
|
44618
44639
|
"active-only": "Filter ActiveOnly (boolean)",
|
|
@@ -45062,7 +45083,7 @@ var beyondtrust_axi_default = {
|
|
|
45062
45083
|
limit: "Maximum rows, 1-1000 (default: 50)",
|
|
45063
45084
|
all: "Read up to 1000 rows within 10 requests, 60 seconds and 8 MiB",
|
|
45064
45085
|
cursor: "Resume an opaque cursor with the same profile, command and filters",
|
|
45065
|
-
sort: "Sort property and order, e.g. name:asc (default:
|
|
45086
|
+
sort: "Sort property and order, e.g. name:asc (default: API order)",
|
|
45066
45087
|
id: "Filter Id (string)",
|
|
45067
45088
|
name: "Filter Name (string)",
|
|
45068
45089
|
description: "Filter Description (string)",
|
|
@@ -45788,7 +45809,7 @@ var beyondtrust_axi_default = {
|
|
|
45788
45809
|
limit: "Maximum rows, 1-1000 (default: 50)",
|
|
45789
45810
|
all: "Read up to 1000 rows within 10 requests, 60 seconds and 8 MiB",
|
|
45790
45811
|
cursor: "Resume an opaque cursor with the same profile, command and filters",
|
|
45791
|
-
sort: "Sort property and order, e.g. name:asc (default:
|
|
45812
|
+
sort: "Sort property and order, e.g. name:asc (default: API order)",
|
|
45792
45813
|
"email-address": "Filter EmailAddress (string)",
|
|
45793
45814
|
"role-id": "Filter RoleId (string)",
|
|
45794
45815
|
"permission-id": "Filter PermissionId (string)",
|
|
@@ -45858,13 +45879,13 @@ var beyondtrust_axi_default = {
|
|
|
45858
45879
|
var checkpoint_axi_default = {
|
|
45859
45880
|
generatedBy: "scripts/checkpoint-inventory.mjs",
|
|
45860
45881
|
tool: "checkpoint-axi",
|
|
45861
|
-
version: "0.1.
|
|
45862
|
-
integrity: "sha512-
|
|
45882
|
+
version: "0.1.4",
|
|
45883
|
+
integrity: "sha512-f+ipm5OeIgeOXY1MnTaU3sWE/v0Ay44XNOKHY2gifdEz08nkDe8I5vUbYewcUlxMawYWFoGfmF23tV22anxVng==",
|
|
45863
45884
|
parserEvidence: "Published catalogue, fixed regional map and reviewed native parsers, write coordinator and download contracts",
|
|
45864
45885
|
sources: [
|
|
45865
45886
|
{
|
|
45866
45887
|
path: "dist/src/catalogue.js",
|
|
45867
|
-
sha256: "
|
|
45888
|
+
sha256: "fbac0730e6c3744a63c072b8e5243c1d668fbc7952398be80387b073f307dad6"
|
|
45868
45889
|
},
|
|
45869
45890
|
{
|
|
45870
45891
|
path: "dist/src/cli.js",
|
|
@@ -45884,7 +45905,7 @@ var checkpoint_axi_default = {
|
|
|
45884
45905
|
},
|
|
45885
45906
|
{
|
|
45886
45907
|
path: "dist/src/local-commands.js",
|
|
45887
|
-
sha256: "
|
|
45908
|
+
sha256: "0d2e310373850e04f96135f910e179e5014dd8050269ff5df0eb97c07d8478ce"
|
|
45888
45909
|
},
|
|
45889
45910
|
{
|
|
45890
45911
|
path: "dist/src/private-file.js",
|
|
@@ -45892,11 +45913,11 @@ var checkpoint_axi_default = {
|
|
|
45892
45913
|
},
|
|
45893
45914
|
{
|
|
45894
45915
|
path: "dist/src/profiles.js",
|
|
45895
|
-
sha256: "
|
|
45916
|
+
sha256: "8032b342fa9bc8492f436015dff09c41cddbb394d62305662c46007d6f541c8f"
|
|
45896
45917
|
},
|
|
45897
45918
|
{
|
|
45898
45919
|
path: "dist/src/reads.js",
|
|
45899
|
-
sha256: "
|
|
45920
|
+
sha256: "639ad32c60f06830905b7be34ed853abef64bb79a56dd0211846a1cc21855c1f"
|
|
45900
45921
|
},
|
|
45901
45922
|
{
|
|
45902
45923
|
path: "dist/src/redact.js",
|
|
@@ -45906,9 +45927,13 @@ var checkpoint_axi_default = {
|
|
|
45906
45927
|
path: "dist/src/regions.js",
|
|
45907
45928
|
sha256: "44288abe19a68fa672bc04ad167141717aed5c3a333b2420b14ee68e13abee78"
|
|
45908
45929
|
},
|
|
45930
|
+
{
|
|
45931
|
+
path: "dist/src/response-invalid.js",
|
|
45932
|
+
sha256: "323428f95087fec84e36dab86c7a64ecad69f43e9188f6c6425b64498dac6b5c"
|
|
45933
|
+
},
|
|
45909
45934
|
{
|
|
45910
45935
|
path: "dist/src/transport.js",
|
|
45911
|
-
sha256: "
|
|
45936
|
+
sha256: "241eff8feb3addcd5ea1d099e31b101f956ab5f34fe49117f0922ddcdcd63f78"
|
|
45912
45937
|
},
|
|
45913
45938
|
{
|
|
45914
45939
|
path: "dist/src/write-exceptions.js",
|
|
@@ -45935,6 +45960,8 @@ var checkpoint_axi_default = {
|
|
|
45935
45960
|
],
|
|
45936
45961
|
properties: {
|
|
45937
45962
|
region: {
|
|
45963
|
+
title: "Region",
|
|
45964
|
+
description: "Required region code for your tenant's regional gateway: us, eu, ca, au, uk, uae or in. Obtain it from your tenant administrator. There is no default; URLs are not accepted.",
|
|
45938
45965
|
type: "string",
|
|
45939
45966
|
enum: [
|
|
45940
45967
|
"us",
|
|
@@ -45947,11 +45974,15 @@ var checkpoint_axi_default = {
|
|
|
45947
45974
|
]
|
|
45948
45975
|
},
|
|
45949
45976
|
clientId: {
|
|
45977
|
+
title: "Client ID",
|
|
45978
|
+
description: "Required non-blank API client ID from your tenant's API credentials. There is no default.",
|
|
45950
45979
|
type: "string",
|
|
45951
45980
|
minLength: 1,
|
|
45952
45981
|
pattern: "\\S"
|
|
45953
45982
|
},
|
|
45954
45983
|
clientSecret: {
|
|
45984
|
+
title: "Client secret reference",
|
|
45985
|
+
description: "Reference the environment variable or absolute private file containing your API client secret, never the secret itself. If omitted, reads CHECKPOINT_AXI_CLIENT_SECRET; a missing or blank secret prevents authentication.",
|
|
45955
45986
|
$ref: "#/$defs/secretRef",
|
|
45956
45987
|
"x-secret": true,
|
|
45957
45988
|
default: {
|
|
@@ -45959,17 +45990,26 @@ var checkpoint_axi_default = {
|
|
|
45959
45990
|
}
|
|
45960
45991
|
},
|
|
45961
45992
|
saas: {
|
|
45993
|
+
title: "SaaS application name",
|
|
45994
|
+
description: "One non-blank SaaS application name for the tenant, not a gateway, host or authentication URL; slash (/) is not allowed. Obtain the exact API application name from your tenant administrator or Check Point support. If omitted, defaults to office365_emails, selecting Microsoft 365 email; supply the appropriate name for another application. A profile takes one value, while --saas on event list accepts a comma-separated list.",
|
|
45962
45995
|
type: "string",
|
|
45963
45996
|
minLength: 1,
|
|
45964
45997
|
pattern: "\\S",
|
|
45998
|
+
not: {
|
|
45999
|
+
pattern: "/"
|
|
46000
|
+
},
|
|
45965
46001
|
default: "office365_emails"
|
|
45966
46002
|
},
|
|
45967
46003
|
scope: {
|
|
46004
|
+
title: "Download scope",
|
|
46005
|
+
description: "Download scope value supplied by your tenant administrator or Check Point support for the intended download. Use printable ASCII with no spaces (characters ! through ~); comma-separated values are sent verbatim. There is no default: omitted means unset, so email download fails because it requires the profile scope as its scopes header. Attachment download uses this only as the default scope query; --scope overrides it, and neither supplied means no scope query. Tenant scope authorization and the relationship between these selectors remain unverified; do not guess a value.",
|
|
45968
46006
|
type: "string",
|
|
45969
46007
|
minLength: 1,
|
|
45970
|
-
pattern: "
|
|
46008
|
+
pattern: "^[!-~]+$"
|
|
45971
46009
|
},
|
|
45972
46010
|
downloads: {
|
|
46011
|
+
title: "Download permission",
|
|
46012
|
+
description: "Separate file-profile download opt-in. If omitted, downloads are disabled. Environment profiles cannot enable downloads.",
|
|
45973
46013
|
type: "object",
|
|
45974
46014
|
additionalProperties: false,
|
|
45975
46015
|
required: [
|
|
@@ -45980,11 +46020,15 @@ var checkpoint_axi_default = {
|
|
|
45980
46020
|
},
|
|
45981
46021
|
properties: {
|
|
45982
46022
|
allow: {
|
|
46023
|
+
title: "Allow downloads",
|
|
46024
|
+
description: "Set true to permit download commands; each command still requires a new private output file.",
|
|
45983
46025
|
type: "boolean"
|
|
45984
46026
|
}
|
|
45985
46027
|
}
|
|
45986
46028
|
},
|
|
45987
46029
|
writes: {
|
|
46030
|
+
title: "Write permissions",
|
|
46031
|
+
description: "File-profile write opt-in and exact operation allow-list. If omitted, writes are disabled with no allowed operations. Forced read-only always wins.",
|
|
45988
46032
|
type: "object",
|
|
45989
46033
|
additionalProperties: false,
|
|
45990
46034
|
required: [
|
|
@@ -45997,9 +46041,13 @@ var checkpoint_axi_default = {
|
|
|
45997
46041
|
},
|
|
45998
46042
|
properties: {
|
|
45999
46043
|
allowWrites: {
|
|
46044
|
+
title: "Allow writes",
|
|
46045
|
+
description: "Set true to permit listed operations, subject to preview, exact confirmation and durable redacted intent.",
|
|
46000
46046
|
type: "boolean"
|
|
46001
46047
|
},
|
|
46002
46048
|
operations: {
|
|
46049
|
+
title: "Allowed write operations",
|
|
46050
|
+
description: "Exact operation names to allow, such as email.quarantine. An empty list permits no writes.",
|
|
46003
46051
|
type: "array",
|
|
46004
46052
|
items: {
|
|
46005
46053
|
type: "string",
|
|
@@ -46020,6 +46068,8 @@ var checkpoint_axi_default = {
|
|
|
46020
46068
|
],
|
|
46021
46069
|
properties: {
|
|
46022
46070
|
env: {
|
|
46071
|
+
title: "Secret environment variable",
|
|
46072
|
+
description: "Name of the environment variable holding the secret, such as CHECKPOINT_AXI_CLIENT_SECRET. Use letters, digits and underscores, starting with a letter or underscore.",
|
|
46023
46073
|
type: "string",
|
|
46024
46074
|
pattern: "^[A-Za-z_][A-Za-z0-9_]*$"
|
|
46025
46075
|
}
|
|
@@ -46033,6 +46083,8 @@ var checkpoint_axi_default = {
|
|
|
46033
46083
|
],
|
|
46034
46084
|
properties: {
|
|
46035
46085
|
file: {
|
|
46086
|
+
title: "Secret file path",
|
|
46087
|
+
description: "Absolute path to a private UTF-8 file holding the secret. Symlinks and insecure permissions are rejected; a leading BOM and trailing whitespace are removed from its content.",
|
|
46036
46088
|
type: "string",
|
|
46037
46089
|
pattern: "^(?:/|[A-Za-z]:[\\\\/])"
|
|
46038
46090
|
}
|
|
@@ -46051,7 +46103,7 @@ var checkpoint_axi_default = {
|
|
|
46051
46103
|
uae: "https://cloudinfra-gw.me.portal.checkpoint.com",
|
|
46052
46104
|
in: "https://cloudinfra-gw.in.portal.checkpoint.com"
|
|
46053
46105
|
},
|
|
46054
|
-
skillSha256: "
|
|
46106
|
+
skillSha256: "33011d4e7abc8fd76b0b3b38450cfdff545117a1950e22ee5176ab3c2cf589c9",
|
|
46055
46107
|
nativeWriteSettings: {
|
|
46056
46108
|
supportedOperations: [
|
|
46057
46109
|
"attachment.download",
|
|
@@ -46239,7 +46291,7 @@ var checkpoint_axi_default = {
|
|
|
46239
46291
|
flags: {
|
|
46240
46292
|
config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
|
|
46241
46293
|
profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
|
|
46242
|
-
fields: "Comma-separated
|
|
46294
|
+
fields: "Comma-separated row fields: id,subject,state,verdict; or top-level emails,count,total,complete,reason,cursor,expansion,help; default all",
|
|
46243
46295
|
full: "Show full strings instead of 500-character previews; default false",
|
|
46244
46296
|
help: "Show concise command help; default false",
|
|
46245
46297
|
saas: "SaaS override; default selected profile saas or office365_emails",
|
|
@@ -46249,7 +46301,10 @@ var checkpoint_axi_default = {
|
|
|
46249
46301
|
limit: "Maximum rows; default 50, range 1-1000; cannot combine with --all",
|
|
46250
46302
|
all: "Read up to 1000 rows / 10 HTTP requests / 60 seconds / 8 MiB; default false",
|
|
46251
46303
|
cursor: "Opaque continuation bound to profile, region, operation and selectors; repeat original selectors",
|
|
46252
|
-
|
|
46304
|
+
expand: "Opt in to read-only show details on returned rows; default false; partial expansion is reported separately",
|
|
46305
|
+
"expand-limit": "Maximum detail attempts; default 5, range 1-8; requires --expand",
|
|
46306
|
+
"expand-requests": "Total HTTP request cap including auth, list pages, detail and retries; default 10, range 2-10; requires --expand",
|
|
46307
|
+
filter: "JSON array of {saasAttrName, saasAttrOp, saasAttrValue} filters. saasAttrName is a field path, not a closed enum (guide pages 19-20). Documented examples: entityPayload.subject, entityPayload.fromEmail, entityPayload.attachmentCount. 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. saasAttrOp: is, contains, startsWith, isEmpty, isNot, notContains, isNotEmpty, greaterThan, lessThan. The guide defines operators globally, without a per-field compatibility matrix; examples pair fromEmail with is and attachmentCount with greaterThan. saasAttrValue is a string."
|
|
46253
46308
|
}
|
|
46254
46309
|
},
|
|
46255
46310
|
{
|
|
@@ -46285,7 +46340,7 @@ var checkpoint_axi_default = {
|
|
|
46285
46340
|
flags: {
|
|
46286
46341
|
config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
|
|
46287
46342
|
profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
|
|
46288
|
-
fields: "Comma-separated
|
|
46343
|
+
fields: "Comma-separated row fields: id,type,state,severity; or top-level events,count,total,complete,reason,cursor,expansion,help; default all",
|
|
46289
46344
|
full: "Show full strings instead of 500-character previews; default false",
|
|
46290
46345
|
help: "Show concise command help; default false",
|
|
46291
46346
|
"start-date": "ISO timestamp with timezone; default 24 hours before end-date; maximum window 31 days",
|
|
@@ -46293,10 +46348,14 @@ var checkpoint_axi_default = {
|
|
|
46293
46348
|
limit: "Maximum rows; default 50, range 1-1000; cannot combine with --all",
|
|
46294
46349
|
all: "Read up to 1000 rows / 10 HTTP requests / 60 seconds / 8 MiB; default false",
|
|
46295
46350
|
cursor: "Opaque continuation bound to profile, region, operation and selectors; repeat original selectors",
|
|
46351
|
+
expand: "Opt in to read-only show details on returned rows; default false; partial expansion is reported separately",
|
|
46352
|
+
"expand-limit": "Maximum detail attempts; default 5, range 1-8; requires --expand",
|
|
46353
|
+
"expand-requests": "Total HTTP request cap including auth, list pages, detail and retries; default 10, range 2-10; requires --expand",
|
|
46296
46354
|
saas: "Comma-separated SaaS overrides; default selected profile saas or office365_emails",
|
|
46297
46355
|
"event-types": "Comma-separated event types; default unfiltered",
|
|
46298
|
-
"event-states": "Comma-separated event states; default unfiltered",
|
|
46299
|
-
|
|
46356
|
+
"event-states": "Comma-separated event states: new, detected, pending, remediated, dismissed, exception; default unfiltered",
|
|
46357
|
+
states: "Alias for --event-states; cannot combine with --event-states",
|
|
46358
|
+
severities: "Nonempty comma-separated severity strings; vendor documents no fixed severity list; unrecognised severities can return an empty result; default unfiltered",
|
|
46300
46359
|
"event-ids": "Comma-separated event IDs; default unfiltered",
|
|
46301
46360
|
"confidence-indicator": "Confidence indicator selector; default unfiltered",
|
|
46302
46361
|
description: "Description selector; default unfiltered"
|
|
@@ -46445,7 +46504,11 @@ var checkpoint_axi_default = {
|
|
|
46445
46504
|
profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
|
|
46446
46505
|
fields: "Comma-separated output fields; default all",
|
|
46447
46506
|
full: "Show full strings instead of 500-character previews; default false",
|
|
46448
|
-
help: "Show concise command help; default false"
|
|
46507
|
+
help: "Show concise command help; default false",
|
|
46508
|
+
wait: "Poll existing task status only; default false; requires --timeout; terminal: completed, failed, stopped",
|
|
46509
|
+
timeout: "Total wait timeout in integer seconds, range 1-60; required with --wait; includes auth and retries",
|
|
46510
|
+
"poll-interval": "Seconds between status reads; default 2, range 1-10; requires --wait",
|
|
46511
|
+
"wait-requests": "Total HTTP request cap including auth and retries; default 10, range 2-10; requires --wait"
|
|
46449
46512
|
}
|
|
46450
46513
|
}
|
|
46451
46514
|
]
|
|
@@ -47874,6 +47937,13 @@ function rewriteDiscoveryHelp(help, tool) {
|
|
|
47874
47937
|
examples: help.examples.map((example) => hostedHelp(example, tool, flags, true))
|
|
47875
47938
|
});
|
|
47876
47939
|
}
|
|
47940
|
+
function encodeSuggestion(value, inline) {
|
|
47941
|
+
try {
|
|
47942
|
+
if (value && !(inline && value.includes(",")) && decode3(`value: ${value}`).value === value) return value;
|
|
47943
|
+
} catch {
|
|
47944
|
+
}
|
|
47945
|
+
return JSON.stringify(value);
|
|
47946
|
+
}
|
|
47877
47947
|
function rewriteSuggestions(output3, tool, truncated = false, invocation) {
|
|
47878
47948
|
if (truncated) return output3;
|
|
47879
47949
|
if (tool === "gh-axi") return rewriteGhSuggestions(output3, invocation, truncated);
|
|
@@ -47964,6 +48034,7 @@ function rewriteSuggestions(output3, tool, truncated = false, invocation) {
|
|
|
47964
48034
|
const executable = new RegExp(`^(?:artium-axi |npx -y @knowttl/)?${tool}(?=\\s|$)`);
|
|
47965
48035
|
if (executable.test(output3.replace(/^[ \t]*(?:(?:Command|Native operation|Examples|Usage): )?/, "")) || tool === "ldap-axi" && ldapHelp.test(output3)) return hostedHelp(output3, tool, flags, true);
|
|
47966
48036
|
let spans;
|
|
48037
|
+
let field;
|
|
47967
48038
|
let unknownOutcome = false;
|
|
47968
48039
|
try {
|
|
47969
48040
|
const json2 = output3.trimStart().startsWith("{");
|
|
@@ -47993,16 +48064,41 @@ function rewriteSuggestions(output3, tool, truncated = false, invocation) {
|
|
|
47993
48064
|
}
|
|
47994
48065
|
const { spans: suggestions, document } = parsed;
|
|
47995
48066
|
spans = suggestions;
|
|
48067
|
+
field = parsed.field;
|
|
47996
48068
|
if (tool === "az-axi") {
|
|
47997
48069
|
unknownOutcome = document?.code === "UNKNOWN_OUTCOME" || document?.error?.code === "UNKNOWN_OUTCOME";
|
|
47998
48070
|
}
|
|
47999
48071
|
} catch {
|
|
48000
48072
|
return output3;
|
|
48001
48073
|
}
|
|
48002
|
-
|
|
48003
|
-
|
|
48004
|
-
|
|
48005
|
-
|
|
48074
|
+
const replacements = spans.map((span) => hostedHelp(span.value, tool, flags, /^[ \t]*(?:Command|Native operation|Examples|Usage):/m.test(span.value)));
|
|
48075
|
+
if (field && replacements.some((value) => !value.trim())) {
|
|
48076
|
+
const values = replacements.filter((value) => value.trim());
|
|
48077
|
+
const help = field.array ? values : values[0] ?? "";
|
|
48078
|
+
const replacement = output3.trimStart().startsWith("{") ? JSON.stringify(help) : field.array && !values.length ? "help[0]:" : encode3({ help });
|
|
48079
|
+
output3 = output3.slice(0, field.start) + replacement + output3.slice(field.end);
|
|
48080
|
+
} else {
|
|
48081
|
+
const edits = [];
|
|
48082
|
+
const lists = /* @__PURE__ */ new Map();
|
|
48083
|
+
for (let index = 0; index < spans.length; index++) {
|
|
48084
|
+
const span = spans[index];
|
|
48085
|
+
const value = replacements[index];
|
|
48086
|
+
const changed = value !== span.value;
|
|
48087
|
+
const text2 = span.quoted ? JSON.stringify(value) : encodeSuggestion(value, Boolean(span.list));
|
|
48088
|
+
if (!span.list) {
|
|
48089
|
+
if (changed) edits.push({ start: span.start, end: span.start + span.raw.length, text: text2 });
|
|
48090
|
+
continue;
|
|
48091
|
+
}
|
|
48092
|
+
const list = lists.get(span.list) ?? { items: [], changed: false };
|
|
48093
|
+
if (!changed) list.items.push(span.raw);
|
|
48094
|
+
else if (value) list.items.push(text2);
|
|
48095
|
+
list.changed ||= changed;
|
|
48096
|
+
lists.set(span.list, list);
|
|
48097
|
+
}
|
|
48098
|
+
for (const [{ countStart, end }, { items, changed }] of lists) {
|
|
48099
|
+
if (changed) edits.push({ start: countStart, end, text: `${items.length}]:${items.length ? ` ${items.join(",")}` : ""}` });
|
|
48100
|
+
}
|
|
48101
|
+
for (const edit of edits.sort((a, b) => b.start - a.start)) output3 = output3.slice(0, edit.start) + edit.text + output3.slice(edit.end);
|
|
48006
48102
|
}
|
|
48007
48103
|
spans = (output3.trimStart().startsWith("{") ? jsonHelp(output3) : toonHelp(output3)).spans;
|
|
48008
48104
|
if (spans.some((span) => /\\[`'"]/.test(span.value))) return output3;
|
|
@@ -48156,8 +48252,10 @@ function jsonHelp(output3) {
|
|
|
48156
48252
|
const spans = [];
|
|
48157
48253
|
let index = 0;
|
|
48158
48254
|
let helpFields = 0;
|
|
48255
|
+
let field;
|
|
48159
48256
|
function value(help = false, root = false) {
|
|
48160
48257
|
const token = tokens[index++];
|
|
48258
|
+
const start = token.index;
|
|
48161
48259
|
if (token[0] === "{") {
|
|
48162
48260
|
while (tokens[index][0] !== "}") {
|
|
48163
48261
|
const key = JSON.parse(tokens[index++][0]);
|
|
@@ -48176,21 +48274,23 @@ function jsonHelp(output3) {
|
|
|
48176
48274
|
} else if (help && token[0].startsWith('"')) {
|
|
48177
48275
|
spans.push({ start: token.index, raw: token[0], value: JSON.parse(token[0]), quoted: true });
|
|
48178
48276
|
}
|
|
48277
|
+
if (help) field = { start, end: tokens[index - 1].index + tokens[index - 1][0].length, array: token[0] === "[" };
|
|
48179
48278
|
}
|
|
48180
48279
|
value(false, true);
|
|
48181
|
-
return { spans: helpFields === 1 ? spans : [], document: parsed };
|
|
48280
|
+
return { spans: helpFields === 1 ? spans : [], field: helpFields === 1 ? field : void 0, document: parsed };
|
|
48182
48281
|
}
|
|
48183
48282
|
function toonHelp(output3) {
|
|
48184
48283
|
const lines = [...output3.matchAll(/[^\r\n]*(?:\r\n|\n|$)/g)].filter((line) => line[0]);
|
|
48185
48284
|
const spans = [];
|
|
48186
48285
|
const validation = lines.map((line) => line[0].replace(/\r?\n$/, ""));
|
|
48187
48286
|
let helpFields = 0;
|
|
48188
|
-
|
|
48287
|
+
let range;
|
|
48288
|
+
function scalar(raw, start, list) {
|
|
48189
48289
|
const parsed2 = decode3(`value: ${raw}`);
|
|
48190
48290
|
if (typeof parsed2.value !== "string") throw new Error("Unknown suggestion format");
|
|
48191
48291
|
const quoted = raw.startsWith('"');
|
|
48192
48292
|
if (quoted && JSON.parse(raw) !== parsed2.value) throw new Error("Unknown escaping");
|
|
48193
|
-
spans.push({ start, raw, value: parsed2.value, quoted });
|
|
48293
|
+
spans.push({ start, raw, value: parsed2.value, quoted, ...list ? { list } : {} });
|
|
48194
48294
|
}
|
|
48195
48295
|
for (let index = 0; index < lines.length; index++) {
|
|
48196
48296
|
const text2 = lines[index][0].replace(/\r?\n$/, "");
|
|
@@ -48206,6 +48306,7 @@ ${line[0]}`);
|
|
|
48206
48306
|
}
|
|
48207
48307
|
}
|
|
48208
48308
|
helpFields++;
|
|
48309
|
+
range = { start: lines[index].index, end: lines[index].index + text2.length, array: !!field[1] };
|
|
48209
48310
|
validation[index] = 'help: ""';
|
|
48210
48311
|
if (!field[1]) {
|
|
48211
48312
|
scalar(field[2], lines[index].index + text2.length - field[2].length);
|
|
@@ -48213,6 +48314,7 @@ ${line[0]}`);
|
|
|
48213
48314
|
}
|
|
48214
48315
|
if (field[2]) {
|
|
48215
48316
|
const raw = field[2];
|
|
48317
|
+
const list = { countStart: lines[index].index + /^(?:help|"help")\[/.exec(text2)[0].length, end: lines[index].index + text2.length };
|
|
48216
48318
|
let cursor = 0;
|
|
48217
48319
|
let items = 0;
|
|
48218
48320
|
while (cursor < raw.length) {
|
|
@@ -48226,7 +48328,7 @@ ${line[0]}`);
|
|
|
48226
48328
|
const comma = raw.indexOf(",", cursor);
|
|
48227
48329
|
cursor = comma === -1 ? raw.length : comma;
|
|
48228
48330
|
}
|
|
48229
|
-
scalar(raw.slice(start, cursor).trimEnd(), lines[index].index + text2.length - raw.length + start);
|
|
48331
|
+
scalar(raw.slice(start, cursor).trimEnd(), lines[index].index + text2.length - raw.length + start, list);
|
|
48230
48332
|
items++;
|
|
48231
48333
|
while (/[ \t]/.test(raw[cursor] ?? "")) cursor++;
|
|
48232
48334
|
if (cursor < raw.length && raw[cursor++] !== ",") throw new Error("Unknown inline suggestion");
|
|
@@ -48242,6 +48344,7 @@ ${line[0]}`);
|
|
|
48242
48344
|
const row = /^ (?:- )?(\S[^\r\n]*)(?:\r?\n)?$/.exec(line[0]);
|
|
48243
48345
|
if (!row) throw new Error("Unknown suggestion item");
|
|
48244
48346
|
scalar(row[1], line.index + line[0].indexOf(row[1]));
|
|
48347
|
+
range.end = line.index + line[0].replace(/\r?\n$/, "").length;
|
|
48245
48348
|
validation[index] = "";
|
|
48246
48349
|
}
|
|
48247
48350
|
if (lines[index + 1]?.[0].startsWith(" ")) throw new Error("Extra suggestion rows");
|
|
@@ -48249,7 +48352,7 @@ ${line[0]}`);
|
|
|
48249
48352
|
const document = validation.filter((line) => line !== "").join("\n");
|
|
48250
48353
|
const parsed = decode3(document);
|
|
48251
48354
|
if (encode3(parsed) !== document) throw new Error("Unknown document structure");
|
|
48252
|
-
return { spans: helpFields === 1 ? spans : [], document: parsed };
|
|
48355
|
+
return { spans: helpFields === 1 ? spans : [], field: helpFields === 1 ? range : void 0, document: parsed };
|
|
48253
48356
|
}
|
|
48254
48357
|
|
|
48255
48358
|
// src/cli/views.ts
|
|
@@ -48354,8 +48457,8 @@ async function doctor(createClient = (deadline) => new Client(process.env, void
|
|
|
48354
48457
|
line(
|
|
48355
48458
|
tool.name,
|
|
48356
48459
|
tool.status === "ok",
|
|
48357
|
-
tool.status,
|
|
48358
|
-
new ArtiumError(tool.status === "unconfigured" ? "CREDENTIAL_NOT_CONFIGURED" : tool.status === "error" ? "TOOL_FAILED" : tool.status === "disabled" ? "TOOL_DISABLED" : "SERVER_UNAVAILABLE")
|
|
48460
|
+
tool.status === "error" && tool.errorCode ? `${tool.status}: ${tool.errorCode}` : tool.status,
|
|
48461
|
+
new ArtiumError(tool.status === "unconfigured" ? "CREDENTIAL_NOT_CONFIGURED" : tool.status === "error" ? tool.errorCode ?? "TOOL_FAILED" : tool.status === "disabled" ? "TOOL_DISABLED" : "SERVER_UNAVAILABLE")
|
|
48359
48462
|
);
|
|
48360
48463
|
}
|
|
48361
48464
|
} catch (error62) {
|
|
@@ -48608,7 +48711,7 @@ import { homedir as homedir2 } from "node:os";
|
|
|
48608
48711
|
import { dirname as dirname2, join as join2, resolve as resolve2 } from "node:path";
|
|
48609
48712
|
|
|
48610
48713
|
// skill/artium-axi/SKILL.md
|
|
48611
|
-
var SKILL_default = "---\nname: artium-axi\ndescription: Discover and run managed commands through Artium, using the signed-in account and its granted tools.\n---\n\nFor requests involving data from Artium-managed tools, discover the tools available to this account before choosing one.\nRun `artium-axi` for identity and tools together, or `artium-axi tools` when only tool discovery is needed.\nRun `artium-axi tools show <tool>` for its commands and a vetted example, then run `artium-axi <tool> <args>`.\nFollow the returned next commands; they already include the Artium prefix.\nKeep upstream arguments intact and use the managed credentials rather than configuring an upstream CLI directly.\nSee [client input handling](https://github.com/knowttl/artium-axi/blob/main/docs/client-reference.md#command-surface-and-subcommands) for Azure stdin selection and Tenable local uploads or explicit stdin.\n\nIf artium-axi is absent from PATH, use the installed command below in place of `artium-axi` in every example:\nOn Windows, choose the labelled PowerShell or Git Bash command for your shell.\n\n<!-- artium-axi executable -->\nThe setup command records the standalone bundle's Node invocation here.\n<!-- /artium-axi executable -->\n\nIf sign-in is required, ask the user to sign in with their SSO or local account.\nNever request or print tokens or put passwords in arguments.\nAn empty tool list means no enabled runtime tool is available through the account's roles; ask an administrator to check grants and enabled tools.\nUse `artium-axi doctor` for connection or cached health diagnostics.\nDo not retry an uncertain command outcome, especially a write.\n\n## Investigation quick guide\n\nStart with these reads using an already signed-in account, without running help first.\nArtium is a managed transport; vendor investigation syntax and one-call pivots belong to the tool skills installed by setup.\nUse the matching installed skill once you know the granted tool.\n\n| Read command and example | What it answers |\n| --- | --- |\n| `artium-axi` | Identity, roles and available tools together in one call. |\n| `artium-axi tools` | Granted enabled tools, status, pinned version and `readOnly`; no flags required. |\n| `artium-axi tools show falcon-axi` | One tool's reviewed command inventory, vetted upstream help and first read example; substitute a granted tool name. |\n| `artium-axi whoami` | Identity, roles, session expiry and server; no flags required. |\n| `artium-axi doctor` | Connection, certificate, token, version and cached tool health; does not run a fresh upstream credential test. |\n| `artium-axi falcon-axi detection list` | First endpoint detection read when Falcon is granted; keep all upstream arguments after the tool name. |\n\nThe home view combines identity and tool discovery, so skip separate whoami and tools calls when it already answers the question.\nTools show combines command inventory, vetted help and a first call, avoiding help probes for every listed command.\nArtium has no generic batch, start-and-wait, list-with-details or lookup-and-pivot flag.\nUse only single-call forms documented by the granted tool's installed skill and supported by its pinned command inventory; upstream support does not imply managed availability.\n\n### Keep output small\n\nClient discovery has no `--fields`, `--limit` or `--full` flags.\nTools already returns only `name`, `status`, `version` and `readOnly`; use tools show for one tool's details only when needed.\nForward tool-specific filters, `--fields` and `--limit` only where its skill documents them.\nPrefer identifiers, status, timestamps and summary fields; fetch long descriptions only for relevant records.\nUpstream `--full`, where supported, restores text but never bypasses redaction, execution budgets or output caps.\nHeed stderr truncation notices and narrow the query rather than treating partial output as complete; see [output limits](https://github.com/knowttl/artium-axi/blob/main/docs/client-reference.md#toon-output-behavior).\n\n### Help is recovery\n\nUse help for a command that fails or whose arguments are unclear, not to start an investigation.\n`artium-axi --help` returns the local client command list, usage, flags and an example without signing in.\nClient command help, such as `artium-axi tools --help`, `artium-axi tools show --help`, `artium-axi whoami --help` and `artium-axi doctor --help`, describes only that client command.\n`artium-axi --help falcon-axi` is local entry help describing forwarding and managed boundaries.\n`artium-axi falcon-axi --help` and `artium-axi falcon-axi detection list --help` authenticate and forward help to the pinned tool at the requested level.\nThe same before/after-tool distinction applies to other granted tools.\n\n### Read allowlist and state changes\n\nThe six reads above are candidates for a reviewed allowlist, scoped to their exact argument forms.\nAuthenticated reads can refresh local session tokens and create server audit records.\nNever allow an unrestricted tool prefix merely because its discovery row says `readOnly`.\nLogin, passwd and logout change session/account state; setup writes skills/hooks; update replaces the executable; download prepares transfers or saves artifacts.\nForwarded writes and job creation need separate review and administrator enablement where supported.\nHybrid Analysis quick scans can transmit samples or URLs even with managed writes disabled.\nNative preview, execute and exact confirmation gates still apply; there is no universal Artium confirmation flag.\n\n### Failures and next action\n\nArtium errors are TOON on stdout with `error.code`, `source`, `message` and `next`; follow `next` rather than retrying blindly.\nExit 0 means success, 2 means usage/configuration error and 1 means authentication/server/transport failure; upstream exit status passes through.\n\nUse the [generated error reference](https://github.com/knowttl/artium-axi/blob/main/docs/errors.md) for code-specific recovery and exit codes.\n\n## Commands\n\nThis table is kept identical to the [command reference](https://github.com/knowttl/artium-axi/blob/main/docs/commands.md).\nTool reference links describe upstream commands; Artium controls availability, credentials and permissions.\n\n| Command | Purpose |\n| --- | --- |\n| `artium-axi` | Show identity, roles and available tools. |\n| `artium-axi --help [<command>]` | Show local client or tool-entry help without authentication. |\n| `artium-axi --version` | Print the client package version. |\n| `artium-axi login --username <username> [--password-stdin]` | Sign in with a local account using protected password input. |\n| `artium-axi login --sso` | Sign in through browser approval of the terminal code. |\n| `artium-axi passwd [--password-stdin]` | Change the account password, then sign in again. |\n| `artium-axi logout` | Remove local tokens and attempt server-session revocation. |\n| `artium-axi whoami` | Show identity, roles, session expiry and server. |\n| `artium-axi tools` | List granted enabled tools with status and pinned versions. |\n| `artium-axi tools show <tool>` | Show one available tool, vetted upstream help and a first call. |\n| `artium-axi doctor` | Check the server, certificate, token, client version and cached tool health. |\n| `artium-axi update` | Download and verify the server client, replace this file and retain a .bak backup; npm installs use npm instead. |\n| `artium-axi download --operation <operation> --selector <selector> --type <type> --destination <absolute-new-path> [--transfer <id> --execute --confirm <exact-confirm>] [--password-stdin\\|--sso]` | Preview or explicitly verify and save administrator-enabled Hybrid Analysis archives, Check Point emails/attachments, Graph mail exports or BeyondTrust endpoint content; see `artium-axi download --help` for guards. |\n| `artium-axi setup --host <claude\\|codex\\|opencode\\|pi> [--hook] [--force]` | Install skills for the signed-in account's granted tools and an optional Claude Code hook. |\n| `artium-axi --managed-session <command> [<args>]` | Supply and persist caller-owned sessions through private pipes; see `artium-axi --managed-session --help`. |\n| `artium-axi falcon-axi [<args>]` | Run Falcon commands with managed credentials; [tool reference](https://github.com/knowttl/falcon-axi#readme). |\n| `artium-axi vectra-axi [<args>]` | Run Vectra commands with managed credentials; [tool reference](https://www.npmjs.com/package/@knowttl/vectra-axi). |\n| `artium-axi az-axi [<args>]` | Run Azure commands with the managed identity; [tool reference](https://www.npmjs.com/package/@knowttl/az-axi). |\n| `artium-axi mg-axi [<args>]` | Run Microsoft Graph commands with the managed identity; [tool reference](https://www.npmjs.com/package/@knowttl/mg-axi). |\n| `artium-axi ldap-axi [<args>]` | Read directory data with the managed LDAP bind identity; [tool reference](https://www.npmjs.com/package/@knowttl/ldap-axi). |\n| `artium-axi ado-axi [<args>]` | Run Azure DevOps commands with managed credentials; [tool reference](https://www.npmjs.com/package/@jeffreyhaen/ado-axi). |\n| `artium-axi awx-axi [<args>]` | Inspect AWX automation with managed credentials; [tool reference](https://www.npmjs.com/package/awx-axi). |\n| `artium-axi tenable-axi [<args>]` | Investigate Tenable One with managed API keys; [tool reference](https://www.npmjs.com/package/@knowttl/tenable-axi). |\n| `artium-axi hybrid-axi [<args>]` | Investigate Hybrid Analysis with a managed API key; [tool reference](https://www.npmjs.com/package/@knowttl/hybrid-axi). |\n| `artium-axi beyondtrust-axi [<args>]` | Inspect BeyondTrust PM Cloud Endpoint Privilege Management with managed credentials; [tool reference](https://www.npmjs.com/package/@knowttl/beyondtrust-axi). |\n| `artium-axi checkpoint-axi [<args>]` | Investigate Check Point Email Security with managed regional credentials; [tool reference](https://www.npmjs.com/package/@knowttl/checkpoint-axi). |\n| `artium-axi gh-axi [<args>]` | Read and update GitHub data with managed credentials; [tool reference](https://www.npmjs.com/package/gh-axi). |\n";
|
|
48714
|
+
var SKILL_default = "---\nname: artium-axi\ndescription: Discover and run managed commands through Artium, using the signed-in account and its granted tools.\n---\n\nFor requests involving data from Artium-managed tools, discover the tools available to this account before choosing one.\nRun `artium-axi` for identity and tools together, or `artium-axi tools` when only tool discovery is needed.\nRun `artium-axi tools show <tool>` for its commands and a vetted example, then run `artium-axi <tool> <args>`.\nFollow the returned next commands; they already include the Artium prefix.\nKeep upstream arguments intact and use the managed credentials rather than configuring an upstream CLI directly.\nSee [client input handling](https://github.com/knowttl/artium-axi/blob/main/docs/client-reference.md#command-surface-and-subcommands) for Azure stdin selection and Tenable local uploads or explicit stdin.\n\nIf artium-axi is absent from PATH, use the installed command below in place of `artium-axi` in every example:\nOn Windows, choose the labelled PowerShell or Git Bash command for your shell.\n\n<!-- artium-axi executable -->\nThe setup command records the standalone bundle's Node invocation here.\n<!-- /artium-axi executable -->\n\nIf sign-in is required, ask the user to sign in with their SSO or local account.\nNever request or print tokens or put passwords in arguments.\nAn empty tool list means no enabled runtime tool is available through the account's roles; ask an administrator to check grants and enabled tools.\nUse `artium-axi doctor` for connection or cached health diagnostics.\nDo not retry an uncertain command outcome, especially a write.\n\n## Investigation quick guide\n\nStart with these reads using an already signed-in account, without running help first.\nArtium is a managed transport; vendor investigation syntax and one-call pivots belong to the tool skills installed by setup.\nUse the matching installed skill once you know the granted tool.\n\n| Read command and example | What it answers |\n| --- | --- |\n| `artium-axi` | Identity, roles and available tools together in one call. |\n| `artium-axi tools` | Granted enabled tools, status, pinned version and `readOnly`; no flags required. |\n| `artium-axi tools show falcon-axi` | One tool's reviewed command inventory, vetted upstream help and first read example; substitute a granted tool name. |\n| `artium-axi whoami` | Identity, roles, session expiry and server; no flags required. |\n| `artium-axi doctor` | Connection, certificate, token, version and cached tool health; does not run a fresh upstream credential test. |\n| `artium-axi falcon-axi detection list` | First endpoint detection read when Falcon is granted; keep all upstream arguments after the tool name. |\n\nThe home view combines identity and tool discovery, so skip separate whoami and tools calls when it already answers the question.\nTools show combines command inventory, vetted help and a first call, avoiding help probes for every listed command.\nArtium has no generic batch, start-and-wait, list-with-details or lookup-and-pivot flag.\nUse only single-call forms documented by the granted tool's installed skill and supported by its pinned command inventory; upstream support does not imply managed availability.\n\n### Keep output small\n\nClient discovery has no `--fields`, `--limit` or `--full` flags.\nTools already returns only `name`, `status`, `version` and `readOnly`; use tools show for one tool's details only when needed.\nForward tool-specific filters, `--fields` and `--limit` only where its skill documents them.\nPrefer identifiers, status, timestamps and summary fields; fetch long descriptions only for relevant records.\nUpstream `--full`, where supported, restores text but never bypasses redaction, execution budgets or output caps.\nHeed stderr truncation notices and narrow the query rather than treating partial output as complete; see [output limits](https://github.com/knowttl/artium-axi/blob/main/docs/client-reference.md#toon-output-behavior).\n\n### Help is recovery\n\nUse help for a command that fails or whose arguments are unclear, not to start an investigation.\n`artium-axi --help` returns the local client command list, usage, flags and an example without signing in.\nClient command help, such as `artium-axi tools --help`, `artium-axi tools show --help`, `artium-axi whoami --help` and `artium-axi doctor --help`, describes only that client command.\n`artium-axi --help falcon-axi` is local entry help describing forwarding and managed boundaries.\n`artium-axi falcon-axi --help` and `artium-axi falcon-axi detection list --help` authenticate and forward help to the pinned tool at the requested level.\nThe same before/after-tool distinction applies to other granted tools.\n\n### Read allowlist and state changes\n\nThe six reads above are candidates for a reviewed allowlist, scoped to their exact argument forms.\nAuthenticated reads can refresh local session tokens and create server audit records.\nNever allow an unrestricted tool prefix merely because its discovery row says `readOnly`.\nLogin, passwd and logout change session/account state; setup writes skills/hooks; update replaces the executable; download prepares transfers or saves artifacts.\nForwarded writes and job creation need separate review and administrator enablement where supported.\nHybrid Analysis quick scans can transmit samples or URLs even with managed writes disabled.\nNative preview, execute and exact confirmation gates still apply; there is no universal Artium confirmation flag.\n\n### Failures and next action\n\nArtium errors are TOON on stdout with `error.code`, `source`, `message` and `next`; follow `next` rather than retrying blindly.\nFor a non-zero tool exit, keep the stderr `artium-axi: request_id <id>` line and quote that ID, the tool and time when asking an administrator for help; never include credentials or sensitive output.\nFollow the [failed-call troubleshooting path](https://github.com/knowttl/artium-axi/blob/main/docs/runbook.md#troubleshoot-a-failed-tool-call) for administrator investigation, and check current state before retrying an unknown write outcome.\nSee the [output contract](https://github.com/knowttl/artium-axi/blob/main/README.md#toon-output-and-errors) for exit codes and upstream output handling.\n\nUse the [generated error reference](https://github.com/knowttl/artium-axi/blob/main/docs/errors.md) for code-specific recovery and exit codes.\nSee the [credential diagnostic guidance](https://github.com/knowttl/artium-axi/blob/main/docs/runbook.md#scripted-administrator-sessions) for tool-code mappings and administrator troubleshooting.\n\n## Commands\n\nThis table is kept identical to the [command reference](https://github.com/knowttl/artium-axi/blob/main/docs/commands.md).\nTool reference links describe upstream commands; Artium controls availability, credentials and permissions.\n\n| Command | Purpose |\n| --- | --- |\n| `artium-axi` | Show identity, roles and available tools. |\n| `artium-axi --help [<command>]` | Show local client or tool-entry help without authentication. |\n| `artium-axi --version` | Print the client package version. |\n| `artium-axi login --username <username> [--password-stdin]` | Sign in with a local account using protected password input. |\n| `artium-axi login --sso` | Sign in through browser approval of the terminal code. |\n| `artium-axi passwd [--password-stdin]` | Change the account password, then sign in again. |\n| `artium-axi logout` | Remove local tokens and attempt server-session revocation. |\n| `artium-axi whoami` | Show identity, roles, session expiry and server. |\n| `artium-axi tools` | List granted enabled tools with status and pinned versions. |\n| `artium-axi tools show <tool>` | Show one available tool, vetted upstream help and a first call. |\n| `artium-axi doctor` | Check the server, certificate, token, client version and cached tool health. |\n| `artium-axi update` | Download and verify the server client, replace this file and retain a .bak backup; npm installs use npm instead. |\n| `artium-axi download --operation <operation> --selector <selector> --type <type> --destination <absolute-new-path> [--transfer <id> --execute --confirm <exact-confirm>] [--password-stdin\\|--sso]` | Preview or explicitly verify and save administrator-enabled Hybrid Analysis archives, Check Point emails/attachments, Graph mail exports or BeyondTrust endpoint content; see `artium-axi download --help` for guards. |\n| `artium-axi setup --host <claude\\|codex\\|opencode\\|pi> [--hook] [--force]` | Install skills for the signed-in account's granted tools and an optional Claude Code hook. |\n| `artium-axi --managed-session <command> [<args>]` | Supply and persist caller-owned sessions through private pipes; see `artium-axi --managed-session --help`. |\n| `artium-axi falcon-axi [<args>]` | Run Falcon commands with managed credentials; [tool reference](https://github.com/knowttl/falcon-axi#readme). |\n| `artium-axi vectra-axi [<args>]` | Run Vectra commands with managed credentials; [tool reference](https://www.npmjs.com/package/@knowttl/vectra-axi). |\n| `artium-axi az-axi [<args>]` | Run Azure commands with the managed identity; [tool reference](https://www.npmjs.com/package/@knowttl/az-axi). |\n| `artium-axi mg-axi [<args>]` | Run Microsoft Graph commands with the managed identity; [tool reference](https://www.npmjs.com/package/@knowttl/mg-axi). |\n| `artium-axi ldap-axi [<args>]` | Read directory data with the managed LDAP bind identity; [tool reference](https://www.npmjs.com/package/@knowttl/ldap-axi). |\n| `artium-axi ado-axi [<args>]` | Run Azure DevOps commands with managed credentials; [tool reference](https://www.npmjs.com/package/@jeffreyhaen/ado-axi). |\n| `artium-axi awx-axi [<args>]` | Inspect AWX automation with managed credentials; [tool reference](https://www.npmjs.com/package/awx-axi). |\n| `artium-axi tenable-axi [<args>]` | Investigate Tenable One with managed API keys; [tool reference](https://www.npmjs.com/package/@knowttl/tenable-axi). |\n| `artium-axi hybrid-axi [<args>]` | Investigate Hybrid Analysis with a managed API key; [tool reference](https://www.npmjs.com/package/@knowttl/hybrid-axi). |\n| `artium-axi beyondtrust-axi [<args>]` | Inspect BeyondTrust PM Cloud Endpoint Privilege Management with managed credentials; [tool reference](https://www.npmjs.com/package/@knowttl/beyondtrust-axi). |\n| `artium-axi checkpoint-axi [<args>]` | Investigate Check Point Email Security with managed regional credentials; [tool reference](https://www.npmjs.com/package/@knowttl/checkpoint-axi). |\n| `artium-axi gh-axi [<args>]` | Read and update GitHub data with managed credentials; [tool reference](https://www.npmjs.com/package/gh-axi). |\n";
|
|
48612
48715
|
|
|
48613
48716
|
// src/cli/setup.ts
|
|
48614
48717
|
var hosts = {
|
|
@@ -49373,6 +49476,7 @@ async function download(args, output3, managed2) {
|
|
|
49373
49476
|
|
|
49374
49477
|
// src/cli/main.ts
|
|
49375
49478
|
var managed;
|
|
49479
|
+
var failureContext = "main";
|
|
49376
49480
|
for (const stream of [process.stdout, process.stderr]) {
|
|
49377
49481
|
stream.on("error", (error62) => {
|
|
49378
49482
|
if (error62.code !== "EPIPE") throw error62;
|
|
@@ -49572,26 +49676,35 @@ ${view}${toolsView(tools.data.tools)}`;
|
|
|
49572
49676
|
const { stdout, stderr, exitCode, truncated } = parsed.data;
|
|
49573
49677
|
if (truncated.stdout || truncated.stderr) output2("stderr", `artium-axi: output truncated (${["stdout", "stderr"].filter((stream) => truncated[stream]).join(", ")}).
|
|
49574
49678
|
`);
|
|
49679
|
+
failureContext = "rewriteSuggestions";
|
|
49575
49680
|
output2("stdout", rewriteSuggestions(stdout, command, truncated.stdout));
|
|
49576
49681
|
output2("stderr", rewriteSuggestions(stderr, command, truncated.stderr));
|
|
49682
|
+
if (exitCode !== 0 && client.requestId) output2("stderr", `${stderr && !stderr.endsWith("\n") ? "\n" : ""}artium-axi: request_id ${client.requestId}
|
|
49683
|
+
`);
|
|
49577
49684
|
process.exitCode = exitCode;
|
|
49578
49685
|
}
|
|
49579
49686
|
}
|
|
49580
|
-
function printError(
|
|
49687
|
+
function printError(error62) {
|
|
49688
|
+
const errorClass = error62 instanceof TypeError ? "TypeError" : error62 instanceof SyntaxError ? "SyntaxError" : error62 instanceof RangeError ? "RangeError" : error62 instanceof ReferenceError ? "ReferenceError" : error62 instanceof URIError ? "URIError" : error62 instanceof EvalError ? "EvalError" : error62 instanceof Error ? "Error" : "NonError";
|
|
49689
|
+
const response = errorResponse(error62 instanceof ArtiumError ? error62 : new ArtiumError(
|
|
49690
|
+
"INTERNAL_ERROR",
|
|
49691
|
+
`The CLI failed locally (${errorClass} in ${failureContext}).`,
|
|
49692
|
+
"Report the error class and function to the CLI maintainer. Check the previous call outcome before retrying."
|
|
49693
|
+
), "");
|
|
49581
49694
|
if (process.argv[2] === "download" || process.argv[2] === "--managed-session" && process.argv[3] === "download") {
|
|
49582
49695
|
output2("stdout", `warning: ${JSON.stringify(transferWarningFor(process.argv[process.argv.indexOf("--operation") + 1] ?? ""))}
|
|
49583
49696
|
`);
|
|
49584
49697
|
}
|
|
49585
49698
|
output2("stdout", `error:
|
|
49586
|
-
${Object.entries(response.error).map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`).join("\n")}
|
|
49699
|
+
${Object.entries(response.error).filter(([key, value]) => key !== "requestId" || value).map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`).join("\n")}
|
|
49587
49700
|
`);
|
|
49588
49701
|
process.exitCode = errors[response.error.code].exitCode;
|
|
49589
49702
|
}
|
|
49590
|
-
main(process.argv.slice(2)).catch(
|
|
49703
|
+
main(process.argv.slice(2)).catch(printError).then(() => {
|
|
49591
49704
|
try {
|
|
49592
49705
|
managed?.flush();
|
|
49593
49706
|
} catch {
|
|
49594
49707
|
managed = void 0;
|
|
49595
|
-
printError(
|
|
49708
|
+
printError(new ArtiumError("SECRET_IN_OUTPUT"));
|
|
49596
49709
|
}
|
|
49597
49710
|
});
|
package/package.json
CHANGED
|
@@ -74,9 +74,12 @@ Native preview, execute and exact confirmation gates still apply; there is no un
|
|
|
74
74
|
### Failures and next action
|
|
75
75
|
|
|
76
76
|
Artium errors are TOON on stdout with `error.code`, `source`, `message` and `next`; follow `next` rather than retrying blindly.
|
|
77
|
-
|
|
77
|
+
For a non-zero tool exit, keep the stderr `artium-axi: request_id <id>` line and quote that ID, the tool and time when asking an administrator for help; never include credentials or sensitive output.
|
|
78
|
+
Follow the [failed-call troubleshooting path](https://github.com/knowttl/artium-axi/blob/main/docs/runbook.md#troubleshoot-a-failed-tool-call) for administrator investigation, and check current state before retrying an unknown write outcome.
|
|
79
|
+
See the [output contract](https://github.com/knowttl/artium-axi/blob/main/README.md#toon-output-and-errors) for exit codes and upstream output handling.
|
|
78
80
|
|
|
79
81
|
Use the [generated error reference](https://github.com/knowttl/artium-axi/blob/main/docs/errors.md) for code-specific recovery and exit codes.
|
|
82
|
+
See the [credential diagnostic guidance](https://github.com/knowttl/artium-axi/blob/main/docs/runbook.md#scripted-administrator-sessions) for tool-code mappings and administrator troubleshooting.
|
|
80
83
|
|
|
81
84
|
## Commands
|
|
82
85
|
|