@wlfi-agent/cli 1.4.15 → 1.4.17

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 (82) hide show
  1. package/Cargo.lock +22 -20
  2. package/Cargo.toml +2 -2
  3. package/README.md +10 -2
  4. package/crates/vault-cli-admin/src/main.rs +21 -2
  5. package/crates/vault-cli-admin/src/tui.rs +634 -129
  6. package/crates/vault-cli-daemon/Cargo.toml +1 -0
  7. package/crates/vault-cli-daemon/src/bin/wlfi-agent-system-keychain.rs +122 -8
  8. package/crates/vault-cli-daemon/src/main.rs +24 -4
  9. package/crates/vault-cli-daemon/src/relay_sync.rs +155 -35
  10. package/crates/vault-cli-daemon/tests/system_keychain_helper_acl.rs +23 -18
  11. package/crates/vault-daemon/src/daemon_parts/api_impl_and_utils.rs +6 -0
  12. package/crates/vault-daemon/src/daemon_parts/types_api_rpc.rs +6 -0
  13. package/crates/vault-daemon/src/tests.rs +2 -2
  14. package/crates/vault-daemon/src/tests_parts/part4.rs +110 -0
  15. package/crates/vault-transport-unix/src/lib.rs +22 -3
  16. package/crates/vault-transport-xpc/src/lib.rs +20 -2
  17. package/dist/cli.cjs +20842 -25552
  18. package/dist/cli.cjs.map +1 -1
  19. package/package.json +5 -3
  20. package/packages/cache/.turbo/turbo-build.log +53 -52
  21. package/packages/cache/coverage/base.css +224 -0
  22. package/packages/cache/coverage/block-navigation.js +87 -0
  23. package/packages/cache/coverage/clover.xml +585 -0
  24. package/packages/cache/coverage/coverage-final.json +5 -0
  25. package/packages/cache/coverage/favicon.png +0 -0
  26. package/packages/cache/coverage/index.html +161 -0
  27. package/packages/cache/coverage/prettify.css +1 -0
  28. package/packages/cache/coverage/prettify.js +2 -0
  29. package/packages/cache/coverage/sort-arrow-sprite.png +0 -0
  30. package/packages/cache/coverage/sorter.js +210 -0
  31. package/packages/cache/coverage/src/client/index.html +116 -0
  32. package/packages/cache/coverage/src/client/index.ts.html +253 -0
  33. package/packages/cache/coverage/src/errors/index.html +116 -0
  34. package/packages/cache/coverage/src/errors/index.ts.html +244 -0
  35. package/packages/cache/coverage/src/index.html +116 -0
  36. package/packages/cache/coverage/src/index.ts.html +94 -0
  37. package/packages/cache/coverage/src/service/index.html +116 -0
  38. package/packages/cache/coverage/src/service/index.ts.html +2212 -0
  39. package/packages/cache/dist/{chunk-ALQ6H7KG.cjs → chunk-QF4XKEIA.cjs} +189 -45
  40. package/packages/cache/dist/chunk-QF4XKEIA.cjs.map +1 -0
  41. package/packages/cache/dist/{chunk-FGJEEF5N.js → chunk-QNK6GOTI.js} +182 -38
  42. package/packages/cache/dist/chunk-QNK6GOTI.js.map +1 -0
  43. package/packages/cache/dist/index.cjs +2 -2
  44. package/packages/cache/dist/index.js +1 -1
  45. package/packages/cache/dist/service/index.cjs +2 -2
  46. package/packages/cache/dist/service/index.d.cts +2 -0
  47. package/packages/cache/dist/service/index.d.ts +2 -0
  48. package/packages/cache/dist/service/index.js +1 -1
  49. package/packages/cache/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  50. package/packages/cache/src/service/index.test.ts +575 -0
  51. package/packages/cache/src/service/index.ts +234 -51
  52. package/packages/config/.turbo/turbo-build.log +2 -2
  53. package/packages/config/node_modules/.bin/tsc +2 -2
  54. package/packages/config/node_modules/.bin/tsserver +2 -2
  55. package/packages/config/node_modules/.bin/tsup +2 -2
  56. package/packages/config/node_modules/.bin/tsup-node +2 -2
  57. package/packages/rpc/.turbo/turbo-build.log +11 -11
  58. package/packages/rpc/node_modules/.bin/tsc +2 -2
  59. package/packages/rpc/node_modules/.bin/tsserver +2 -2
  60. package/packages/rpc/node_modules/.bin/tsup +2 -2
  61. package/packages/rpc/node_modules/.bin/tsup-node +2 -2
  62. package/packages/ui/.turbo/turbo-build.log +13 -13
  63. package/packages/ui/dist/components/badge.d.ts +1 -1
  64. package/packages/ui/dist/components/button.d.ts +1 -1
  65. package/scripts/install-rust-binaries.mjs +229 -58
  66. package/src/cli.ts +51 -39
  67. package/src/lib/admin-passthrough.js +1 -0
  68. package/src/lib/admin-reset.js +1 -0
  69. package/src/lib/admin-reset.ts +26 -16
  70. package/src/lib/admin-setup.js +1 -0
  71. package/src/lib/admin-setup.ts +32 -20
  72. package/src/lib/agent-auth-revoke.js +1 -0
  73. package/src/lib/agent-auth-rotate.js +1 -0
  74. package/src/lib/agent-auth.js +1 -0
  75. package/src/lib/config-mutation.js +1 -0
  76. package/src/lib/launchd-assets.js +1 -0
  77. package/src/lib/launchd-assets.ts +29 -0
  78. package/src/lib/local-admin-access.js +1 -0
  79. package/src/lib/rust.ts +1 -1
  80. package/src/lib/status-repair-cli.js +1 -0
  81. package/packages/cache/dist/chunk-ALQ6H7KG.cjs.map +0 -1
  82. package/packages/cache/dist/chunk-FGJEEF5N.js.map +0 -1
package/Cargo.lock CHANGED
@@ -823,9 +823,9 @@ dependencies = [
823
823
 
824
824
  [[package]]
825
825
  name = "darling"
826
- version = "0.23.0"
826
+ version = "0.20.11"
827
827
  source = "registry+https://github.com/rust-lang/crates.io-index"
828
- checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
828
+ checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
829
829
  dependencies = [
830
830
  "darling_core",
831
831
  "darling_macro",
@@ -833,10 +833,11 @@ dependencies = [
833
833
 
834
834
  [[package]]
835
835
  name = "darling_core"
836
- version = "0.23.0"
836
+ version = "0.20.11"
837
837
  source = "registry+https://github.com/rust-lang/crates.io-index"
838
- checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
838
+ checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
839
839
  dependencies = [
840
+ "fnv",
840
841
  "ident_case",
841
842
  "proc-macro2",
842
843
  "quote",
@@ -846,9 +847,9 @@ dependencies = [
846
847
 
847
848
  [[package]]
848
849
  name = "darling_macro"
849
- version = "0.23.0"
850
+ version = "0.20.11"
850
851
  source = "registry+https://github.com/rust-lang/crates.io-index"
851
- checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
852
+ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
852
853
  dependencies = [
853
854
  "darling_core",
854
855
  "quote",
@@ -867,12 +868,12 @@ dependencies = [
867
868
 
868
869
  [[package]]
869
870
  name = "deranged"
870
- version = "0.5.8"
871
+ version = "0.3.11"
871
872
  source = "registry+https://github.com/rust-lang/crates.io-index"
872
- checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
873
+ checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
873
874
  dependencies = [
874
875
  "powerfmt",
875
- "serde_core",
876
+ "serde",
876
877
  ]
877
878
 
878
879
  [[package]]
@@ -1523,9 +1524,9 @@ dependencies = [
1523
1524
 
1524
1525
  [[package]]
1525
1526
  name = "instability"
1526
- version = "0.3.11"
1527
+ version = "0.3.10"
1527
1528
  source = "registry+https://github.com/rust-lang/crates.io-index"
1528
- checksum = "357b7205c6cd18dd2c86ed312d1e70add149aea98e7ef72b9fdf0270e555c11d"
1529
+ checksum = "6778b0196eefee7df739db78758e5cf9b37412268bfa5650bfeed028aed20d9c"
1529
1530
  dependencies = [
1530
1531
  "darling",
1531
1532
  "indoc",
@@ -1752,9 +1753,9 @@ dependencies = [
1752
1753
 
1753
1754
  [[package]]
1754
1755
  name = "num-conv"
1755
- version = "0.2.0"
1756
+ version = "0.1.0"
1756
1757
  source = "registry+https://github.com/rust-lang/crates.io-index"
1757
- checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050"
1758
+ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
1758
1759
 
1759
1760
  [[package]]
1760
1761
  name = "num-integer"
@@ -2822,30 +2823,30 @@ dependencies = [
2822
2823
 
2823
2824
  [[package]]
2824
2825
  name = "time"
2825
- version = "0.3.47"
2826
+ version = "0.3.36"
2826
2827
  source = "registry+https://github.com/rust-lang/crates.io-index"
2827
- checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
2828
+ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
2828
2829
  dependencies = [
2829
2830
  "deranged",
2830
2831
  "itoa",
2831
2832
  "num-conv",
2832
2833
  "powerfmt",
2833
- "serde_core",
2834
+ "serde",
2834
2835
  "time-core",
2835
2836
  "time-macros",
2836
2837
  ]
2837
2838
 
2838
2839
  [[package]]
2839
2840
  name = "time-core"
2840
- version = "0.1.8"
2841
+ version = "0.1.2"
2841
2842
  source = "registry+https://github.com/rust-lang/crates.io-index"
2842
- checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
2843
+ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
2843
2844
 
2844
2845
  [[package]]
2845
2846
  name = "time-macros"
2846
- version = "0.2.27"
2847
+ version = "0.2.18"
2847
2848
  source = "registry+https://github.com/rust-lang/crates.io-index"
2848
- checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
2849
+ checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
2849
2850
  dependencies = [
2850
2851
  "num-conv",
2851
2852
  "time-core",
@@ -3799,6 +3800,7 @@ version = "0.1.0"
3799
3800
  dependencies = [
3800
3801
  "anyhow",
3801
3802
  "clap",
3803
+ "core-foundation",
3802
3804
  "libc",
3803
3805
  "nix",
3804
3806
  "reqwest",
package/Cargo.toml CHANGED
@@ -17,7 +17,7 @@ resolver = "2"
17
17
  edition = "2021"
18
18
  license = "MIT"
19
19
  version = "0.1.0"
20
- authors = ["WLFI Agent SDK Team"]
20
+ authors = ["WLFI Agentic SDK Team"]
21
21
 
22
22
  [workspace.dependencies]
23
23
  alloy-primitives = "0.8"
@@ -43,7 +43,7 @@ serde = { version = "1", features = ["derive"] }
43
43
  serde_json = "1"
44
44
  sha2 = "0.10"
45
45
  thiserror = "2"
46
- time = { version = "0.3", features = ["macros", "serde", "formatting", "parsing"] }
46
+ time = { version = "=0.3.36", features = ["macros", "serde", "formatting", "parsing"] }
47
47
  tokio = { version = "1", features = ["macros", "rt-multi-thread", "sync", "net", "io-util", "time", "signal"] }
48
48
  uuid = { version = "1", features = ["serde", "v4"] }
49
49
  zeroize = "1"
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # WLFI Agent SDK
1
+ # WLFI Agentic SDK
2
2
 
3
- WLFI Agent SDK is a root-managed local signing daemon with policy enforcement, a single `wlfi-agent` CLI, and an optional relay + web approval flow.
3
+ WLFI Agentic SDK is a root-managed local signing daemon with policy enforcement, a single `wlfi-agent` CLI, and an optional relay + web approval flow.
4
4
 
5
5
  The main user path is:
6
6
 
@@ -43,12 +43,20 @@ User-facing examples below avoid shell env vars on purpose. Prefer prompts, conf
43
43
 
44
44
  ## Install
45
45
 
46
+ ### Prerequisites
47
+
48
+ - macOS
49
+ - Rust toolchain on `PATH` (`cargo`, `rustc`) with Rust `1.87.0` or newer
50
+ - Xcode Command Line Tools (`xcode-select --install`)
51
+
46
52
  ### Install from npm
47
53
 
48
54
  ```bash
49
55
  npm i -g @wlfi-agent/cli
50
56
  ```
51
57
 
58
+ `npm i -g @wlfi-agent/cli` builds the local Rust runtime during `postinstall`. If the prerequisites above are already installed, this is the normal one-step install path. If `cargo` or the macOS Command Line Tools are missing, installation fails immediately and tells you how to install the missing prerequisite before retrying.
59
+
52
60
  ### Work from this repo
53
61
 
54
62
  ```bash
@@ -813,16 +813,25 @@ async fn main() -> Result<()> {
813
813
  if let Some(output) = tui::run_bootstrap_tui(
814
814
  &shared_config.config,
815
815
  args.print_agent_auth_token,
816
- |params| {
816
+ |params, on_status| {
817
+ let mut status_error = None;
817
818
  tokio::task::block_in_place(|| {
818
819
  tokio::runtime::Handle::current().block_on(execute_bootstrap(
819
820
  daemon_api.clone(),
820
821
  &vault_password,
821
822
  &state_file_display,
822
823
  params,
823
- |_| {},
824
+ |message| {
825
+ if status_error.is_none() {
826
+ status_error = on_status(message).err();
827
+ }
828
+ },
824
829
  ))
825
830
  })
831
+ .and_then(|output| match status_error {
832
+ Some(err) => Err(err),
833
+ None => Ok(output),
834
+ })
826
835
  },
827
836
  )? {
828
837
  print_status("bootstrap complete", output_format, cli.quiet);
@@ -3965,6 +3974,7 @@ mod tests {
3965
3974
  #[test]
3966
3975
  #[cfg(unix)]
3967
3976
  fn resolve_daemon_socket_path_rejects_non_root_owned_socket() {
3977
+ use std::os::fd::AsRawFd;
3968
3978
  use std::os::unix::fs::PermissionsExt;
3969
3979
  use std::os::unix::net::UnixListener;
3970
3980
 
@@ -3979,6 +3989,15 @@ mod tests {
3979
3989
 
3980
3990
  let socket_path = root.join("daemon.sock");
3981
3991
  let listener = UnixListener::bind(&socket_path).expect("bind socket");
3992
+ if unsafe { libc::geteuid() } == 0 {
3993
+ let rc = unsafe { libc::fchown(listener.as_raw_fd(), 1, libc::gid_t::MAX) };
3994
+ assert_eq!(
3995
+ rc,
3996
+ 0,
3997
+ "must set non-root owner for root-mode test: {}",
3998
+ std::io::Error::last_os_error()
3999
+ );
4000
+ }
3982
4001
 
3983
4002
  let err = resolve_daemon_socket_path(Some(socket_path.clone())).expect_err("must reject");
3984
4003
  assert!(err.to_string().contains("must be owned by root"));