@knowttl/artium-axi 0.0.18 → 0.0.20

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 CHANGED
@@ -169,10 +169,20 @@ Administrators can opt in to the single read-only `security hunting query` comma
169
169
  Hunting accepts exactly one UTF-8 plain-text upload named `query.kql`, at most 64 KiB, through `artium-axi mg-axi security hunting query --file query.kql`.
170
170
  See [client input handling](docs/client-reference.md#command-surface-and-subcommands) for local file paths and upload restrictions.
171
171
  Queries must use the upstream restricted read-only KQL subset.
172
+ Hunting parses KQL before the read-only allowlist and upstream authentication; syntax errors return positioned diagnostics without query excerpts or quoted literals.
173
+ Parsing does not check tables, columns, types or permissions; recognized Graph 400 errors expose only the error class and line/column, while unknown error shapes remain opaque.
172
174
  The existing mg-axi role grant is required; other security commands remain unavailable.
173
175
  See [Graph credential setup](docs/tool-credentials.md#microsoft-graph) for hunting permissions and consent; tenant acceptance remains unverified.
174
176
 
177
+ Azure Resource Graph and Log Analytics queries parse KQL before upstream authentication or requests, returning positioned syntax diagnostics and query excerpts on failure.
178
+ Successful parsing does not validate tables, columns, functions, permissions or service-specific restrictions.
179
+
175
180
  Falcon investigation reads include detection lineage, process details and trees, existing sandbox reports, FileVantage changes and device-control policy details.
181
+ NG-SIEM `search start` checks CQL structure before upstream authentication, reporting code, line, column and token class without echoing query text; function names, fields and semantics remain unchecked, and ambiguous syntax passes.
182
+ Rejected searches preserve redacted server diagnostics, completed searches include server warnings when present, and `search start --wait` advises when the normalized filter differs.
183
+
184
+ Vectra `host show` and `entity show --type host`, plus the matching raw host reads, retain every returned API field under `host`, separate from CLI metadata.
185
+ Use `--full` on host/entity detail commands for complete returned text; secret redaction still applies, and upstream omissions cannot be restored.
176
186
 
177
187
  Vectra supports selected QUX/RUX writes for detection close/open and mark-fixed, host/account close, key assets, tags, notes (including bulk notes), assignments and outcomes, triage labels and rules, groups and membership, proxies, threat feeds, internal-network settings, syslog/Kafka, notification destinations and Match, subject to deployment support in the [reviewed inventory](tools/inventories/vectra-axi.json).
178
188
  User, role, API-client and credential administration remains blocked.
@@ -20748,7 +20748,7 @@ import { resolve } from "node:path";
20748
20748
  // package.json
20749
20749
  var package_default = {
20750
20750
  name: "artium-axi",
20751
- version: "0.0.18",
20751
+ version: "0.0.20",
20752
20752
  private: true,
20753
20753
  license: "MIT",
20754
20754
  type: "module",
@@ -21236,17 +21236,18 @@ var falcon_axi_default = {
21236
21236
  generatedBy: "scripts/falcon-inventory.mjs",
21237
21237
  tool: "falcon-axi",
21238
21238
  repository: "https://github.com/knowttl/falcon-axi.git",
21239
- tag: "v0.7.2",
21240
- commit: "96392a6b2afeb86d5422e3ff55e5a3d5e8af769f",
21241
- version: "0.7.2",
21239
+ tag: "v0.8.0",
21240
+ commit: "4ba25f373a5c4df46506bdd0d306fa3ef205d965",
21241
+ version: "0.8.0",
21242
21242
  distribution: {
21243
- filename: "falcon_axi-0.7.2-py3-none-any.whl",
21244
- sha256: "8b87c8047f782a6d390324a26179def0f77e6c7c5bf4212012d5802a249132b6",
21245
- provenance: "https://pypi.org/integrity/falcon-axi/0.7.2/falcon_axi-0.7.2-py3-none-any.whl/provenance"
21243
+ filename: "falcon_axi-0.8.0-py3-none-any.whl",
21244
+ sha256: "8aad289fd58847cb6555f46b8e930c5904d6afda34a7b2e6965cdd60c8df06a4",
21245
+ provenance: "https://pypi.org/integrity/falcon-axi/0.8.0/falcon_axi-0.8.0-py3-none-any.whl/provenance"
21246
21246
  },
21247
+ skillSha256: "5d5fd1cd57ff1da68e37448c93fce57236f76448ec9a10984c01ea7300c6a8e0",
21247
21248
  parser: {
21248
21249
  path: "falcon_axi/cli.py",
21249
- sha256: "ef29404b26da085b96ace7ba1f708e928eb40c7aa99e071807d5003a3421b0cd",
21250
+ sha256: "9b3d42e3c00b3d302948e8937c6295bbdde9cb80384ebef253f9b8a077454909",
21250
21251
  aliases: {},
21251
21252
  shortFlags: {},
21252
21253
  repeats: "last value wins",
@@ -21521,7 +21522,9 @@ var falcon_axi_default = {
21521
21522
  profile: "value",
21522
21523
  filter: "value",
21523
21524
  limit: "value",
21524
- cursor: "value"
21525
+ cursor: "value",
21526
+ fields: "value",
21527
+ full: "boolean"
21525
21528
  },
21526
21529
  input: "No file or raw URL input; cursors and queries remain native values"
21527
21530
  },
@@ -22970,10 +22973,11 @@ var falcon_axi_default = {
22970
22973
  var vectra_axi_default = {
22971
22974
  generatedBy: "scripts/upstream-inventory.mjs",
22972
22975
  tool: "vectra-axi",
22973
- version: "0.1.9",
22974
- integrity: "sha512-GUl24JV8lErGjZliTHcb6BcjjdpJhrzbbB8cBekKE6dM3b5ph9i9EteJHFRWUuGpnEPlVEPeu7X3l33V9DGKwQ==",
22976
+ version: "0.1.10",
22977
+ integrity: "sha512-X7yttDlwpQJW/j0eNox5vLf7nWlFejXjtaq90N7ezJ+ACNqEFspODrwQ/mYqbXFnqjpIugQnhSGcnaI8YNMeLw==",
22975
22978
  parserEvidence: "Installed pinned catalogue exports, provisional until adapter acceptance",
22976
- packageManifestSha256: "e7fe728c58d41a9ddd554b15c29de281dd06c2d7e6a6b044e43d75fb001aa53d",
22979
+ packageManifestSha256: "3f4d4e3ec1b37690087e3c8850ffd5390574e6686cafbd723fb01f83b775ea97",
22980
+ skillSha256: "58978bfd2468e9fac8d17644df1de46768572b1cd9a719a9eec64cdcb547ff9c",
22977
22981
  environment: [
22978
22982
  {
22979
22983
  name: "VECTRA_AXI_CONFIG",
@@ -23273,7 +23277,7 @@ var vectra_axi_default = {
23273
23277
  },
23274
23278
  source: {
23275
23279
  path: "dist/src/catalogue.js",
23276
- sha256: "e49354f34c86cd986d9cc166fc33f3c0423ab8eaa8044621131351c8f297e834"
23280
+ sha256: "02e2443a4b6d6aef9faae51e0c4418c0c565ac5b0f73969a34a4c33a110bfabf"
23277
23281
  }
23278
23282
  },
23279
23283
  flags: [
@@ -23753,7 +23757,8 @@ var vectra_axi_default = {
23753
23757
  help: "boolean",
23754
23758
  profile: "value",
23755
23759
  config: "value",
23756
- id: "value"
23760
+ id: "value",
23761
+ full: "boolean"
23757
23762
  }
23758
23763
  },
23759
23764
  {
@@ -23805,7 +23810,8 @@ var vectra_axi_default = {
23805
23810
  profile: "value",
23806
23811
  config: "value",
23807
23812
  type: "value",
23808
- id: "value"
23813
+ id: "value",
23814
+ full: "boolean"
23809
23815
  }
23810
23816
  },
23811
23817
  {
@@ -25025,10 +25031,11 @@ var vectra_axi_default = {
25025
25031
  var az_axi_default = {
25026
25032
  generatedBy: "scripts/upstream-inventory.mjs",
25027
25033
  tool: "az-axi",
25028
- version: "0.1.11",
25029
- integrity: "sha512-XiCwLaSh6A6xb9sk7RQ7T3FvkYpkWFIoGUCi7HxYlHF4kssVpF5gun4V7Taw9eKcm0HEWftnLci9l4EBSaFj0w==",
25034
+ version: "0.1.13",
25035
+ integrity: "sha512-qltNokGPKFvUxFxNVf25gV2jtgw9MpxT5k6Zlbhz0b/Y5pvbc04SpORpUurDZNXE7runLZZhoBmm38qXcA3M7Q==",
25030
25036
  parserEvidence: "Installed pinned catalogue exports, provisional until adapter acceptance",
25031
- packageManifestSha256: "8bdf756d4f0b3d006543471320eb14d83f258122752bd1e07c76a2a74868691c",
25037
+ packageManifestSha256: "dc09976ff76cdda672ba89f0a7689c39873a86a19213d46687c2a9af861d3ed2",
25038
+ skillSha256: "8a5bc0e8866ca55add8399376784a19e81671e6d036d10815e55b3c473540080",
25032
25039
  environment: [
25033
25040
  {
25034
25041
  name: "AZ_AXI_CONFIG",
@@ -25287,11 +25294,11 @@ var az_axi_default = {
25287
25294
  tokenResourceSources: [
25288
25295
  {
25289
25296
  path: "dist/lib/registry.js",
25290
- sha256: "1b0354317f721989465190b4a276fce811d559bcbbd9871129b02dd366a5beb5"
25297
+ sha256: "dc1eb46c43aa5232b58acfb1d174fe2728491a3a6da28fa3cca27fed79494efd"
25291
25298
  },
25292
25299
  {
25293
25300
  path: "dist/lib/client.js",
25294
- sha256: "322f09655f302f8f4292cbb6317ad192854ed412376ce9041126b25e24ed27ed"
25301
+ sha256: "156af240155e71c051a6a2f0c4235d51acaf3633d7a249736ff3b24ed541d2b6"
25295
25302
  },
25296
25303
  {
25297
25304
  path: "dist/lib/principals.js",
@@ -25315,11 +25322,11 @@ var az_axi_default = {
25315
25322
  },
25316
25323
  {
25317
25324
  path: "dist/commands/logs.js",
25318
- sha256: "07fc272e2947f12f8c03b9f818ec98fe2fb35beee43f544dcd0d0db15f37574b"
25325
+ sha256: "1cfd781bd88e13ba1c70537263220c6bdd6932586e53edd6fc22fc75202bd938"
25319
25326
  },
25320
25327
  {
25321
25328
  path: "dist/commands/doctor.js",
25322
- sha256: "3c5e9c56bf0371a3654c04c296291c8d8a95dc05f9c5679b5544e0b2c3a5c475"
25329
+ sha256: "02f26a4af30ed142b4187394c356e2204ad80f03fee52f65c2daf5c312150b06"
25323
25330
  },
25324
25331
  {
25325
25332
  path: "dist/commands/api.js",
@@ -29743,10 +29750,11 @@ var az_axi_default = {
29743
29750
  var mg_axi_default = {
29744
29751
  generatedBy: "scripts/upstream-inventory.mjs",
29745
29752
  tool: "mg-axi",
29746
- version: "0.1.12",
29747
- integrity: "sha512-TBt2y2rpfn8oi4YOq95uIo43RTsV/iOc0xFa3e3YCjhqd/ZL/y2is+7W0+B5/g1sdwb95yJbcU1eqeJEzmKJ5g==",
29753
+ version: "0.1.13",
29754
+ integrity: "sha512-V9f/H1xISbn1ar3ARVnYvtT4NDUDRgvhCkrnQd6lqNdj1MeQjF4JESS6PA6hY3epXKrqE+g/2nCfgJV1JDmDTQ==",
29748
29755
  parserEvidence: "Installed pinned catalogue exports",
29749
- packageManifestSha256: "e686938dd356bffe87d9884d656a139b91e7eb6d62370f6aba3b5fd14283fb45",
29756
+ packageManifestSha256: "2357d6568740146d05a0ad67fb8e0be3c871261726d3cf110fed83e216001dc9",
29757
+ skillSha256: "98ff12e741b04592afae76853a00f572940dee6edf0e868d2ccba04a742b24ad",
29750
29758
  environment: [
29751
29759
  {
29752
29760
  name: "MG_AXI_CONFIG"
@@ -29908,7 +29916,7 @@ var mg_axi_default = {
29908
29916
  },
29909
29917
  {
29910
29918
  path: "dist/cli.js",
29911
- sha256: "613fc3ac4870e5538d2c53b0760244c7e3bb3837fa3d97c1b89b7916c557af44"
29919
+ sha256: "723f00e5031068211b541ee43447fb559833bea924c91131e0d074349d5b9a4e"
29912
29920
  },
29913
29921
  {
29914
29922
  path: "dist/profiles.js",
@@ -29986,7 +29994,7 @@ var mg_axi_default = {
29986
29994
  },
29987
29995
  {
29988
29996
  path: "dist/cli.js",
29989
- sha256: "613fc3ac4870e5538d2c53b0760244c7e3bb3837fa3d97c1b89b7916c557af44"
29997
+ sha256: "723f00e5031068211b541ee43447fb559833bea924c91131e0d074349d5b9a4e"
29990
29998
  }
29991
29999
  ]
29992
30000
  },
@@ -40052,13 +40060,13 @@ var awx_axi_default = {
40052
40060
  var tenable_axi_default = {
40053
40061
  generatedBy: "scripts/tenable-inventory.mjs",
40054
40062
  tool: "tenable-axi",
40055
- version: "0.1.2",
40056
- integrity: "sha512-csjV0urIUbZZlkA9VQpEGbsOWOnLgZTFMi0yRQD3uGlmlyPIxA6gKyvMzifSqcRvfyOaBEv7U5OjcWL1rs5NAw==",
40063
+ version: "0.1.3",
40064
+ integrity: "sha512-1Ji117XJv7tssAgqq0vQyQP6m3llQdqOoM6TG7tmMrma9iH9tqq+eESkXGnmHqUuJFjlS8TyyctViWk+zpTTjA==",
40057
40065
  parserEvidence: "Published command catalogue, mutation registry and reviewed native parsers and transport gates",
40058
40066
  sources: [
40059
40067
  {
40060
40068
  path: "dist/src/attack-catalogue.js",
40061
- sha256: "022f9d46c0e0a76b62ed528b17552fccae9634208698e541146f8af2f6107316"
40069
+ sha256: "8e691131c15c0a25703a2f3c53f9e6f081b13d83e41b132df47f0196b9f3a192"
40062
40070
  },
40063
40071
  {
40064
40072
  path: "dist/src/attack-export-catalogue.js",
@@ -40070,11 +40078,11 @@ var tenable_axi_default = {
40070
40078
  },
40071
40079
  {
40072
40080
  path: "dist/src/attack.js",
40073
- sha256: "76905fe54d1038ffbaa6b4a82b4cb4fadb6473462d28679319a98ab7cdd08650"
40081
+ sha256: "9e37ff7bb1371f3b16b36fe18ecc0286f6f89956d96d3b243c7c37538a9504be"
40074
40082
  },
40075
40083
  {
40076
40084
  path: "dist/src/catalogue.js",
40077
- sha256: "d99e739f4a9d61cf13c91fd18e69a248f639c33d3e2e5b37efb320f0f50cef16"
40085
+ sha256: "44e7f1adc29b56741b71af0fb1b95239f4fa7c0293f137b8fb9e5e03befcbd72"
40078
40086
  },
40079
40087
  {
40080
40088
  path: "dist/src/cli.js",
@@ -40090,7 +40098,7 @@ var tenable_axi_default = {
40090
40098
  },
40091
40099
  {
40092
40100
  path: "dist/src/exposure.js",
40093
- sha256: "ef5fbe0d3525b741cc14a51b2ab9cc0cbd5289a1ec97fe01312b4d351beaf0b0"
40101
+ sha256: "db005db00fbf1dba311bad8e78a872836994909a9ce46b9bd8d498d72cfc7d2d"
40094
40102
  },
40095
40103
  {
40096
40104
  path: "dist/src/hook-install.js",
@@ -40098,7 +40106,7 @@ var tenable_axi_default = {
40098
40106
  },
40099
40107
  {
40100
40108
  path: "dist/src/inventory-catalogue.js",
40101
- sha256: "a0cc6abc55f11815fbacf4e7f869ce0e70e06f678ebbb012afe7500a26fb4de8"
40109
+ sha256: "9000156bdbc7e9e8a461f89a602f6fa1e9d7217eabe30a67195be79442f8afe6"
40102
40110
  },
40103
40111
  {
40104
40112
  path: "dist/src/inventory-export-catalogue.js",
@@ -40110,7 +40118,7 @@ var tenable_axi_default = {
40110
40118
  },
40111
40119
  {
40112
40120
  path: "dist/src/inventory.js",
40113
- sha256: "bc712463ee14db76ff511c4b3ec8d6cadd43b3895e08f1baee785fe3a415916f"
40121
+ sha256: "700efba15d086ba88be5444d66f131c9d7482e198dfd050eefc7ecd4f1b96bfe"
40114
40122
  },
40115
40123
  {
40116
40124
  path: "dist/src/inventory/schema.js",
@@ -40252,7 +40260,7 @@ var tenable_axi_default = {
40252
40260
  }
40253
40261
  }
40254
40262
  },
40255
- skillSha256: "ea35fe90d39fee3982f731ccc3c717c92aabd0799ff2371f6f3cc5e12d7aea9a",
40263
+ skillSha256: "788b612b4b89f6e390e42ca1619da3a7c146599284ff8ebd69c9e5e42aae5ae0",
40256
40264
  nativeWriteSettings: {
40257
40265
  supportedOperations: [
40258
40266
  "apa-export-attack-path",
@@ -40342,7 +40350,7 @@ var tenable_axi_default = {
40342
40350
  config: "Config path; default credential precedence",
40343
40351
  profile: "Profile name; default credential precedence",
40344
40352
  fields: "Comma-separated display or wire properties; display names: id, name, class, exposureScore; default compact view",
40345
- full: "Show full text; default false",
40353
+ full: "Show untruncated text; does not add fields or rows; default false",
40346
40354
  help: "Show help",
40347
40355
  limit: "Maximum emitted rows, 1-10000; default 100",
40348
40356
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
@@ -40350,7 +40358,7 @@ var tenable_axi_default = {
40350
40358
  query: "Simple query text",
40351
40359
  filter: 'Repeatable: <property> <operator> <JSON string array>, e.g. asset_class = ["DEVICE"]',
40352
40360
  "filter-file": "JSON flat array of {property, operator, value: string[]}; '-' reads stdin; excludes --filter",
40353
- sort: "Wire property:asc|desc",
40361
+ sort: "Sortable display or wire property:asc|desc; unknown names report valid choices",
40354
40362
  "extra-properties": "Comma-separated extra wire properties",
40355
40363
  offset: "Starting record; default 0; excludes --cursor",
40356
40364
  class: "Server-side asset class filter"
@@ -40363,7 +40371,7 @@ var tenable_axi_default = {
40363
40371
  config: "Config path; default credential precedence",
40364
40372
  profile: "Profile name; default credential precedence",
40365
40373
  fields: "Comma-separated output fields; accepted: key, readable_name, operators, sortable, filterable, control, description; default compact view",
40366
- full: "Show full text; default false",
40374
+ full: "Show untruncated text; does not add fields or rows; default false",
40367
40375
  help: "Show help",
40368
40376
  limit: "Maximum emitted rows, 1-10000; default 100",
40369
40377
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
@@ -40377,8 +40385,8 @@ var tenable_axi_default = {
40377
40385
  flags: {
40378
40386
  config: "Config path; default credential precedence",
40379
40387
  profile: "Profile name; default credential precedence",
40380
- fields: "Comma-separated display or wire properties; display names: id, name, class, exposureScore; default compact view",
40381
- full: "Show full text; default false",
40388
+ fields: "Comma-separated display or wire properties; display names: id, name, class, exposureScore, fqdns, last_observed_at; default compact view",
40389
+ full: "Show untruncated text; does not add fields or rows; default false",
40382
40390
  help: "Show help",
40383
40391
  id: "Required exact inventory ID",
40384
40392
  "extra-properties": "Comma-separated extra wire properties"
@@ -40770,8 +40778,8 @@ var tenable_axi_default = {
40770
40778
  flags: {
40771
40779
  config: "Config path; default credential precedence",
40772
40780
  profile: "Profile name; default credential precedence",
40773
- fields: "Comma-separated display or wire properties; display names: id, name, severity, state; default compact view",
40774
- full: "Show full text; default false",
40781
+ fields: "Comma-separated display or wire properties; display names: id, name, severity, state, sensor_type; default compact view",
40782
+ full: "Show untruncated text; does not add fields or rows; default false",
40775
40783
  help: "Show help",
40776
40784
  limit: "Maximum emitted rows, 1-10000; default 100",
40777
40785
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
@@ -40779,7 +40787,7 @@ var tenable_axi_default = {
40779
40787
  query: "Simple query text",
40780
40788
  filter: 'Repeatable: <property> <operator> <JSON string array>, e.g. severity = ["HIGH"]',
40781
40789
  "filter-file": "JSON flat array of {property, operator, value: string[]}; '-' reads stdin; excludes --filter",
40782
- sort: "Wire property:asc|desc",
40790
+ sort: "Sortable display or wire property:asc|desc; unknown names report valid choices",
40783
40791
  "extra-properties": "Comma-separated extra wire properties",
40784
40792
  offset: "Starting record; default 0; excludes --cursor"
40785
40793
  }
@@ -40791,7 +40799,7 @@ var tenable_axi_default = {
40791
40799
  config: "Config path; default credential precedence",
40792
40800
  profile: "Profile name; default credential precedence",
40793
40801
  fields: "Comma-separated output fields; accepted: key, readable_name, operators, sortable, filterable, control, description; default compact view",
40794
- full: "Show full text; default false",
40802
+ full: "Show untruncated text; does not add fields or rows; default false",
40795
40803
  help: "Show help",
40796
40804
  limit: "Maximum emitted rows, 1-10000; default 100",
40797
40805
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
@@ -40804,13 +40812,22 @@ var tenable_axi_default = {
40804
40812
  flags: {
40805
40813
  config: "Config path; default credential precedence",
40806
40814
  profile: "Profile name; default credential precedence",
40807
- fields: "Comma-separated display or wire properties; display names: id, name, severity, state; default compact view",
40808
- full: "Show full text; default false",
40815
+ fields: "Comma-separated display or wire properties; display names: id, name, severity, state, sensor_type, asset_id, cves; default compact view",
40816
+ full: "Show untruncated text; does not add fields or rows; default false",
40809
40817
  help: "Show help",
40810
40818
  id: "Required exact inventory ID",
40811
40819
  "extra-properties": "Comma-separated extra wire properties"
40812
40820
  }
40813
40821
  },
40822
+ {
40823
+ command: "finding summary",
40824
+ effect: "read",
40825
+ flags: {
40826
+ config: "Config path; default credential precedence",
40827
+ profile: "Profile name; default credential precedence",
40828
+ help: "Show help"
40829
+ }
40830
+ },
40814
40831
  {
40815
40832
  command: "home",
40816
40833
  effect: "read",
@@ -40931,7 +40948,7 @@ var tenable_axi_default = {
40931
40948
  config: "Config path; default credential precedence",
40932
40949
  profile: "Profile name; default credential precedence",
40933
40950
  fields: "Comma-separated display or wire properties; display names: name, version, publisher; default compact view",
40934
- full: "Show full text; default false",
40951
+ full: "Show untruncated text; does not add fields or rows; default false",
40935
40952
  help: "Show help",
40936
40953
  limit: "Maximum emitted rows, 1-10000; default 100",
40937
40954
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
@@ -40939,7 +40956,7 @@ var tenable_axi_default = {
40939
40956
  query: "Simple query text",
40940
40957
  filter: 'Repeatable: <property> <operator> <JSON string array>, e.g. application = ["example-app"]',
40941
40958
  "filter-file": "JSON flat array of {property, operator, value: string[]}; '-' reads stdin; excludes --filter",
40942
- sort: "Wire property:asc|desc",
40959
+ sort: "Sortable display or wire property:asc|desc; unknown names report valid choices",
40943
40960
  "extra-properties": "Comma-separated extra wire properties",
40944
40961
  offset: "Starting record; default 0; excludes --cursor"
40945
40962
  }
@@ -40951,7 +40968,7 @@ var tenable_axi_default = {
40951
40968
  config: "Config path; default credential precedence",
40952
40969
  profile: "Profile name; default credential precedence",
40953
40970
  fields: "Comma-separated output fields; accepted: key, readable_name, operators, sortable, filterable, control, description; default compact view",
40954
- full: "Show full text; default false",
40971
+ full: "Show untruncated text; does not add fields or rows; default false",
40955
40972
  help: "Show help",
40956
40973
  limit: "Maximum emitted rows, 1-10000; default 100",
40957
40974
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
@@ -41254,13 +41271,13 @@ var tenable_axi_default = {
41254
41271
  var hybrid_axi_default = {
41255
41272
  generatedBy: "scripts/hybrid-inventory.mjs",
41256
41273
  tool: "hybrid-axi",
41257
- version: "0.1.1",
41258
- integrity: "sha512-8K39EZadEq302GcuCKrWmdKJ6NvtFegpGWiStTF8T8gn+lbzbYNiBnRMt5lI0o+hCm7glUdOFahZqw62ylpi7w==",
41274
+ version: "0.1.2",
41275
+ integrity: "sha512-rveeeytckjW+8lFwKQppSEAncC3yk8KpGqI7Qh3ziJvQtf4ycUrOw+6Tzp9a69gcTamGiYf805OC0+rhIhh6ag==",
41259
41276
  parserEvidence: "Published command catalogue, mutation registry and reviewed native parsers and transport gates",
41260
41277
  sources: [
41261
41278
  {
41262
41279
  path: "dist/src/catalogue.js",
41263
- sha256: "0244f912f05d7a491651b70015a80bfa15d39ed57b691174d8d4f15d89e8a907"
41280
+ sha256: "cf353500382a0c33a6fa2c1735543ae43ecc10eb53c68e727a8940f7f881b380"
41264
41281
  },
41265
41282
  {
41266
41283
  path: "dist/src/cli.js",
@@ -41300,7 +41317,7 @@ var hybrid_axi_default = {
41300
41317
  },
41301
41318
  {
41302
41319
  path: "dist/src/report-catalogue.js",
41303
- sha256: "387cbfd2c687cb0ec4a4813132057fdd3cf1145cb8a9760ccdaad99ed9732169"
41320
+ sha256: "3c3346176cf5aabaf177c40a03efd1c67683640a95c8899f71cab1ec4bd95195"
41304
41321
  },
41305
41322
  {
41306
41323
  path: "dist/src/report-file.js",
@@ -41308,11 +41325,11 @@ var hybrid_axi_default = {
41308
41325
  },
41309
41326
  {
41310
41327
  path: "dist/src/reports.js",
41311
- sha256: "be256f71a04c2f19371b6eb862b88caff9f2e481b95551749bca172058d70396"
41328
+ sha256: "167fa9b8a542b149b8056dbb5f27bbe70c0ed4385662fc6ae9698c40e421a8d7"
41312
41329
  },
41313
41330
  {
41314
41331
  path: "dist/src/search-catalogue.js",
41315
- sha256: "e5cba3e769308123a560f7e9bcbb0f0ab36e428ce3631a173298953f063b8f7e"
41332
+ sha256: "42fa4e7e979914c67f99fd9b083f18030ed58c01dc6cbaddea3a03553ac2a353"
41316
41333
  },
41317
41334
  {
41318
41335
  path: "dist/src/search-contracts.js",
@@ -41320,11 +41337,11 @@ var hybrid_axi_default = {
41320
41337
  },
41321
41338
  {
41322
41339
  path: "dist/src/search.js",
41323
- sha256: "bd9362c96f6ff2a90c3297308cb7e1ef91469a4b233228abfa3d7a8849d28204"
41340
+ sha256: "cf6192817869625e1d70030c2df748535c39d48632d8e5604cd020003807ef37"
41324
41341
  },
41325
41342
  {
41326
41343
  path: "dist/src/session.js",
41327
- sha256: "e75476c1db36aa635d6f3f675e95dfcde6bdda5c66abd0f8f905db881c7d9cf5"
41344
+ sha256: "c55dce9aea70c4f213a040968783bb81296127395367136593985bfe99b4788c"
41328
41345
  },
41329
41346
  {
41330
41347
  path: "dist/src/setup.js",
@@ -41435,7 +41452,7 @@ var hybrid_axi_default = {
41435
41452
  }
41436
41453
  }
41437
41454
  },
41438
- skillSha256: "1d0266cf0237630d063531b567a6b960dca48a731e7917e72b50fb59f757d384",
41455
+ skillSha256: "0dc43810bcc0774457a33dba2454849e2c8588f0607bd770b30fefe09cd0d26c",
41439
41456
  nativeWriteSettings: {
41440
41457
  supportedOperations: [
41441
41458
  "convertQuickScan",
@@ -44070,19 +44087,19 @@ var commands = {
44070
44087
  "tenable-axi": {
44071
44088
  usage: "artium-axi tenable-axi [<args>]",
44072
44089
  purpose: "Investigate Tenable One with managed API keys.",
44073
- flags: ["Writes and export jobs are off by default and require administrator-enabled operations, preview, --execute and exact --confirm. Downloads are blocked."],
44090
+ flags: ["Writes and export jobs are off by default and require administrator-enabled operations, preview, --execute and exact --confirm. Downloads are blocked.", "Declared file flags accept - to read stdin to EOF within 5 s; otherwise INVALID_INPUT. Close stdin or pass a local file path."],
44074
44091
  example: "artium-axi tenable-axi card list --limit 1"
44075
44092
  },
44076
44093
  "hybrid-axi": {
44077
44094
  usage: "artium-axi hybrid-axi [<args>]",
44078
44095
  purpose: "Investigate Hybrid Analysis with a managed API key.",
44079
- flags: ["Submissions, YARA mutations, consuming matches and four reviewed archive downloads are off by default and selected independently by an administrator. Native preview, --execute and exact --confirm remain required. Use artium-axi download --help for authenticated CLI verified saving.", transferWarning],
44096
+ flags: ["Submissions, YARA mutations, consuming matches and four reviewed archive downloads are off by default and selected independently by an administrator. Native preview, --execute and exact --confirm remain required. Use artium-axi download --help for authenticated CLI verified saving.", "--body-file - reads stdin to EOF within 5 s; otherwise INVALID_INPUT. Close stdin or pass a local file path.", transferWarning],
44080
44097
  example: "artium-axi hybrid-axi quota"
44081
44098
  },
44082
44099
  "az-axi": {
44083
44100
  usage: "artium-axi az-axi [<args>]",
44084
44101
  purpose: "Run Azure commands with your managed identity.",
44085
- flags: ["Arguments after az-axi are forwarded upstream, including --help."],
44102
+ flags: ["Arguments after az-axi are forwarded upstream, including --help.", "Query commands read non-terminal stdin to EOF only without a file, positional query or query flag. api reads stdin only without --body, --body-file or --data; method/path are not body sources. The pinned upstream accepts --body, not --data.", "Tool stdin must reach EOF within 5 s; otherwise INVALID_INPUT. Close stdin or pass --file for queries, --body or --body-file for api."],
44086
44103
  example: "artium-axi az-axi sub list"
44087
44104
  },
44088
44105
  "mg-axi": {
@@ -44369,9 +44386,12 @@ ${executableBlock}
44369
44386
  // src/cli/input.ts
44370
44387
  import { createReadStream } from "node:fs";
44371
44388
  import { basename } from "node:path";
44372
- async function readBounded(stream, limit) {
44389
+ async function readBounded(stream, limit, stdinAlternative) {
44373
44390
  const chunks = [];
44374
44391
  let bytes = 0;
44392
+ const deadline = stdinAlternative === void 0 ? void 0 : setTimeout(() => {
44393
+ stream.destroy(new ArtiumError("INVALID_INPUT", `no stdin EOF after 5 s; close stdin or pass ${stdinAlternative}`));
44394
+ }, 5e3);
44375
44395
  try {
44376
44396
  for await (const chunk of stream) {
44377
44397
  const buffer = Buffer.from(chunk);
@@ -44382,6 +44402,8 @@ async function readBounded(stream, limit) {
44382
44402
  } catch (error62) {
44383
44403
  if (error62 instanceof ArtiumError) throw error62;
44384
44404
  throw new ArtiumError("INVALID_INPUT", "Tool input could not be read.", "Check the local input file or stdin.");
44405
+ } finally {
44406
+ clearTimeout(deadline);
44385
44407
  }
44386
44408
  return Buffer.concat(chunks);
44387
44409
  }
@@ -44400,7 +44422,7 @@ async function toolInput(tool, original) {
44400
44422
  const equals = args[index].indexOf("=");
44401
44423
  const path = equals < 0 ? args[++index] : args[index].slice(equals + 1);
44402
44424
  if (path === "-" && (tool === "tenable-axi" || tool === "hybrid-axi" && flag === "--body-file")) {
44403
- input2.stdin = (await readBounded(process.stdin, inputLimits.stdinBytes)).toString("utf8");
44425
+ input2.stdin = (await readBounded(process.stdin, inputLimits.stdinBytes, flag)).toString("utf8");
44404
44426
  continue;
44405
44427
  }
44406
44428
  if (!path || path === "-") throw new ArtiumError("UNSUPPORTED_INPUT", "A file flag requires a local file path.");
@@ -44425,20 +44447,22 @@ async function toolInput(tool, original) {
44425
44447
  }
44426
44448
  const route = az_axi_default.commands.find((route2) => ["rg query", "logs query", "api"].includes(route2.handlerCommand) && route2.command.split(" ").every((word, index) => args[leading + index] === word));
44427
44449
  let positional = false;
44450
+ let explicitInput = false;
44428
44451
  if (route) {
44429
44452
  for (let index = leading + route.command.split(" ").length; index < args.length; index++) {
44430
44453
  const token = args[index];
44431
44454
  if (token === "--") {
44432
- positional = index + 1 < args.length;
44455
+ positional ||= index + 1 < args.length;
44433
44456
  break;
44434
44457
  }
44435
44458
  if (!token.startsWith("-") || token === "-") {
44436
44459
  positional = true;
44437
- break;
44460
+ continue;
44438
44461
  }
44439
44462
  const raw = token.slice(token.startsWith("--") ? 2 : 1).split("=")[0];
44440
44463
  const expanded = token.startsWith("--") ? raw : route.shortFlags[raw] ?? raw;
44441
44464
  const name = route.flagAliases[expanded] ?? expanded;
44465
+ if ((route.handlerCommand === "api" ? ["body", "body-file", "data"] : ["graph-query", "analytics-query"]).includes(name)) explicitInput = true;
44442
44466
  const kind = route.flags[name];
44443
44467
  if (token.includes("=") || !kind) continue;
44444
44468
  if (kind === "boolean") {
@@ -44451,8 +44475,8 @@ async function toolInput(tool, original) {
44451
44475
  }
44452
44476
  }
44453
44477
  }
44454
- if (tool === "az-axi" && route && !input2.files?.length && !positional && !process.stdin.isTTY) {
44455
- const stdin = await readBounded(process.stdin, inputLimits.stdinBytes);
44478
+ if (tool === "az-axi" && route && !input2.files?.length && !explicitInput && (route.handlerCommand === "api" || !positional) && !process.stdin.isTTY) {
44479
+ const stdin = await readBounded(process.stdin, inputLimits.stdinBytes, route.handlerCommand === "api" ? "--data (supported body flag: --body)" : "--file");
44456
44480
  if (stdin.length) input2.stdin = stdin.toString("utf8");
44457
44481
  }
44458
44482
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knowttl/artium-axi",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "description": "Client CLI and embedded skill for the Artium managed tools server.",
5
5
  "license": "MIT",
6
6
  "type": "module",