@knowttl/artium-axi 0.0.6 → 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.
Files changed (3) hide show
  1. package/README.md +46 -10
  2. package/bin/artium-axi.mjs +13657 -8519
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -14,7 +14,7 @@ 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, LDAP and Azure DevOps are wired into the production server entry point.
17
+ Falcon, Vectra, Azure, Graph, LDAP, Azure DevOps and AWX are wired into the production server entry point.
18
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
@@ -209,7 +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 personal access token (PAT). | `project list --limit 1`. |
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. |
213
214
 
214
215
  #### Falcon
215
216
 
@@ -217,10 +218,12 @@ In the Falcon console, open **Support and resources > API clients and keys** and
217
218
  Copy its client ID and secret and record its cloud region: `us-1`, `us-2`, `eu-1` or `us-gov-1`.
218
219
  At `/admin/tools/falcon-axi`, enter `clientId`, `clientSecret` and `region`, with `memberCid` only when targeting a Flight Control member tenant.
219
220
  Grant `Alerts:read` for detection reads, including the first-call example.
220
- Grant additional scopes only for the domains you use, following the pinned [API client permission matrix](https://github.com/knowttl/falcon-axi/blob/v0.3.0/README.md#api-client-permissions) and its offline `scopes` command.
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.
221
222
  For example, account reads need `Assets:read`, while CVE reads need `Vulnerabilities (Falcon Intelligence):read`, distinct from Spotlight vulnerability access.
222
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.
223
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.
224
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.
225
228
 
226
229
  #### Vectra
@@ -231,7 +234,7 @@ QUX OAuth requires appliance release 9.1 or later; `applianceRelease` is optiona
231
234
  For RUX, select `kind=rux`, `apiVersion=3.4`, `auth=oauth`, `clientId` and `clientSecret`; leave `applianceRelease` blank.
232
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.
233
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.
234
- 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.5#configuration) for deployment-specific requirements.
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.
235
238
  For a credential-specific private CA, paste its PEM contents into `caBundle`; enter no server file path.
236
239
  For shared trust across tools, follow the [private CA runbook](docs/runbook.md#tls-inspection-and-private-upstream-cas).
237
240
  Keep Native settings empty for read-only use; optional writes need the native operation allowlist and upstream permissions.
@@ -318,7 +321,7 @@ Delegated permissions and interactive `User.Read` consent do not authorize this
318
321
  | Identity providers | `IdentityProvider.Read.All` |
319
322
  | Lifecycle workflows | `LifecycleWorkflows.Read.All` |
320
323
 
321
- For other domains, use the pinned [Graph access and licence guidance](https://github.com/knowttl/mg-axi/blob/v0.1.7/docs/graph-coverage.md) and the command's permission requirements rather than granting every permission.
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.
322
325
  Licences still apply: PIM and risk/governance features can fail despite consent, and some commands support only delegated identities.
323
326
  Do not add `User.Export.All` just to make a read-only setup pass; data-policy export is a write-class permission.
324
327
 
@@ -353,6 +356,8 @@ Enter the password itself in the form, never a SecretRef or password-file path.
353
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.
354
357
  **Test credential** runs `auth status`, which performs one bind; failed credentials can count toward directory account lockout limits.
355
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.
356
361
  The [LDAP inventory](tools/inventories/ldap-axi.json) owns the supported commands, blocked overrides and resource requirements.
357
362
  Local fake-directory and offline profile checks do not establish live directory acceptance.
358
363
 
@@ -365,6 +370,10 @@ Artium encrypts the PAT in its credential store and injects it through a private
365
370
  Do not enter a SecretRef or environment-variable name.
366
371
  Create a dedicated PAT scoped to the organization with Work Items, Code and Build read permissions as needed for the commands you use.
367
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.
368
377
  Save, run **Test credential**, enable the tool, grant it to a role, then run `artium-axi ado-axi project list --limit 1`.
369
378
 
370
379
  Writes are off by default; follow [write-access administration](docs/runbook.md#roles-credentials-and-health) to enable them.
@@ -376,9 +385,31 @@ All commands refuse repeated flags, stdin and files.
376
385
  Use `pipeline watch --timeout 50` or less to stay within the runner's call timeout.
377
386
  Writes are journaled by Artium only; see [audit action classification](#audit-screen-and-api).
378
387
  For an interrupted write, run the returned read-back command and follow its inspection guidance before retrying.
379
- PAT authentication is available now; client ID and secret authentication is a separate integration phase, with no device flow.
380
388
  Local fake-service checks do not establish live organization acceptance.
381
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
+
382
413
  ### Build from source
383
414
 
384
415
  The source toolchain requires Node **24.11 or later** and **pnpm 10.22.0**.
@@ -434,7 +465,8 @@ artium-axi falcon-axi --help
434
465
 
435
466
  The first prints local Artium help without signing in or contacting the server.
436
467
  The second forwards `--help` through the authenticated upstream adapter.
437
- A bare Falcon or Vectra invocation shows upstream help; `artium-axi az-axi` and `artium-axi az-axi home` run the Azure dashboard with ARM authentication.
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.
438
470
  A bare `artium-axi ldap-axi` shows directory discovery with managed-credential guidance.
439
471
  Arguments after a tool name belong to upstream, subject to adapter restrictions on credential, configuration and file paths.
440
472
  Unknown Azure flags return `INVALID_INPUT` with the flag name, valid flags and a hosted help command.
@@ -461,7 +493,7 @@ Details read bundled manifests and stored health without fetching credentials or
461
493
  Discovery and administration show the server's bundled tool versions, as defined by the [API contract](src/shared/api.ts).
462
494
 
463
495
  Upstream calls preserve stdout, stderr and nonzero exit codes.
464
- For Falcon, Vectra, Azure, Graph, LDAP and Azure DevOps, 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>`.
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>`.
465
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.
466
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).
467
499
  Unrelated content, literal argument values, unknown formats and truncated streams remain unchanged.
@@ -515,6 +547,10 @@ The last enabled administrator cannot be disabled, demoted or archived.
515
547
  Profile, role and archive changes use revision checks; reload stale forms rather than overwriting newer changes.
516
548
  Session revocation and administration changes commit with their audit records.
517
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.
518
554
  Administration and account screens share a navigation menu.
519
555
  Signed-in screens have a header showing identity, sign-in source and sign-out.
520
556
  On administration screens, the header also shows the remaining confirmation window.
@@ -556,7 +592,7 @@ The form exposes the schema's full requirements, including conditional requireme
556
592
  Azure uses guided source-identity fields because the host brokers resource tokens separately.
557
593
  Azure and Graph certificate editors accept one PEM file containing one certificate and its matching unencrypted private key and calculate the fingerprint automatically.
558
594
  See the [hosted contract](docs/credential-standard.md#9-hosted-contract-artium-axi) for profile injection.
559
- Falcon has guided fields even when its pinned package has no credential schema; its injection path stays unchanged.
595
+ Falcon has guided fields; see its [current credential handling](docs/credential-standard.md#per-tool-host-facing-schemas).
560
596
  Browser saves keep native settings and retain blank stored secrets for the same identity.
561
597
  Identity changes require new secrets as defined by the [credential-save contract](src/shared/api.ts) (`adminToolRoutes.save`).
562
598
  Select **Test after saving** to save and report a harmless credential check inline.
@@ -680,7 +716,7 @@ Device approval and refusal emit `device-approve` and `device-deny` events, with
680
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.
681
717
  This records journal activity, including mutation intents, rather than guaranteeing that a remote change succeeded.
682
718
  Pinned Falcon and LDAP runs report `read` from their inventories' read-only declarations, including normal runs and health checks.
683
- ADO uses host classification: reads report `read`, successful write calls report `write`, and failed or interrupted writes report `unknown`.
719
+ ADO and AWX use host classification: reads report `read`, successful write calls report `write`, and failed or interrupted writes report `unknown`.
684
720
  For tools with native journals, failures without journal records and malformed or unreadable evidence report `unknown`; recovered interrupted runs also report `unknown`.
685
721
  See the [API contract](src/shared/api.ts) and [retention and export runbook](docs/runbook.md#retention-and-export).
686
722