@knowttl/artium-axi 0.0.5 → 0.0.7
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 +107 -29
- package/bin/artium-axi.mjs +14509 -8175
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,8 +14,8 @@ Administrators manage accounts, roles, encrypted service credentials and audit r
|
|
|
14
14
|
The client follows AXI (Agent eXperience Interface) conventions for discovery, help and structured errors.
|
|
15
15
|
|
|
16
16
|
**Status: under construction.**
|
|
17
|
-
Falcon, Vectra, Azure, Graph and
|
|
18
|
-
See the [evidence ledger](docs/evidence-ledger.md) for the acceptance boundaries.
|
|
17
|
+
Falcon, Vectra, Azure, Graph, LDAP, Azure DevOps and AWX are wired into the production server entry point.
|
|
18
|
+
See the [evidence ledger](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/evidence-ledger.md) for the acceptance boundaries.
|
|
19
19
|
|
|
20
20
|
## Agent Ergonomics
|
|
21
21
|
|
|
@@ -96,7 +96,7 @@ artium-axi setup --host claude --hook
|
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
Use `--host codex`, `--host opencode` or `--host pi` without `--hook` for those hosts.
|
|
99
|
-
See [host paths and configuration overrides](docs/verification-s45.md) for installation locations.
|
|
99
|
+
See [host paths and configuration overrides](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-s45.md) for installation locations.
|
|
100
100
|
Setup requires the configured server URL and an authenticated account.
|
|
101
101
|
It fetches reviewed adaptations of the server's pinned upstream skills; command examples run through `artium-axi <tool>` using Artium-managed credentials.
|
|
102
102
|
Skills include granted tools that are disabled; running those tools still returns `TOOL_DISABLED`.
|
|
@@ -111,7 +111,7 @@ Artium-managed skills for tools no longer granted are retained and reported, not
|
|
|
111
111
|
Unmanaged standalone skills outside the current grants are left untouched and unreported.
|
|
112
112
|
Output lists one installed, unchanged or retained row per skill.
|
|
113
113
|
Keep the bundle at its installed path; rerun setup if it moves so recorded invocations are repaired.
|
|
114
|
-
See [host verification](docs/verification-s45.md) for recorded discovery checks and outstanding acceptance.
|
|
114
|
+
See [host verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-s45.md) for recorded discovery checks and outstanding acceptance.
|
|
115
115
|
|
|
116
116
|
## Other ways to install
|
|
117
117
|
|
|
@@ -209,6 +209,8 @@ The [credential standard](docs/credential-standard.md#9-hosted-contract-artium-a
|
|
|
209
209
|
| Azure (`az-axi`) | Entra tenant ID, application client ID, client secret or certificate private key and SHA-256 thumbprint, subscription IDs and optional workspace mapping. | `account list`; data-plane roles need their own permitted reads. |
|
|
210
210
|
| Microsoft Graph (`mg-axi`) | Entra tenant ID, application client ID, client secret or certificate private key and SHA-256 thumbprint, administrator-consented Graph application permissions. | `entra user list --limit 1`; other domains need their own permissions. |
|
|
211
211
|
| LDAP (`ldap-axi`) | Verified LDAPS or StartTLS URL, read-only bind identity and password, optional search base and private CA PEM. | `auth status`; binds once and reports the selected identity. |
|
|
212
|
+
| Azure DevOps (`ado-axi`) | Organization, optional default project and either a PAT or tenant ID, client ID and client secret. | `project list --limit 1`. |
|
|
213
|
+
| AWX (`awx-axi`) | Controller HTTPS origin and an existing personal access token. | `job list --limit 1`; job read permissions are required. |
|
|
212
214
|
|
|
213
215
|
#### Falcon
|
|
214
216
|
|
|
@@ -216,22 +218,25 @@ In the Falcon console, open **Support and resources > API clients and keys** and
|
|
|
216
218
|
Copy its client ID and secret and record its cloud region: `us-1`, `us-2`, `eu-1` or `us-gov-1`.
|
|
217
219
|
At `/admin/tools/falcon-axi`, enter `clientId`, `clientSecret` and `region`, with `memberCid` only when targeting a Flight Control member tenant.
|
|
218
220
|
Grant `Alerts:read` for detection reads, including the first-call example.
|
|
219
|
-
Grant additional scopes only for the domains you use, following the pinned [API client permission matrix](https://github.com/knowttl/falcon-axi/blob/v0.
|
|
221
|
+
Grant additional scopes only for the domains you use, following the pinned [API client permission matrix](https://github.com/knowttl/falcon-axi/blob/v0.5.0/README.md#api-client-permissions) and its offline `scopes` command.
|
|
220
222
|
For example, account reads need `Assets:read`, while CVE reads need `Vulnerabilities (Falcon Intelligence):read`, distinct from Spotlight vulnerability access.
|
|
221
223
|
NG-SIEM search requires `NGSIEM:write`; Identity Protection directory/timeline queries require `Identity Protection GraphQL:write` plus the documented read scopes, even though those queries read data.
|
|
222
224
|
These are optional domain requirements and do not justify granting other write or response scopes.
|
|
225
|
+
The pinned tool does not change hosts, detections, policies or identities and exposes no arbitrary REST or GraphQL requests.
|
|
226
|
+
Starting and stopping NG-SIEM search jobs are its only tenant-side effects; these investigation operations remain available regardless of the saved write switch.
|
|
223
227
|
Falcon's fixed `auth status` test reports local credential resolution, so also run `artium-axi falcon-axi detection list --limit 1` after enabling and granting the tool.
|
|
224
228
|
|
|
225
229
|
#### Vectra
|
|
226
230
|
|
|
227
|
-
Obtain the deployment's
|
|
231
|
+
Obtain the deployment's HTTPS origin; see [credential editor guidance](#browser-administration) for accepted input.
|
|
228
232
|
For QUX, select `kind=qux`, `apiVersion=2.5` and either `auth=token` with `token`, or `auth=oauth` with `clientId` and `clientSecret`.
|
|
229
233
|
QUX OAuth requires appliance release 9.1 or later; `applianceRelease` is optional release metadata.
|
|
230
234
|
For RUX, select `kind=rux`, `apiVersion=3.4`, `auth=oauth`, `clientId` and `clientSecret`; leave `applianceRelease` blank.
|
|
231
235
|
Create a QUX personal token under **My Profile** using a local account, or have a Vectra administrator create an OAuth API client under **Manage > API Clients** and record the displayed ID and secret.
|
|
232
236
|
Tokens inherit their user's rights and clients inherit their assigned role; grant read access to health and the Hosts, Accounts, Detections or other areas you need.
|
|
233
|
-
See [Vectra's credential issuance guidance](https://github.com/vectranetworks/vectraautomatedresponse#getting-a-vectra-api-token-for-vectra-detect-api-v2) and the pinned [Vectra configuration contract](https://github.com/knowttl/vectra-axi/tree/v0.1.
|
|
234
|
-
|
|
237
|
+
See [Vectra's credential issuance guidance](https://github.com/vectranetworks/vectraautomatedresponse#getting-a-vectra-api-token-for-vectra-detect-api-v2) and the pinned [Vectra configuration contract](https://github.com/knowttl/vectra-axi/tree/v0.1.7#configuration) for deployment-specific requirements.
|
|
238
|
+
For a credential-specific private CA, paste its PEM contents into `caBundle`; enter no server file path.
|
|
239
|
+
For shared trust across tools, follow the [private CA runbook](docs/runbook.md#tls-inspection-and-private-upstream-cas).
|
|
235
240
|
Keep Native settings empty for read-only use; optional writes need the native operation allowlist and upstream permissions.
|
|
236
241
|
Save, run **Test credential**, enable and grant the tool, then run `artium-axi vectra-axi detection list --limit 1` to check the intended read domain.
|
|
237
242
|
|
|
@@ -316,7 +321,7 @@ Delegated permissions and interactive `User.Read` consent do not authorize this
|
|
|
316
321
|
| Identity providers | `IdentityProvider.Read.All` |
|
|
317
322
|
| Lifecycle workflows | `LifecycleWorkflows.Read.All` |
|
|
318
323
|
|
|
319
|
-
For other domains, use the pinned [Graph access and licence guidance](https://github.com/knowttl/mg-axi/blob/v0.1.
|
|
324
|
+
For other domains, use the pinned [Graph access and licence guidance](https://github.com/knowttl/mg-axi/blob/v0.1.10/docs/graph-coverage.md) and the command's permission requirements rather than granting every permission.
|
|
320
325
|
Licences still apply: PIM and risk/governance features can fail despite consent, and some commands support only delegated identities.
|
|
321
326
|
Do not add `User.Export.All` just to make a read-only setup pass; data-policy export is a write-class permission.
|
|
322
327
|
|
|
@@ -325,7 +330,7 @@ For a certificate, choose `auth=certificate`, enter the PEM in `privateKey` and
|
|
|
325
330
|
Leave `allowDeviceCode`, `preview`, `sensitiveAreas` and `writes` at their defaults for the initial read-only setup.
|
|
326
331
|
Save, run **Test credential**, follow the [activation requirements](#browser-administration), enable and grant the tool, then run `artium-axi mg-axi entra user list --limit 1`.
|
|
327
332
|
Hosted application mode acquires tokens silently; do not run upstream `auth login` or supply `--scopes` through Artium.
|
|
328
|
-
See the [evidence ledger](docs/evidence-ledger.md) for recorded local and
|
|
333
|
+
See the [evidence ledger](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/evidence-ledger.md) for recorded local and owner live acceptance; credential setup instructions do not establish acceptance for a new host or every upstream operation.
|
|
329
334
|
|
|
330
335
|
#### LDAP
|
|
331
336
|
|
|
@@ -340,7 +345,8 @@ At `/admin/tools/ldap-axi`, enter `url`, choose `auth=simple`, and enter `bindDn
|
|
|
340
345
|
Use `ldaps://<directory-host>:636` with `startTls` left at the default (unset) or explicitly `false`, or `ldap://<directory-host>:389` with `startTls=true`.
|
|
341
346
|
Saving an `ldaps://` URL with `startTls=true` is rejected with `INVALID_INPUT` and the message `startTls must be false for this URL.`
|
|
342
347
|
Plaintext simple bind, anonymous authentication, disabled certificate verification and caller-supplied connection or credential overrides are refused.
|
|
343
|
-
|
|
348
|
+
For a credential-specific private CA, supply its PEM contents in `caFile`, not a server file path.
|
|
349
|
+
For shared trust across tools, follow the [private CA runbook](docs/runbook.md#tls-inspection-and-private-upstream-cas).
|
|
344
350
|
The multi-line `caFile` editor preserves newlines through saving and private CA file materialization for each call.
|
|
345
351
|
Artium's CLI has no credential-save command.
|
|
346
352
|
Optional `base` limits the search context; otherwise the pinned tool discovers the directory's default naming context.
|
|
@@ -350,9 +356,60 @@ Enter the password itself in the form, never a SecretRef or password-file path.
|
|
|
350
356
|
Save, run **Test credential**, enable the tool, grant it to a role, then run `artium-axi ldap-axi user list --limit 1` to check directory read permissions.
|
|
351
357
|
**Test credential** runs `auth status`, which performs one bind; failed credentials can count toward directory account lockout limits.
|
|
352
358
|
LDAP is read-only by design and has no editable native write settings.
|
|
359
|
+
LDAP 0.2.0 adds `computer list`, `computer show <identifier-or-dn>` and `server` reads through the same managed identity.
|
|
360
|
+
Computer reads use AD machine accounts or the upstream's stated LDAPv3 device fallback; `server` reports advertised rootDSE capabilities and limits.
|
|
353
361
|
The [LDAP inventory](tools/inventories/ldap-axi.json) owns the supported commands, blocked overrides and resource requirements.
|
|
354
362
|
Local fake-directory and offline profile checks do not establish live directory acceptance.
|
|
355
363
|
|
|
364
|
+
#### Azure DevOps
|
|
365
|
+
|
|
366
|
+
Artium uses the [pinned](tools/package.json) `@jeffreyhaen/ado-axi` release without upstream modifications.
|
|
367
|
+
At `/admin/tools/ado-axi`, enter `org`, optional `project`, choose `auth=pat`, and paste the PAT itself into `token`.
|
|
368
|
+
Organization-root URLs such as `https://dev.azure.com/<org>` and `https://<org>.visualstudio.com` normalize to the organization name.
|
|
369
|
+
Artium encrypts the PAT in its credential store and injects it through a private per-call profile and environment variable.
|
|
370
|
+
Do not enter a SecretRef or environment-variable name.
|
|
371
|
+
Create a dedicated PAT scoped to the organization with Work Items, Code and Build read permissions as needed for the commands you use.
|
|
372
|
+
Grant corresponding read-write permissions only for intended mutations; a write switch never grants Azure DevOps permissions.
|
|
373
|
+
For service principal authentication, choose `auth=client-secret` and enter `tenantId`, `clientId` and `clientSecret` instead of `token`.
|
|
374
|
+
Add the service principal as a user in the Azure DevOps organization, in the organization's Entra tenant, and grant the required project permissions before testing.
|
|
375
|
+
Artium acquires and caches an Azure DevOps access token with client credentials and supplies it through a restricted per-call `az` stand-in.
|
|
376
|
+
The stand-in answers only the pinned tool's Azure DevOps token request; no Azure CLI sign-in or device flow is used.
|
|
377
|
+
Save, run **Test credential**, enable the tool, grant it to a role, then run `artium-axi ado-axi project list --limit 1`.
|
|
378
|
+
|
|
379
|
+
Writes are off by default; follow [write-access administration](docs/runbook.md#roles-credentials-and-health) to enable them.
|
|
380
|
+
Artium classifies every command using the reviewed [ADO inventory](tools/inventories/ado-axi.json), which binds the routing review to upstream source digests.
|
|
381
|
+
Artium manages `--org`, `--profile` and `--config`; those overrides and the top-level `config` and `update` commands are refused.
|
|
382
|
+
Use `--project` to select another project within the managed organization.
|
|
383
|
+
The `api` command accepts relative paths and GET only, even when writes are enabled; body flags and absolute URLs are refused.
|
|
384
|
+
All commands refuse repeated flags, stdin and files.
|
|
385
|
+
Use `pipeline watch --timeout 50` or less to stay within the runner's call timeout.
|
|
386
|
+
Writes are journaled by Artium only; see [audit action classification](#audit-screen-and-api).
|
|
387
|
+
For an interrupted write, run the returned read-back command and follow its inspection guidance before retrying.
|
|
388
|
+
Local fake-service checks do not establish live organization acceptance.
|
|
389
|
+
|
|
390
|
+
#### AWX
|
|
391
|
+
|
|
392
|
+
Artium bundles the [pinned](tools/package.json) `awx-axi` package without upstream modifications.
|
|
393
|
+
At `/admin/tools/awx-axi`, enter the controller HTTPS `origin` and paste an existing personal access token into `token`.
|
|
394
|
+
Enter the token itself, never a SecretRef, environment-variable name, password or file path.
|
|
395
|
+
Artium encrypts the token and injects a SecretRef through its private per-call profile; it does not mint or revoke AWX tokens.
|
|
396
|
+
Save, run **Test credential**, enable the tool and grant it to a role, then run `artium-axi awx-axi job list --limit 1`.
|
|
397
|
+
**Test credential** reads one job using the managed token and reports structured authentication, network and TLS diagnostics.
|
|
398
|
+
For a private certificate, inspect and trust it through the tool page; trust is scoped to the saved credential and host.
|
|
399
|
+
HTTP and TLS-verification bypasses are refused.
|
|
400
|
+
|
|
401
|
+
Writes are off by default.
|
|
402
|
+
The native setting `{"allowWrites": true}` permits only operational writes, which still require upstream `--confirm`: launching, canceling or relaunching runs, approving or denying workflow approvals, project and inventory-source syncs, and notification-template tests.
|
|
403
|
+
Configuration writes, deletes and security writes are always blocked, including resource creation and editing, associations, role grants and token operations.
|
|
404
|
+
Artium never enables AWX's separate configuration, deletion or security write gates.
|
|
405
|
+
Token permissions remain an additional AWX-side limit; the write switch does not grant AWX permissions.
|
|
406
|
+
The generated [AWX inventory](tools/inventories/awx-axi.json) classifies every command and records the reviewed upstream source digests.
|
|
407
|
+
Artium manages origin, TLS and credential selectors, and refuses standalone auth login/logout, setup, config, profile and update commands.
|
|
408
|
+
Stdin, file uploads, server file paths and `@file` values are unsupported; use inline non-secret launch parameters.
|
|
409
|
+
Use `job watch --timeout 50` or less to stay within the runner timeout.
|
|
410
|
+
For an interrupted write, inspect current state using the returned read-back guidance before retrying.
|
|
411
|
+
Local fake-service checks do not establish live controller acceptance.
|
|
412
|
+
|
|
356
413
|
### Build from source
|
|
357
414
|
|
|
358
415
|
The source toolchain requires Node **24.11 or later** and **pnpm 10.22.0**.
|
|
@@ -370,7 +427,8 @@ After signing in, run `node dist/cli/artium-axi.mjs setup --host codex` to insta
|
|
|
370
427
|
The root package remains private for server development; `pnpm build:npm` stages the separate public client package in `dist/npm` using the root package version.
|
|
371
428
|
Run `npm pack --dry-run ./dist/npm` to inspect the client tarball before release.
|
|
372
429
|
Only the bundled CLI, skill, README, LICENSE, NOTICE and client package metadata are included.
|
|
373
|
-
|
|
430
|
+
Release automation also publishes the pinned server image to `ghcr.io/knowttl/artium-axi:<release-tag>` with OCI labels and provenance.
|
|
431
|
+
See [release publishing](docs/runbook.md#npm-client-releases) for owner setup and image digest and attestation verification before deployment.
|
|
374
432
|
|
|
375
433
|
## Usage
|
|
376
434
|
|
|
@@ -386,7 +444,7 @@ See [npm client releases](docs/runbook.md#npm-client-releases) for automated pub
|
|
|
386
444
|
| `artium-axi whoami` | Show identity, roles, access expiry and server URL. |
|
|
387
445
|
| `artium-axi tools` | List enabled runtime tools granted through your roles. |
|
|
388
446
|
| `artium-axi tools show falcon-axi` | Show cached status, vetted pinned help and a first-call example. |
|
|
389
|
-
| `artium-axi doctor` | Check server address, certificate, token, CLI version and cached tool health. |
|
|
447
|
+
| `artium-axi doctor` | Check server address, certificate, token, CLI version and cached tool health, with a five-second deadline per request. Stop dependent probes after address or TLS connection failure. |
|
|
390
448
|
| `artium-axi logout` | Remove local tokens and attempt server-session revocation. |
|
|
391
449
|
| `artium-axi setup --host claude --hook` | Install your granted skills and optional Claude Code hook after sign-in. |
|
|
392
450
|
| `artium-axi falcon-axi detection list` | Run a Falcon read through the managed adapter. |
|
|
@@ -395,6 +453,9 @@ See [npm client releases](docs/runbook.md#npm-client-releases) for automated pub
|
|
|
395
453
|
| `artium-axi ldap-axi user list --limit 1` | Run a bounded directory read through the managed adapter. |
|
|
396
454
|
|
|
397
455
|
Add `--help` to a local command to inspect its accepted flags.
|
|
456
|
+
Top-level help lists command purposes.
|
|
457
|
+
Unknown or unexpected local commands, arguments and flags are rejected before configuration, private-channel reads or network access, with valid choices for the relevant command.
|
|
458
|
+
Rejected tokens are named, except for `login` and `passwd` input, which is identified by position without printing its value because it may contain a password.
|
|
398
459
|
Tool help has two boundaries:
|
|
399
460
|
|
|
400
461
|
```sh
|
|
@@ -404,7 +465,8 @@ artium-axi falcon-axi --help
|
|
|
404
465
|
|
|
405
466
|
The first prints local Artium help without signing in or contacting the server.
|
|
406
467
|
The second forwards `--help` through the authenticated upstream adapter.
|
|
407
|
-
A bare
|
|
468
|
+
A bare `artium-axi falcon-axi` reads recent detections; use `artium-axi falcon-axi --help` for its command list.
|
|
469
|
+
A bare Vectra invocation shows upstream help; `artium-axi az-axi` and `artium-axi az-axi home` run the Azure dashboard with ARM authentication.
|
|
408
470
|
A bare `artium-axi ldap-axi` shows directory discovery with managed-credential guidance.
|
|
409
471
|
Arguments after a tool name belong to upstream, subject to adapter restrictions on credential, configuration and file paths.
|
|
410
472
|
Unknown Azure flags return `INVALID_INPUT` with the flag name, valid flags and a hosted help command.
|
|
@@ -431,7 +493,7 @@ Details read bundled manifests and stored health without fetching credentials or
|
|
|
431
493
|
Discovery and administration show the server's bundled tool versions, as defined by the [API contract](src/shared/api.ts).
|
|
432
494
|
|
|
433
495
|
Upstream calls preserve stdout, stderr and nonzero exit codes.
|
|
434
|
-
For Falcon, Vectra, Azure, Graph and
|
|
496
|
+
For Falcon, Vectra, Azure, Graph, LDAP, Azure DevOps and AWX, recognized TOON or JSON root `help` suggestions, plain upstream help and bundled tool-detail help use `artium-axi <tool>` commands, including examples originally invoking `npx -y @knowttl/<tool>`.
|
|
435
497
|
Recognized flag listings and command suggestions omit managed flags declared in each pinned [tool inventory](tools/inventories/)'s `unsafeOverrides`, including Graph profile, config and scopes selectors.
|
|
436
498
|
LDAP home output lists hosted commands, and recognized connection and TLS recovery hints direct callers to an administrator to update the [stored LDAP credentials](#ldap).
|
|
437
499
|
Unrelated content, literal argument values, unknown formats and truncated streams remain unchanged.
|
|
@@ -485,6 +547,10 @@ The last enabled administrator cannot be disabled, demoted or archived.
|
|
|
485
547
|
Profile, role and archive changes use revision checks; reload stale forms rather than overwriting newer changes.
|
|
486
548
|
Session revocation and administration changes commit with their audit records.
|
|
487
549
|
After 15 minutes without identity confirmation, administration mutations require reauthentication.
|
|
550
|
+
After a tool credential test fails TLS verification, an administrator can inspect its saved endpoint’s certificate and trust it for that credential in one confirmation.
|
|
551
|
+
The UI shows full fingerprints, warnings, expiry and removable trust; hostname and validity verification remain enabled.
|
|
552
|
+
A missing intermediate is fetched automatically only when its chain reaches an already-trusted root.
|
|
553
|
+
See [credential certificate trust](docs/runbook.md#trusting-one-tool-from-the-administration-ui) for inspection, rotation and the network-path warning.
|
|
488
554
|
Administration and account screens share a navigation menu.
|
|
489
555
|
Signed-in screens have a header showing identity, sign-in source and sign-out.
|
|
490
556
|
On administration screens, the header also shows the remaining confirmation window.
|
|
@@ -514,21 +580,29 @@ Archived users cannot be enabled through the UI or API; use Disable for temporar
|
|
|
514
580
|
Credential editors pre-fill non-secret values and never return stored secrets.
|
|
515
581
|
Vectra and Graph use schema-generated fields and validation from their published [AXI credential standard](docs/credential-standard.md) profile schemas.
|
|
516
582
|
Enter secret values themselves, not SecretRefs; leave unused fields blank and enter object fields as advanced JSON and string lists one value per line.
|
|
517
|
-
|
|
518
|
-
|
|
583
|
+
Profile-backed credential saves normalize safe differences only when the schema rejects the original value; already valid values, including secrets, remain byte for byte unchanged.
|
|
584
|
+
Rejected strings can have surrounding whitespace removed, including nested object and list values; secret interior whitespace is preserved.
|
|
585
|
+
For Vectra, `origin` accepts surrounding whitespace, a trailing slash, uppercase scheme or host and an explicit default port, saving a canonical HTTPS origin.
|
|
586
|
+
Paths, queries, fragments, embedded credentials and HTTP origins remain invalid.
|
|
587
|
+
Rejected profile input returns `INVALID_INPUT` with field names and failing schema constraints, including string lengths, array bounds, uniqueness and unsupported fields, without echoing submitted values.
|
|
588
|
+
When the authentication branch is identifiable, guidance reports its failures and conflicting field names without instructions from other branches; independent errors are reported together.
|
|
589
|
+
Ambiguous alternatives receive field-combination guidance.
|
|
590
|
+
See [Vectra credential setup](#vectra) for private CA input and shared trust.
|
|
519
591
|
The form exposes the schema's full requirements, including conditional requirements for the chosen authentication kind.
|
|
520
592
|
Azure uses guided source-identity fields because the host brokers resource tokens separately.
|
|
521
593
|
Azure and Graph certificate editors accept one PEM file containing one certificate and its matching unencrypted private key and calculate the fingerprint automatically.
|
|
522
594
|
See the [hosted contract](docs/credential-standard.md#9-hosted-contract-artium-axi) for profile injection.
|
|
523
|
-
Falcon has guided fields
|
|
595
|
+
Falcon has guided fields; see its [current credential handling](docs/credential-standard.md#per-tool-host-facing-schemas).
|
|
524
596
|
Browser saves keep native settings and retain blank stored secrets for the same identity.
|
|
525
|
-
|
|
597
|
+
Identity changes require new secrets as defined by the [credential-save contract](src/shared/api.ts) (`adminToolRoutes.save`).
|
|
526
598
|
Select **Test after saving** to save and report a harmless credential check inline.
|
|
599
|
+
After saving, the page reports applied normalizations and reloads stored non-secret values; secret notices name only the field and change, never the value.
|
|
527
600
|
See the [credential-save contract](src/shared/api.ts) (`adminToolRoutes.save`) for API inputs and complete replacement semantics.
|
|
528
601
|
See [credential rotation](docs/runbook.md#roles-credentials-and-health).
|
|
529
602
|
Native settings also replace the entire object; `{}` clears it.
|
|
530
603
|
Credential changes clear cached health, and background checks run every 15 minutes for enabled configured tools.
|
|
531
604
|
Use **Test credential** for a current fixed read before enabling a configured tool.
|
|
605
|
+
For failed tests, follow the [credential diagnostic guidance](docs/runbook.md#scripted-administrator-sessions) and the [error reference](docs/errors.md).
|
|
532
606
|
Graph tests read at most one user through `entra user list --limit 1`.
|
|
533
607
|
For a new installation, follow [Graph credential setup](#microsoft-graph) and obtain the required permission results and maintainer approval before enabling Graph on a running installation.
|
|
534
608
|
|
|
@@ -551,7 +625,7 @@ Multiple enabled providers appear on both the sign-in page and CLI approval page
|
|
|
551
625
|
Assign generic-provider users direct artium roles or configure claim rules for tool access.
|
|
552
626
|
Generic rules accept any exact top-level claim name, such as `groups` or `custom.claim`, and match a string or a string in an array against the case-sensitive rule value.
|
|
553
627
|
Dots are literal claim-name characters, not nested paths; numbers, booleans and objects do not match.
|
|
554
|
-
See [generic OIDC verification](docs/verification-p5a.md) for the approved scope split, fake-provider evidence and pending maintainer live acceptance.
|
|
628
|
+
See [generic OIDC verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p5a.md) for the approved scope split, fake-provider evidence and pending maintainer live acceptance.
|
|
555
629
|
|
|
556
630
|
Provider credentials use the encrypted store; their secrets are never returned in pages, API metadata or audit records.
|
|
557
631
|
Non-secret fields are pre-filled; leave secrets blank to keep them for the same tenant, client and authentication method.
|
|
@@ -573,13 +647,13 @@ The users table and signed-in header identify designated accounts.
|
|
|
573
647
|
Removing designation revokes that account's browser and CLI sessions; demotion also clears designation, and claiming an SSO link removes it.
|
|
574
648
|
When any SSO provider is enabled, only designated local administrators may use password sign-in, password confirmation or password changes, through either browser or bearer routes.
|
|
575
649
|
Fresh installations designate no accounts automatically and keep providers disabled.
|
|
576
|
-
See [break-glass verification](docs/verification-p3c2.md) for local-password policy evidence and [P3 activation verification](docs/verification-p3c2b.md) for activation and complete fake-provider browser acceptance.
|
|
650
|
+
See [break-glass verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p3c2.md) for local-password policy evidence and [P3 activation verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p3c2b.md) for activation and complete fake-provider browser acceptance.
|
|
577
651
|
On an Entra provider page, add, edit or remove role rules mapping an exact, case-sensitive Entra `roles` claim value to an artium role.
|
|
578
652
|
Generic provider pages offer the same rule editor with a claim-name field.
|
|
579
653
|
Each rule's Who matches link opens the enabled, unarchived users whose last successful sign-in claims match that provider, issuer, claim name and value.
|
|
580
654
|
Counts refresh on page reload and include matches for new rules before the next role sync.
|
|
581
655
|
These saved claims are not a live directory query; users without recorded sign-in claims are unknown.
|
|
582
|
-
See the [upgrade runbook](docs/runbook.md#backup-restore-and-upgrade-rollback) for existing-identity compatibility and [claim-rule verification](docs/verification-p5b.md) for local evidence and pending maintainer live acceptance.
|
|
656
|
+
See the [upgrade runbook](docs/runbook.md#backup-restore-and-upgrade-rollback) for existing-identity compatibility and [claim-rule verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p5b.md) for local evidence and pending maintainer live acceptance.
|
|
583
657
|
The target role supplies tool access; rules never grant administrator capability.
|
|
584
658
|
Create roles and grant their tools on **Roles** first.
|
|
585
659
|
Every rule change requires the [confirmation described under browser administration](#browser-administration) and is audited atomically; stale edits require reloading the page.
|
|
@@ -601,7 +675,7 @@ Claiming atomically binds the immutable provider identity, consumes the invitati
|
|
|
601
675
|
Linking preserves the existing user id, username, display name, administrator flag and history, removes the local password and revokes prior browser and CLI sessions.
|
|
602
676
|
An existing identity or username is never automatically linked; expired, revoked, replaced or claimed links cannot grant access.
|
|
603
677
|
Claim, link, role-sync and sign-in audit events commit with the account and session changes.
|
|
604
|
-
See [browser SSO protocol verification](docs/verification-p3b.md) and [SSO reauthentication verification](docs/verification-p3c.md) and [P3 activation verification](docs/verification-p3c2b.md) for fake-provider evidence and pending maintainer live acceptance.
|
|
678
|
+
See [browser SSO protocol verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p3b.md) and [SSO reauthentication verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p3c.md) and [P3 activation verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p3c2b.md) for fake-provider evidence and pending maintainer live acceptance.
|
|
605
679
|
For CLI SSO, set `ARTIUM_AXI_URL` to this server and run `artium-axi login --sso`.
|
|
606
680
|
Open the displayed `/device` URL in any browser, enter the terminal code, choose an enabled provider and complete a fresh sign-in, then review the requesting IP and UTC time before choosing **Approve**.
|
|
607
681
|
Approve only a request you started on a device you control, with a code that matches your terminal; never approve a code someone sends you.
|
|
@@ -615,7 +689,7 @@ Approve the returned code through `/device` after a fresh provider sign-in as th
|
|
|
615
689
|
Poll `/v1/auth/reauth` with the same access token and JSON `{ "deviceCode": "<deviceCode>" }`, waiting the returned `intervalMs` milliseconds between polls, until it returns a recent-auth `ticket` and `expiresAt` instead of `status: pending`.
|
|
616
690
|
Send the ticket in `x-artium-reauth-ticket` on administration requests; it authorizes only the initiating CLI family and cannot extend its lifetime.
|
|
617
691
|
Denial, expiry or revocation prevents ticket issuance; approval codes are single use.
|
|
618
|
-
See [CLI device sign-in verification](docs/verification-p4a.md) for recorded fake-provider evidence and bearer reauthentication coverage.
|
|
692
|
+
See [CLI device sign-in verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-p4a.md) for recorded fake-provider evidence and bearer reauthentication coverage.
|
|
619
693
|
|
|
620
694
|
### Audit screen and API
|
|
621
695
|
|
|
@@ -642,6 +716,7 @@ Device approval and refusal emit `device-approve` and `device-deny` events, with
|
|
|
642
716
|
Each `run-terminal` record uses `action` to report `write` when the native tool journal contains valid JSON object records for that run, or `read` when a successful run leaves its supported journal absent or empty.
|
|
643
717
|
This records journal activity, including mutation intents, rather than guaranteeing that a remote change succeeded.
|
|
644
718
|
Pinned Falcon and LDAP runs report `read` from their inventories' read-only declarations, including normal runs and health checks.
|
|
719
|
+
ADO and AWX use host classification: reads report `read`, successful write calls report `write`, and failed or interrupted writes report `unknown`.
|
|
645
720
|
For tools with native journals, failures without journal records and malformed or unreadable evidence report `unknown`; recovered interrupted runs also report `unknown`.
|
|
646
721
|
See the [API contract](src/shared/api.ts) and [retention and export runbook](docs/runbook.md#retention-and-export).
|
|
647
722
|
|
|
@@ -697,7 +772,7 @@ The optional fields `status: "authenticated"`, `accessExpiresAt` and `familyExpi
|
|
|
697
772
|
The caller owns expiry policy, refresh serialization across processes and secure persistence.
|
|
698
773
|
Managed mode supports `login`, the home view, `whoami`, `tools`, `tools show`, `doctor` and tool commands.
|
|
699
774
|
`passwd`, `logout` and `setup` are refused before any network call; ordinary sign-in and its server-version warning remain unchanged without the flag.
|
|
700
|
-
Help is available without private channels through `artium-axi --help
|
|
775
|
+
Help is available without private channels through `artium-axi --help`; use `artium-axi --managed-session --help` or `artium-axi login --help` for the pipe protocol.
|
|
701
776
|
|
|
702
777
|
To obtain the first session, run `artium-axi --managed-session login --username <username> --password-stdin` with the password on protected inherited stdin, or `artium-axi --managed-session login --sso` for browser approval.
|
|
703
778
|
Login does not read or require fd 3; it requires a writable private pipe or socket on fd 4 before contacting the server.
|
|
@@ -736,6 +811,7 @@ Missing or closed descriptors, invalid JSON and mismatched server bindings fail
|
|
|
736
811
|
| `ARTIUM_AXI_DATABASE_FILE` | SQLite database path; default `/data/artium.db`. |
|
|
737
812
|
| `ARTIUM_AXI_MASTER_KEY_FILE` | Initial or explicit master-key file containing exactly 32 raw bytes; takes precedence over other key sources. |
|
|
738
813
|
| `ARTIUM_AXI_MASTER_KEY` | Alternative canonical base64 encoding of exactly 32 key bytes. |
|
|
814
|
+
| `ARTIUM_AXI_EXTRA_CA_FILE` | Optional readable PEM bundle of public CA certificates for upstream TLS, including TLS inspection; mounted read-only. Loaded at startup; see the [private CA runbook](docs/runbook.md#tls-inspection-and-private-upstream-cas). |
|
|
739
815
|
| `ARTIUM_AXI_ADMIN_USERNAME` | First-start local administrator username. |
|
|
740
816
|
| `ARTIUM_AXI_ADMIN_PASSWORD_FILE` | UTF-8 file containing the exact first-start password, without an added newline. |
|
|
741
817
|
| `ARTIUM_AXI_TRUSTED_PROXIES` | Comma-separated verified proxy source IP addresses; default trusts none. |
|
|
@@ -786,12 +862,14 @@ The runner uses argument arrays without a shell, a restricted child environment,
|
|
|
786
862
|
Known injected secrets are scanned in raw, JSON-escaped, base64, base64url and URL-encoded output, including beyond capture limits; a match discards both streams.
|
|
787
863
|
Exact-value scanning cannot identify unknown tokens minted upstream.
|
|
788
864
|
Heap and address-space limits are not complete process isolation: descendants starting a new session escape the runner's process group.
|
|
789
|
-
See [runner verification and limitations](docs/verification-s09-10.md) and [secret-scanner evidence](docs/verification-s07.md).
|
|
865
|
+
See [runner verification and limitations](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-s09-10.md) and [secret-scanner evidence](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-s07.md).
|
|
790
866
|
|
|
791
867
|
## Development & Testing
|
|
792
868
|
|
|
869
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for local no-mistakes delivery, container acceptance and the alias deprecation policy.
|
|
870
|
+
|
|
793
871
|
Use Linux with the [source toolchain](#build-from-source), OpenSSL, Python 3, curl and sha256sum.
|
|
794
|
-
Container acceptance additionally requires Docker and the BuildKit prerequisites described in the [container evidence](docs/verification-s20-21.md).
|
|
872
|
+
Container acceptance additionally requires Docker and the BuildKit prerequisites described in the [container evidence](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-s20-21.md).
|
|
795
873
|
`pnpm test:containers` starts a private BuildKit worker with `--privileged`; hosts that forbid privileged containers cannot run this check and must record container acceptance as unverified.
|
|
796
874
|
|
|
797
875
|
```sh
|
|
@@ -801,7 +879,7 @@ pnpm test:containers
|
|
|
801
879
|
```
|
|
802
880
|
|
|
803
881
|
`pnpm check` verifies generated error-reference freshness, strict type checking, parser/schema inventory freshness, the Vitest suite, compilation and the AXI/distribution checklist.
|
|
804
|
-
See [checklist verification](docs/verification-s46.md) for the fake-only download, authentication, setup and first-call checks.
|
|
882
|
+
See [checklist verification](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/verification-s46.md) for the fake-only download, authentication, setup and first-call checks.
|
|
805
883
|
It refuses unverified host platforms.
|
|
806
884
|
|
|
807
885
|
The [Vitest configuration](vitest.config.ts) separates unit and integration projects.
|
|
@@ -845,4 +923,4 @@ Symlinks, unreadable files and BOM-marked UTF-16/UTF-32 assets fail rather than
|
|
|
845
923
|
Diagnostics report location (with one-based columns in the original text's UTF-16 code units) and normalized entry number without secret excerpts, and redact labels whose paths match a term using the same folding rule.
|
|
846
924
|
The scan cannot guarantee absence of unknown sensitive values and does not approve publication.
|
|
847
925
|
|
|
848
|
-
Further operational guidance lives in the [runbook](docs/runbook.md); local implementation and deferred live acceptance are tracked in the [evidence ledger](docs/evidence-ledger.md).
|
|
926
|
+
Further operational guidance lives in the [runbook](docs/runbook.md); local implementation and deferred live acceptance are tracked in the [evidence ledger](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/evidence-ledger.md).
|