From 7f68207f1e0040c677b0fa5e2a6a874ca2e49eb0 Mon Sep 17 00:00:00 2001 From: DevBroco <84507903+BroccoliFin@users.noreply.github.com> Date: Sun, 22 Feb 2026 22:08:43 +0300 Subject: [PATCH] Feat/completion (#240) * feat: add OpenRouter usage examples * feat: add HTPS headers * feat: add shell completion generation via clap_complete * feat: add shell completion generation via clap_complete * feat: add shell completion generation via clap_complete * Refactor completion: use clap_complete::Shell directly, improve tests, remove tracing duplication, fix .env.example and Cargo.toml * fix: rename init_cli_logging to init_cli_tracing (sync with main) --------- Co-authored-by: BroccoliFin Co-authored-by: firat.sertgoz --- .env.example | 6 +- Cargo.lock | 574 +++++--- Cargo.toml | 1 + ironclaw.bash | 3053 +++++++++++++++++++++++++++++++++++++++++ ironclaw.fish | 455 ++++++ ironclaw.zsh | 2027 +++++++++++++++++++++++++++ src/cli/completion.rs | 39 + src/cli/mod.rs | 5 + src/main.rs | 4 + 9 files changed, 5953 insertions(+), 211 deletions(-) create mode 100644 ironclaw.bash create mode 100644 ironclaw.fish create mode 100644 ironclaw.zsh create mode 100644 src/cli/completion.rs diff --git a/.env.example b/.env.example index dfd7e55d..62583c1b 100644 --- a/.env.example +++ b/.env.example @@ -32,14 +32,19 @@ NEARAI_AUTH_URL=https://private.near.ai # LLM_BACKEND=openai_compatible # LLM_BASE_URL=http://localhost:1234/v1 # LLM_API_KEY=sk-... # optional for local servers +# Custom HTTP headers for OpenAI-compatible providers +# Format: comma-separated key:value pairs +# LLM_EXTRA_HEADERS=HTTP-Referer:https://github.com/nearai/ironclaw,X-Title:ironclaw # === OpenRouter (300+ models via OpenAI-compatible) === # LLM_MODEL=anthropic/claude-sonnet-4 # see openrouter.ai/models for IDs # LLM_BACKEND=openai_compatible # LLM_BASE_URL=https://openrouter.ai/api/v1 # LLM_API_KEY=sk-or-... + # LLM_EXTRA_HEADERS=HTTP-Referer:https://myapp.com,X-Title:MyApp + # === Together AI (via OpenAI-compatible) === # LLM_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo # LLM_BACKEND=openai_compatible @@ -54,7 +59,6 @@ NEARAI_AUTH_URL=https://private.near.ai # For full provider setup guide see docs/LLM_PROVIDERS.md - # Channel Configuration # CLI is always enabled diff --git a/Cargo.lock b/Cargo.lock index 52c9e8bd..24f0a261 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -73,7 +73,7 @@ dependencies = [ "const-random", "once_cell", "version_check", - "zerocopy 0.8.37", + "zerocopy 0.8.39", ] [[package]] @@ -158,9 +158,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" [[package]] name = "ar_archive_writer" @@ -230,9 +230,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.3" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", @@ -308,7 +308,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -348,7 +348,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -365,7 +365,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -507,7 +507,7 @@ version = "0.66.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cexpr", "clang-sys", "lazy_static", @@ -520,7 +520,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.114", + "syn 2.0.116", "which", ] @@ -532,9 +532,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitvec" @@ -663,14 +663,14 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "5c6f81257d10a0f602a294ae4182251151ff97dbb504ef9afcdda4a64b24d9b4" dependencies = [ "allocator-api2", ] @@ -705,9 +705,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" dependencies = [ "serde", ] @@ -801,9 +801,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.55" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", @@ -869,9 +869,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.56" +version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75ca66430e33a14957acc24c5077b503e7d374151b2b4b3a10c83b4ceb4be0e" +checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" dependencies = [ "clap_builder", "clap_derive", @@ -879,9 +879,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.56" +version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793207c7fa6300a0608d1080b858e5fdbe713cdc1c8db9fb17777d8a13e63df0" +checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" dependencies = [ "anstream", "anstyle", @@ -889,6 +889,15 @@ dependencies = [ "strsim", ] +[[package]] +name = "clap_complete" +version = "4.5.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c757a3b7e39161a4e56f9365141ada2a6c915a8622c408ab6bb4b5d047371031" +dependencies = [ + "clap", +] + [[package]] name = "clap_derive" version = "4.5.55" @@ -898,14 +907,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "clipboard-win" @@ -1182,7 +1191,7 @@ dependencies = [ "proc-macro2", "quote", "strict", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1258,7 +1267,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "crossterm_winapi", "mio", "parking_lot", @@ -1274,7 +1283,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "crossterm_winapi", "derive_more", "document-features", @@ -1332,7 +1341,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1365,7 +1374,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1376,7 +1385,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1431,9 +1440,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" dependencies = [ "powerfmt", "serde_core", @@ -1458,7 +1467,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1548,7 +1557,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1661,7 +1670,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1872,9 +1881,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1887,9 +1896,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1897,15 +1906,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1914,9 +1923,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" @@ -1933,26 +1942,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -1962,9 +1971,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1974,7 +1983,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1993,7 +2001,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "debugid", "fxhash", "serde", @@ -2016,7 +2024,7 @@ version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" dependencies = [ - "unicode-width 0.2.0", + "unicode-width 0.2.2", ] [[package]] @@ -2046,6 +2054,19 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + [[package]] name = "ghash" version = "0.5.1" @@ -2692,6 +2713,7 @@ dependencies = [ "bytes", "chrono", "clap", + "clap_complete", "cron", "crossterm 0.28.1", "deadpool-postgres", @@ -2722,7 +2744,7 @@ dependencies = [ "rustyline", "secrecy", "secret-service", - "security-framework 3.5.1", + "security-framework", "serde", "serde_json", "serde_yml", @@ -2838,7 +2860,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b73885c6a3cefdf7a1db0327cefbe4b9b72cac94cae4b19ede4fa492d8af02a0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "crc", "cssparser", "html5ever 0.38.0", @@ -2849,9 +2871,9 @@ dependencies = [ [[package]] name = "lazy-regex" -version = "3.5.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5c13b6857ade4c8ee05c3c3dc97d2ab5415d691213825b90d3211c425c1f907" +checksum = "6bae91019476d3ec7147de9aa291cadb6d870abf2f3015d2da73a90325ac1496" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -2860,14 +2882,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.5.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a95c68db5d41694cea563c86a4ba4dc02141c16ef64814108cb23def4d5438" +checksum = "4de9c1e1439d8b7b3061b2d209809f447ca33241733d9a3c01eabf2dc8d94358" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -2896,9 +2918,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.180" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libloading" @@ -2922,9 +2944,9 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "libc", - "redox_syscall 0.7.0", + "redox_syscall 0.7.1", ] [[package]] @@ -2937,7 +2959,7 @@ dependencies = [ "async-stream", "async-trait", "bincode", - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "fallible-iterator 0.3.0", "futures", @@ -2976,7 +2998,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae65c66088dcd309abbd5617ae046abac2a2ee0a7fdada5127353bd68e0a27ea" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "fallible-iterator 0.2.0", "fallible-streaming-iterator", "hashlink", @@ -2990,7 +3012,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15a90128c708356af8f7d767c9ac2946692c9112b4f74f07b99a01a60680e413" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cc", "fallible-iterator 0.3.0", "indexmap 2.13.0", @@ -3182,9 +3204,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memfd" @@ -3268,17 +3290,17 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.14" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", "openssl", - "openssl-probe 0.1.6", + "openssl-probe", "openssl-sys", "schannel", - "security-framework 2.11.1", + "security-framework", "security-framework-sys", "tempfile", ] @@ -3304,7 +3326,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg-if", "cfg_aliases", "libc", @@ -3317,7 +3339,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg-if", "cfg_aliases", "libc", @@ -3431,6 +3453,24 @@ dependencies = [ "libc", ] +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.0", +] + +[[package]] +name = "objc2-system-configuration" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" +dependencies = [ + "objc2-core-foundation", +] + [[package]] name = "object" version = "0.36.7" @@ -3487,7 +3527,7 @@ version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg-if", "foreign-types", "libc", @@ -3504,15 +3544,9 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - [[package]] name = "openssl-probe" version = "0.2.1" @@ -3607,7 +3641,7 @@ dependencies = [ "regex", "regex-syntax", "structmeta", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3714,7 +3748,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3753,7 +3787,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3877,7 +3911,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.37", + "zerocopy 0.8.39", ] [[package]] @@ -3903,7 +3937,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3944,14 +3978,14 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "psm" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa96cb91275ed31d6da3e983447320c4eb219ac180fa1679a0889ff32861e2d" +checksum = "3852766467df634d74f0b2d7819bf8dc483a0eb2e3b0f50f756f9cfe8b0d18d8" dependencies = [ "ar_archive_writer", "cc", @@ -4159,7 +4193,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eb174b0af6c181a87d68b42800806657bfbdf88b566f819aaadb9d2a7b7699d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "kuchikikiki", "once_cell", "regex", @@ -4186,16 +4220,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] name = "redox_syscall" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" +checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -4237,7 +4271,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4282,7 +4316,7 @@ dependencies = [ "quote", "refinery-core", "regex", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4301,9 +4335,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -4313,9 +4347,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -4324,9 +4358,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "rend" @@ -4484,7 +4518,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74a5a6f027e892c7a035c6fddb50435a1fbf5a734ffc0c2a9fed4d0221440519" dependencies = [ "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4520,7 +4554,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4533,7 +4567,7 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -4570,10 +4604,10 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe 0.2.1", + "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.5.1", + "security-framework", ] [[package]] @@ -4618,7 +4652,7 @@ version = "17.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e902948a25149d50edc1a8e0141aad50f54e22ba83ff988cf8f7c9ef07f50564" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg-if", "clipboard-win", "fd-lock", @@ -4630,7 +4664,7 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width 0.2.0", + "unicode-width 0.2.2", "utf8parse", "windows-sys 0.60.2", ] @@ -4643,14 +4677,14 @@ checksum = "5d66de233f908aebf9cc30ac75ef9103185b4b715c6f2fb7a626aa5e5ede53ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -4704,7 +4738,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4765,24 +4799,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" -dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4791,9 +4812,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" dependencies = [ "core-foundation-sys", "libc", @@ -4805,7 +4826,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feef350c36147532e1b79ea5c1f3791373e61cbd9a6a2615413b3807bb164fb7" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cssparser", "derive_more", "log", @@ -4824,7 +4845,7 @@ version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fdfed56cd634f04fe8b9ddf947ae3dc493483e819593d2ba17df9ad05db8b2" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cssparser", "derive_more", "log", @@ -4874,7 +4895,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4885,7 +4906,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4920,7 +4941,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5203,7 +5224,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5214,7 +5235,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5236,9 +5257,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.114" +version = "2.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" dependencies = [ "proc-macro2", "quote", @@ -5268,7 +5289,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5277,7 +5298,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -5298,7 +5319,7 @@ version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc4592f674ce18521c2a81483873a49596655b179f71c5e05d10c1fe66c78745" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cap-fs-ext", "cap-std", "fd-lock", @@ -5333,12 +5354,12 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.24.0" +version = "3.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.1", "once_cell", "rustix 1.1.3", "windows-sys 0.61.2", @@ -5454,7 +5475,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5465,7 +5486,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5578,7 +5599,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5760,9 +5781,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ "winnow", ] @@ -5862,7 +5883,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "futures-core", "futures-util", @@ -5882,7 +5903,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "futures-util", "http 1.4.0", @@ -5927,7 +5948,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6074,9 +6095,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" @@ -6107,9 +6128,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unicode-xid" @@ -6178,11 +6199,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.1", "js-sys", "serde_core", "wasm-bindgen", @@ -6252,7 +6273,16 @@ version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.46.0", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", ] [[package]] @@ -6310,7 +6340,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "wasm-bindgen-shared", ] @@ -6343,6 +6373,28 @@ dependencies = [ "wasmparser 0.244.0", ] +[[package]] +name = "wasm-encoder" +version = "0.245.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9dca005e69bf015e45577e415b9af8c67e8ee3c0e38b5b0add5aa92581ed5c" +dependencies = [ + "leb128fmt", + "wasmparser 0.245.1", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder 0.244.0", + "wasmparser 0.244.0", +] + [[package]] name = "wasm-streams" version = "0.4.2" @@ -6363,7 +6415,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d07b6a3b550fefa1a914b6d54fc175dd11c3392da11eee604e6ffc759805d25" dependencies = [ "ahash 0.8.12", - "bitflags 2.10.0", + "bitflags 2.11.0", "hashbrown 0.14.5", "indexmap 2.13.0", "semver", @@ -6376,7 +6428,7 @@ version = "0.221.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d06bfa36ab3ac2be0dee563380147a5b81ba10dd8885d7fbbc9eb574be67d185" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "hashbrown 0.15.5", "indexmap 2.13.0", "semver", @@ -6389,7 +6441,19 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver", +] + +[[package]] +name = "wasmparser" +version = "0.245.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f08c9adee0428b7bddf3890fc27e015ac4b761cc608c822667102b8bfd6995e" +dependencies = [ + "bitflags 2.11.0", "indexmap 2.13.0", "semver", ] @@ -6414,7 +6478,7 @@ dependencies = [ "addr2line", "anyhow", "async-trait", - "bitflags 2.10.0", + "bitflags 2.11.0", "bumpalo", "cc", "cfg-if", @@ -6500,10 +6564,10 @@ dependencies = [ "anyhow", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "wasmtime-component-util", "wasmtime-wit-bindgen", - "wit-parser", + "wit-parser 0.221.3", ] [[package]] @@ -6616,7 +6680,7 @@ checksum = "1e91092e6cf77390eeccee273846a9327f3e8f91c3c6280f60f37809f0e62d29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6627,7 +6691,7 @@ checksum = "1a8e04b9a4c68ad018b330a4f4914b82b01dc3582d715ce21a93564c7f26b19f" dependencies = [ "anyhow", "async-trait", - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "cap-fs-ext", "cap-net-ext", @@ -6675,7 +6739,7 @@ dependencies = [ "anyhow", "heck", "indexmap 2.13.0", - "wit-parser", + "wit-parser 0.221.3", ] [[package]] @@ -6689,24 +6753,24 @@ dependencies = [ [[package]] name = "wast" -version = "244.0.0" +version = "245.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e7b9f9e23311275920e3d6b56d64137c160cf8af4f84a7283b36cfecbf4acb" +checksum = "28cf1149285569120b8ce39db8b465e8a2b55c34cbb586bd977e43e2bc7300bf" dependencies = [ "bumpalo", "leb128fmt", "memchr", - "unicode-width 0.2.0", - "wasm-encoder 0.244.0", + "unicode-width 0.2.2", + "wasm-encoder 0.245.1", ] [[package]] name = "wat" -version = "1.244.0" +version = "1.245.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf35b87ed352f9ab6cd0732abde5a67dd6153dfd02c493e61459218b19456fa" +checksum = "cd48d1679b6858988cb96b154dda0ec5bbb09275b71db46057be37332d5477be" dependencies = [ - "wast 244.0.0", + "wast 245.0.1", ] [[package]] @@ -6755,11 +6819,13 @@ dependencies = [ [[package]] name = "whoami" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fae98cf96deed1b7572272dfc777713c249ae40aa1cf8862e091e8b745f5361" +checksum = "d6a5b12f9df4f978d2cfdb1bd3bac52433f44393342d7ee9c25f5a1c14c0f45d" dependencies = [ + "libc", "libredox", + "objc2-system-configuration", "wasite", "web-sys", ] @@ -6772,7 +6838,7 @@ checksum = "3b23e3dc273d1e35cab9f38a5f76487aeeedcfa6a3fb594e209ee7b6f8b41dcc" dependencies = [ "anyhow", "async-trait", - "bitflags 2.10.0", + "bitflags 2.11.0", "thiserror 1.0.69", "tracing", "wasmtime", @@ -6790,7 +6856,7 @@ dependencies = [ "proc-macro2", "quote", "shellexpand", - "syn 2.0.114", + "syn 2.0.116", "witx", ] @@ -6802,7 +6868,7 @@ checksum = "e882267ac583e013a38a5aaeb83a49b219456ba3aa6e6772440f7213b176e8ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "wiggle-generate", ] @@ -6875,7 +6941,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6886,7 +6952,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -7170,7 +7236,7 @@ version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "windows-sys 0.59.0", ] @@ -7180,6 +7246,76 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser 0.244.0", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.116", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.116", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder 0.244.0", + "wasm-metadata", + "wasmparser 0.244.0", + "wit-parser 0.244.0", +] + [[package]] name = "wit-parser" version = "0.221.3" @@ -7198,6 +7334,24 @@ dependencies = [ "wasmparser 0.221.3", ] +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.244.0", +] + [[package]] name = "witx" version = "0.9.1" @@ -7270,7 +7424,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "synstructure", ] @@ -7322,7 +7476,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "zvariant_utils", ] @@ -7349,11 +7503,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.37" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7456cf00f0685ad319c5b1693f291a650eaf345e941d082fc4e03df8a03996ac" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ - "zerocopy-derive 0.8.37", + "zerocopy-derive 0.8.39", ] [[package]] @@ -7364,18 +7518,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "zerocopy-derive" -version = "0.8.37" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1328722bbf2115db7e19d69ebcc15e795719e2d66b60827c6a69a117365e37a0" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -7395,7 +7549,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "synstructure", ] @@ -7435,14 +7589,14 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "zmij" -version = "1.0.19" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zstd" @@ -7494,7 +7648,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "zvariant_utils", ] @@ -7506,5 +7660,5 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] diff --git a/Cargo.toml b/Cargo.toml index c31b5e50..665aaf0f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -148,6 +148,7 @@ http-body-util = "0.1" bytes = "1" base64 = "0.22.1" mime_guess = "2.0.5" +clap_complete = "4.5.0" # HTML to Markdown conversion (feature gated) html-to-markdown-rs = { version = "2.3", optional = true } diff --git a/ironclaw.bash b/ironclaw.bash new file mode 100644 index 00000000..bf675941 --- /dev/null +++ b/ironclaw.bash @@ -0,0 +1,3053 @@ +_ironclaw() { + local i cur prev opts cmd + COMPREPLY=() + if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then + cur="$2" + else + cur="${COMP_WORDS[COMP_CWORD]}" + fi + prev="$3" + cmd="" + opts="" + + for i in "${COMP_WORDS[@]:0:COMP_CWORD}" + do + case "${cmd},${i}" in + ",$1") + cmd="ironclaw" + ;; + ironclaw,claude-bridge) + cmd="ironclaw__claude__bridge" + ;; + ironclaw,completion) + cmd="ironclaw__completion" + ;; + ironclaw,config) + cmd="ironclaw__config" + ;; + ironclaw,doctor) + cmd="ironclaw__doctor" + ;; + ironclaw,help) + cmd="ironclaw__help" + ;; + ironclaw,mcp) + cmd="ironclaw__mcp" + ;; + ironclaw,memory) + cmd="ironclaw__memory" + ;; + ironclaw,onboard) + cmd="ironclaw__onboard" + ;; + ironclaw,pairing) + cmd="ironclaw__pairing" + ;; + ironclaw,run) + cmd="ironclaw__run" + ;; + ironclaw,service) + cmd="ironclaw__service" + ;; + ironclaw,status) + cmd="ironclaw__status" + ;; + ironclaw,tool) + cmd="ironclaw__tool" + ;; + ironclaw,worker) + cmd="ironclaw__worker" + ;; + ironclaw__config,get) + cmd="ironclaw__config__get" + ;; + ironclaw__config,help) + cmd="ironclaw__config__help" + ;; + ironclaw__config,init) + cmd="ironclaw__config__init" + ;; + ironclaw__config,list) + cmd="ironclaw__config__list" + ;; + ironclaw__config,path) + cmd="ironclaw__config__path" + ;; + ironclaw__config,reset) + cmd="ironclaw__config__reset" + ;; + ironclaw__config,set) + cmd="ironclaw__config__set" + ;; + ironclaw__config__help,get) + cmd="ironclaw__config__help__get" + ;; + ironclaw__config__help,help) + cmd="ironclaw__config__help__help" + ;; + ironclaw__config__help,init) + cmd="ironclaw__config__help__init" + ;; + ironclaw__config__help,list) + cmd="ironclaw__config__help__list" + ;; + ironclaw__config__help,path) + cmd="ironclaw__config__help__path" + ;; + ironclaw__config__help,reset) + cmd="ironclaw__config__help__reset" + ;; + ironclaw__config__help,set) + cmd="ironclaw__config__help__set" + ;; + ironclaw__help,claude-bridge) + cmd="ironclaw__help__claude__bridge" + ;; + ironclaw__help,completion) + cmd="ironclaw__help__completion" + ;; + ironclaw__help,config) + cmd="ironclaw__help__config" + ;; + ironclaw__help,doctor) + cmd="ironclaw__help__doctor" + ;; + ironclaw__help,help) + cmd="ironclaw__help__help" + ;; + ironclaw__help,mcp) + cmd="ironclaw__help__mcp" + ;; + ironclaw__help,memory) + cmd="ironclaw__help__memory" + ;; + ironclaw__help,onboard) + cmd="ironclaw__help__onboard" + ;; + ironclaw__help,pairing) + cmd="ironclaw__help__pairing" + ;; + ironclaw__help,run) + cmd="ironclaw__help__run" + ;; + ironclaw__help,service) + cmd="ironclaw__help__service" + ;; + ironclaw__help,status) + cmd="ironclaw__help__status" + ;; + ironclaw__help,tool) + cmd="ironclaw__help__tool" + ;; + ironclaw__help,worker) + cmd="ironclaw__help__worker" + ;; + ironclaw__help__config,get) + cmd="ironclaw__help__config__get" + ;; + ironclaw__help__config,init) + cmd="ironclaw__help__config__init" + ;; + ironclaw__help__config,list) + cmd="ironclaw__help__config__list" + ;; + ironclaw__help__config,path) + cmd="ironclaw__help__config__path" + ;; + ironclaw__help__config,reset) + cmd="ironclaw__help__config__reset" + ;; + ironclaw__help__config,set) + cmd="ironclaw__help__config__set" + ;; + ironclaw__help__mcp,add) + cmd="ironclaw__help__mcp__add" + ;; + ironclaw__help__mcp,auth) + cmd="ironclaw__help__mcp__auth" + ;; + ironclaw__help__mcp,list) + cmd="ironclaw__help__mcp__list" + ;; + ironclaw__help__mcp,remove) + cmd="ironclaw__help__mcp__remove" + ;; + ironclaw__help__mcp,test) + cmd="ironclaw__help__mcp__test" + ;; + ironclaw__help__mcp,toggle) + cmd="ironclaw__help__mcp__toggle" + ;; + ironclaw__help__memory,read) + cmd="ironclaw__help__memory__read" + ;; + ironclaw__help__memory,search) + cmd="ironclaw__help__memory__search" + ;; + ironclaw__help__memory,status) + cmd="ironclaw__help__memory__status" + ;; + ironclaw__help__memory,tree) + cmd="ironclaw__help__memory__tree" + ;; + ironclaw__help__memory,write) + cmd="ironclaw__help__memory__write" + ;; + ironclaw__help__pairing,approve) + cmd="ironclaw__help__pairing__approve" + ;; + ironclaw__help__pairing,list) + cmd="ironclaw__help__pairing__list" + ;; + ironclaw__help__service,install) + cmd="ironclaw__help__service__install" + ;; + ironclaw__help__service,start) + cmd="ironclaw__help__service__start" + ;; + ironclaw__help__service,status) + cmd="ironclaw__help__service__status" + ;; + ironclaw__help__service,stop) + cmd="ironclaw__help__service__stop" + ;; + ironclaw__help__service,uninstall) + cmd="ironclaw__help__service__uninstall" + ;; + ironclaw__help__tool,auth) + cmd="ironclaw__help__tool__auth" + ;; + ironclaw__help__tool,info) + cmd="ironclaw__help__tool__info" + ;; + ironclaw__help__tool,install) + cmd="ironclaw__help__tool__install" + ;; + ironclaw__help__tool,list) + cmd="ironclaw__help__tool__list" + ;; + ironclaw__help__tool,remove) + cmd="ironclaw__help__tool__remove" + ;; + ironclaw__mcp,add) + cmd="ironclaw__mcp__add" + ;; + ironclaw__mcp,auth) + cmd="ironclaw__mcp__auth" + ;; + ironclaw__mcp,help) + cmd="ironclaw__mcp__help" + ;; + ironclaw__mcp,list) + cmd="ironclaw__mcp__list" + ;; + ironclaw__mcp,remove) + cmd="ironclaw__mcp__remove" + ;; + ironclaw__mcp,test) + cmd="ironclaw__mcp__test" + ;; + ironclaw__mcp,toggle) + cmd="ironclaw__mcp__toggle" + ;; + ironclaw__mcp__help,add) + cmd="ironclaw__mcp__help__add" + ;; + ironclaw__mcp__help,auth) + cmd="ironclaw__mcp__help__auth" + ;; + ironclaw__mcp__help,help) + cmd="ironclaw__mcp__help__help" + ;; + ironclaw__mcp__help,list) + cmd="ironclaw__mcp__help__list" + ;; + ironclaw__mcp__help,remove) + cmd="ironclaw__mcp__help__remove" + ;; + ironclaw__mcp__help,test) + cmd="ironclaw__mcp__help__test" + ;; + ironclaw__mcp__help,toggle) + cmd="ironclaw__mcp__help__toggle" + ;; + ironclaw__memory,help) + cmd="ironclaw__memory__help" + ;; + ironclaw__memory,read) + cmd="ironclaw__memory__read" + ;; + ironclaw__memory,search) + cmd="ironclaw__memory__search" + ;; + ironclaw__memory,status) + cmd="ironclaw__memory__status" + ;; + ironclaw__memory,tree) + cmd="ironclaw__memory__tree" + ;; + ironclaw__memory,write) + cmd="ironclaw__memory__write" + ;; + ironclaw__memory__help,help) + cmd="ironclaw__memory__help__help" + ;; + ironclaw__memory__help,read) + cmd="ironclaw__memory__help__read" + ;; + ironclaw__memory__help,search) + cmd="ironclaw__memory__help__search" + ;; + ironclaw__memory__help,status) + cmd="ironclaw__memory__help__status" + ;; + ironclaw__memory__help,tree) + cmd="ironclaw__memory__help__tree" + ;; + ironclaw__memory__help,write) + cmd="ironclaw__memory__help__write" + ;; + ironclaw__pairing,approve) + cmd="ironclaw__pairing__approve" + ;; + ironclaw__pairing,help) + cmd="ironclaw__pairing__help" + ;; + ironclaw__pairing,list) + cmd="ironclaw__pairing__list" + ;; + ironclaw__pairing__help,approve) + cmd="ironclaw__pairing__help__approve" + ;; + ironclaw__pairing__help,help) + cmd="ironclaw__pairing__help__help" + ;; + ironclaw__pairing__help,list) + cmd="ironclaw__pairing__help__list" + ;; + ironclaw__service,help) + cmd="ironclaw__service__help" + ;; + ironclaw__service,install) + cmd="ironclaw__service__install" + ;; + ironclaw__service,start) + cmd="ironclaw__service__start" + ;; + ironclaw__service,status) + cmd="ironclaw__service__status" + ;; + ironclaw__service,stop) + cmd="ironclaw__service__stop" + ;; + ironclaw__service,uninstall) + cmd="ironclaw__service__uninstall" + ;; + ironclaw__service__help,help) + cmd="ironclaw__service__help__help" + ;; + ironclaw__service__help,install) + cmd="ironclaw__service__help__install" + ;; + ironclaw__service__help,start) + cmd="ironclaw__service__help__start" + ;; + ironclaw__service__help,status) + cmd="ironclaw__service__help__status" + ;; + ironclaw__service__help,stop) + cmd="ironclaw__service__help__stop" + ;; + ironclaw__service__help,uninstall) + cmd="ironclaw__service__help__uninstall" + ;; + ironclaw__tool,auth) + cmd="ironclaw__tool__auth" + ;; + ironclaw__tool,help) + cmd="ironclaw__tool__help" + ;; + ironclaw__tool,info) + cmd="ironclaw__tool__info" + ;; + ironclaw__tool,install) + cmd="ironclaw__tool__install" + ;; + ironclaw__tool,list) + cmd="ironclaw__tool__list" + ;; + ironclaw__tool,remove) + cmd="ironclaw__tool__remove" + ;; + ironclaw__tool__help,auth) + cmd="ironclaw__tool__help__auth" + ;; + ironclaw__tool__help,help) + cmd="ironclaw__tool__help__help" + ;; + ironclaw__tool__help,info) + cmd="ironclaw__tool__help__info" + ;; + ironclaw__tool__help,install) + cmd="ironclaw__tool__help__install" + ;; + ironclaw__tool__help,list) + cmd="ironclaw__tool__help__list" + ;; + ironclaw__tool__help,remove) + cmd="ironclaw__tool__help__remove" + ;; + *) + ;; + esac + done + + case "${cmd}" in + ironclaw) + opts="-m -c -h -V --cli-only --no-db --message --config --no-onboard --help --version run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__claude__bridge) + opts="-m -c -h --job-id --orchestrator-url --max-turns --model --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --job-id) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --orchestrator-url) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --max-turns) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --model) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__completion) + opts="-m -c -h --shell --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --shell) + COMPREPLY=($(compgen -W "bash zsh fish powershell elvish" -- "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help init list get set reset path help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__get) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help) + opts="init list get set reset path help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help__get) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help__init) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help__path) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help__reset) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__help__set) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__init) + opts="-o -m -c -h --output --force --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --output) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -o) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__list) + opts="-f -m -c -h --filter --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --filter) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -f) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__path) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__reset) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__config__set) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__doctor) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help) + opts="run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__claude__bridge) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__completion) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__config) + opts="init list get set reset path" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__config__get) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__config__init) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__config__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__config__path) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__config__reset) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__config__set) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__doctor) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__mcp) + opts="add remove list auth test toggle" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__mcp__add) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__mcp__auth) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__mcp__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__mcp__remove) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__mcp__test) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__mcp__toggle) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__memory) + opts="search read write tree status" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__memory__read) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__memory__search) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__memory__status) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__memory__tree) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__memory__write) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__onboard) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__pairing) + opts="list approve" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__pairing__approve) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__pairing__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__run) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__service) + opts="install start stop status uninstall" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__service__install) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__service__start) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__service__status) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__service__stop) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__service__uninstall) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__status) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__tool) + opts="install list remove info auth" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__tool__auth) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__tool__info) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__tool__install) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__tool__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__tool__remove) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__help__worker) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help add remove list auth test toggle help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__add) + opts="-m -c -h --client-id --auth-url --token-url --scopes --description --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --client-id) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --auth-url) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --token-url) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --scopes) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --description) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__auth) + opts="-u -m -c -h --user --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --user) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -u) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help) + opts="add remove list auth test toggle help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help__add) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help__auth) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help__remove) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help__test) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__help__toggle) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__list) + opts="-v -m -c -h --verbose --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__remove) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__test) + opts="-u -m -c -h --user --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --user) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -u) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__mcp__toggle) + opts="-m -c -h --enable --disable --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help search read write tree status help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__help) + opts="search read write tree status help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__help__read) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__help__search) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__help__status) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__help__tree) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__help__write) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__read) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__search) + opts="-l -m -c -h --limit --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --limit) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -l) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__status) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__tree) + opts="-d -m -c -h --depth --cli-only --no-db --message --config --no-onboard --help [PATH]" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --depth) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -d) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__memory__write) + opts="-a -m -c -h --append --cli-only --no-db --message --config --no-onboard --help [CONTENT]" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__onboard) + opts="-m -c -h --skip-auth --channels-only --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__pairing) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help list approve help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__pairing__approve) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__pairing__help) + opts="list approve help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__pairing__help__approve) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__pairing__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__pairing__help__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__pairing__list) + opts="-m -c -h --json --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__run) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help install start stop status uninstall help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__help) + opts="install start stop status uninstall help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__help__install) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__help__start) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__help__status) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__help__stop) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__help__uninstall) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__install) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__start) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__status) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__stop) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__service__uninstall) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__status) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool) + opts="-m -c -h --cli-only --no-db --message --config --no-onboard --help install list remove info auth help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__auth) + opts="-d -u -m -c -h --dir --user --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --dir) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -d) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --user) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -u) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__help) + opts="install list remove info auth help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__help__auth) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__help__info) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__help__install) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__help__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__help__remove) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__info) + opts="-d -m -c -h --dir --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --dir) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -d) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__install) + opts="-n -t -f -m -c -h --name --capabilities --target --release --skip-build --force --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --name) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -n) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --capabilities) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --target) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -t) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__list) + opts="-d -v -m -c -h --dir --verbose --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --dir) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -d) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__tool__remove) + opts="-d -m -c -h --dir --cli-only --no-db --message --config --no-onboard --help " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --dir) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -d) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ironclaw__worker) + opts="-m -c -h --job-id --orchestrator-url --max-iterations --cli-only --no-db --message --config --no-onboard --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --job-id) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --orchestrator-url) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --max-iterations) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --message) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + esac +} + +if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then + complete -F _ironclaw -o nosort -o bashdefault -o default ironclaw +else + complete -F _ironclaw -o bashdefault -o default ironclaw +fi diff --git a/ironclaw.fish b/ironclaw.fish new file mode 100644 index 00000000..f83b0563 --- /dev/null +++ b/ironclaw.fish @@ -0,0 +1,455 @@ +# Print an optspec for argparse to handle cmd's options that are independent of any subcommand. +function __fish_ironclaw_global_optspecs + string join \n cli-only no-db m/message= c/config= no-onboard h/help V/version +end + +function __fish_ironclaw_needs_command + # Figure out if the current invocation already has a command. + set -l cmd (commandline -opc) + set -e cmd[1] + argparse -s (__fish_ironclaw_global_optspecs) -- $cmd 2>/dev/null + or return + if set -q argv[1] + # Also print the command, so this can be used to figure out what it is. + echo $argv[1] + return 1 + end + return 0 +end + +function __fish_ironclaw_using_subcommand + set -l cmd (__fish_ironclaw_needs_command) + test -z "$cmd" + and return 1 + contains -- $cmd[1] $argv +end + +complete -c ironclaw -n "__fish_ironclaw_needs_command" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_needs_command" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_needs_command" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -s V -l version -d 'Print version' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "run" -d 'Run the agent (default if no subcommand given)' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "onboard" -d 'Interactive onboarding wizard' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "config" -d 'Manage configuration settings' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "tool" -d 'Manage WASM tools' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "mcp" -d 'Manage MCP servers (hosted tool providers)' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "memory" -d 'Query and manage workspace memory' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "pairing" -d 'DM pairing (approve inbound requests from unknown senders)' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "service" -d 'Manage OS service (launchd / systemd)' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "doctor" -d 'Probe external dependencies and validate configuration' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "status" -d 'Show system health and diagnostics' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "completion" -d 'Generate shell completion scripts' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "worker" -d 'Run as a sandboxed worker inside a Docker container (internal use). This is invoked automatically by the orchestrator, not by users directly' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "claude-bridge" -d 'Run as a Claude Code bridge inside a Docker container (internal use). Spawns the `claude` CLI and streams output back to the orchestrator' +complete -c ironclaw -n "__fish_ironclaw_needs_command" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand run" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand run" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand run" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand run" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand run" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand run" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -l skip-auth -d 'Skip authentication (use existing session)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -l channels-only -d 'Reconfigure channels only' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand onboard" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -f -a "init" -d 'Generate a default config.toml file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -f -a "list" -d 'List all settings and their current values' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -f -a "get" -d 'Get a specific setting value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -f -a "set" -d 'Set a setting value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -f -a "reset" -d 'Reset a setting to its default value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -f -a "path" -d 'Show the settings storage info' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and not __fish_seen_subcommand_from init list get set reset path help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -s o -l output -d 'Output path (default: ~/.ironclaw/config.toml)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -l force -d 'Overwrite existing file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from init" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from list" -s f -l filter -d 'Show only settings matching this prefix (e.g., "agent", "heartbeat")' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from list" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from list" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from list" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from list" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from list" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from list" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from get" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from get" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from get" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from get" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from get" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from get" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from set" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from set" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from set" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from set" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from set" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from set" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from reset" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from reset" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from reset" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from reset" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from reset" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from reset" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from path" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from path" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from path" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from path" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from path" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from path" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from help" -f -a "init" -d 'Generate a default config.toml file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from help" -f -a "list" -d 'List all settings and their current values' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from help" -f -a "get" -d 'Get a specific setting value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from help" -f -a "set" -d 'Set a setting value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from help" -f -a "reset" -d 'Reset a setting to its default value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from help" -f -a "path" -d 'Show the settings storage info' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand config; and __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -f -a "install" -d 'Install a WASM tool from source directory or .wasm file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -f -a "list" -d 'List installed tools' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -f -a "remove" -d 'Remove an installed tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -f -a "info" -d 'Show information about a tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -f -a "auth" -d 'Configure authentication for a tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and not __fish_seen_subcommand_from install list remove info auth help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -s n -l name -d 'Tool name (defaults to directory/file name)' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -l capabilities -d 'Path to capabilities JSON file (auto-detected if not specified)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -s t -l target -d 'Target directory for installation (default: ~/.ironclaw/tools/)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -l release -d 'Build in release mode (default: true)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -l skip-build -d 'Skip compilation (use existing .wasm file)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -s f -l force -d 'Force overwrite if tool already exists' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from install" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -s d -l dir -d 'Directory to list tools from (default: ~/.ironclaw/tools/)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -s v -l verbose -d 'Show detailed information' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from list" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from remove" -s d -l dir -d 'Directory to remove tool from (default: ~/.ironclaw/tools/)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from remove" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from remove" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from remove" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from remove" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from remove" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from remove" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from info" -s d -l dir -d 'Directory to look for tool (default: ~/.ironclaw/tools/)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from info" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from info" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from info" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from info" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from info" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from info" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -s d -l dir -d 'Directory to look for tool (default: ~/.ironclaw/tools/)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -s u -l user -d 'User ID for storing the secret (default: "default")' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from auth" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from help" -f -a "install" -d 'Install a WASM tool from source directory or .wasm file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from help" -f -a "list" -d 'List installed tools' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from help" -f -a "remove" -d 'Remove an installed tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from help" -f -a "info" -d 'Show information about a tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from help" -f -a "auth" -d 'Configure authentication for a tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand tool; and __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -f -a "add" -d 'Add an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -f -a "remove" -d 'Remove an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -f -a "list" -d 'List configured MCP servers' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -f -a "auth" -d 'Authenticate with an MCP server (OAuth flow)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -f -a "test" -d 'Test connection to an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -f -a "toggle" -d 'Enable or disable an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and not __fish_seen_subcommand_from add remove list auth test toggle help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l client-id -d 'OAuth client ID (if authentication is required)' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l auth-url -d 'OAuth authorization URL (optional, can be discovered)' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l token-url -d 'OAuth token URL (optional, can be discovered)' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l scopes -d 'Scopes to request (comma-separated)' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l description -d 'Server description' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from add" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from remove" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from remove" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from remove" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from remove" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from remove" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from remove" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from list" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from list" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from list" -s v -l verbose -d 'Show detailed information' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from list" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from list" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from list" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from list" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from auth" -s u -l user -d 'User ID for storing the token (default: "default")' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from auth" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from auth" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from auth" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from auth" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from auth" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from auth" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from test" -s u -l user -d 'User ID for authentication (default: "default")' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from test" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from test" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from test" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from test" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from test" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from test" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -l enable -d 'Enable the server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -l disable -d 'Disable the server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from toggle" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from help" -f -a "add" -d 'Add an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from help" -f -a "remove" -d 'Remove an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from help" -f -a "list" -d 'List configured MCP servers' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from help" -f -a "auth" -d 'Authenticate with an MCP server (OAuth flow)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from help" -f -a "test" -d 'Test connection to an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from help" -f -a "toggle" -d 'Enable or disable an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand mcp; and __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -f -a "search" -d 'Search workspace memory (hybrid full-text + semantic)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -f -a "read" -d 'Read a file from the workspace' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -f -a "write" -d 'Write content to a workspace file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -f -a "tree" -d 'Show workspace directory tree' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -f -a "status" -d 'Show workspace status (document count, index health)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and not __fish_seen_subcommand_from search read write tree status help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from search" -s l -l limit -d 'Maximum number of results' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from search" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from search" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from search" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from search" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from search" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from search" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from read" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from read" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from read" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from read" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from read" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from read" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from write" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from write" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from write" -s a -l append -d 'Append instead of overwrite' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from write" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from write" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from write" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from write" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from tree" -s d -l depth -d 'Maximum depth to traverse' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from tree" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from tree" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from tree" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from tree" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from tree" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from tree" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from status" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from status" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from status" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from status" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from status" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from status" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from help" -f -a "search" -d 'Search workspace memory (hybrid full-text + semantic)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from help" -f -a "read" -d 'Read a file from the workspace' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from help" -f -a "write" -d 'Write content to a workspace file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from help" -f -a "tree" -d 'Show workspace directory tree' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from help" -f -a "status" -d 'Show workspace status (document count, index health)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand memory; and __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -f -a "list" -d 'List pending pairing requests' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -f -a "approve" -d 'Approve a pairing request by code' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and not __fish_seen_subcommand_from list approve help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from list" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from list" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from list" -l json -d 'Output as JSON' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from list" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from list" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from list" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from list" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from approve" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from approve" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from approve" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from approve" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from approve" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from approve" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from help" -f -a "list" -d 'List pending pairing requests' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from help" -f -a "approve" -d 'Approve a pairing request by code' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand pairing; and __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -f -a "install" -d 'Install the OS service (launchd on macOS, systemd on Linux)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -f -a "start" -d 'Start the installed service' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -f -a "stop" -d 'Stop the running service' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -f -a "status" -d 'Show service status' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -f -a "uninstall" -d 'Uninstall the OS service and remove the unit file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and not __fish_seen_subcommand_from install start stop status uninstall help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from install" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from install" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from install" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from install" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from install" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from install" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from start" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from start" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from start" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from start" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from start" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from start" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from stop" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from stop" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from stop" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from stop" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from stop" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from stop" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from status" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from status" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from status" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from status" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from status" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from status" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from uninstall" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from uninstall" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from uninstall" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from uninstall" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from uninstall" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from uninstall" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from help" -f -a "install" -d 'Install the OS service (launchd on macOS, systemd on Linux)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from help" -f -a "start" -d 'Start the installed service' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from help" -f -a "stop" -d 'Stop the running service' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from help" -f -a "status" -d 'Show service status' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from help" -f -a "uninstall" -d 'Uninstall the OS service and remove the unit file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand service; and __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand doctor" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand doctor" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand doctor" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand doctor" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand doctor" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand doctor" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand status" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand status" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand status" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand status" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand status" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand status" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand completion" -l shell -d 'The shell to generate completions for' -r -f -a "bash\t'' +zsh\t'' +fish\t'' +powershell\t'' +elvish\t''" +complete -c ironclaw -n "__fish_ironclaw_using_subcommand completion" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand completion" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand completion" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand completion" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand completion" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand completion" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -l job-id -d 'Job ID to execute' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -l orchestrator-url -d 'URL of the orchestrator\'s internal API' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -l max-iterations -d 'Maximum iterations before stopping' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand worker" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -l job-id -d 'Job ID to execute' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -l orchestrator-url -d 'URL of the orchestrator\'s internal API' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -l max-turns -d 'Maximum agentic turns for Claude Code' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -l model -d 'Claude model to use (e.g. "sonnet", "opus")' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -s m -l message -d 'Single message mode - send one message and exit' -r +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -s c -l config -d 'Configuration file path (optional, uses env vars by default)' -r -F +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -l cli-only -d 'Run in interactive CLI mode only (disable other channels)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -l no-db -d 'Skip database connection (for testing)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -l no-onboard -d 'Skip first-run onboarding check' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand claude-bridge" -s h -l help -d 'Print help' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "run" -d 'Run the agent (default if no subcommand given)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "onboard" -d 'Interactive onboarding wizard' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "config" -d 'Manage configuration settings' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "tool" -d 'Manage WASM tools' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "mcp" -d 'Manage MCP servers (hosted tool providers)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "memory" -d 'Query and manage workspace memory' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "pairing" -d 'DM pairing (approve inbound requests from unknown senders)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "service" -d 'Manage OS service (launchd / systemd)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "doctor" -d 'Probe external dependencies and validate configuration' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "status" -d 'Show system health and diagnostics' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "completion" -d 'Generate shell completion scripts' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "worker" -d 'Run as a sandboxed worker inside a Docker container (internal use). This is invoked automatically by the orchestrator, not by users directly' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "claude-bridge" -d 'Run as a Claude Code bridge inside a Docker container (internal use). Spawns the `claude` CLI and streams output back to the orchestrator' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and not __fish_seen_subcommand_from run onboard config tool mcp memory pairing service doctor status completion worker claude-bridge help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from config" -f -a "init" -d 'Generate a default config.toml file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from config" -f -a "list" -d 'List all settings and their current values' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from config" -f -a "get" -d 'Get a specific setting value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from config" -f -a "set" -d 'Set a setting value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from config" -f -a "reset" -d 'Reset a setting to its default value' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from config" -f -a "path" -d 'Show the settings storage info' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from tool" -f -a "install" -d 'Install a WASM tool from source directory or .wasm file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from tool" -f -a "list" -d 'List installed tools' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from tool" -f -a "remove" -d 'Remove an installed tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from tool" -f -a "info" -d 'Show information about a tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from tool" -f -a "auth" -d 'Configure authentication for a tool' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from mcp" -f -a "add" -d 'Add an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from mcp" -f -a "remove" -d 'Remove an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from mcp" -f -a "list" -d 'List configured MCP servers' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from mcp" -f -a "auth" -d 'Authenticate with an MCP server (OAuth flow)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from mcp" -f -a "test" -d 'Test connection to an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from mcp" -f -a "toggle" -d 'Enable or disable an MCP server' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from memory" -f -a "search" -d 'Search workspace memory (hybrid full-text + semantic)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from memory" -f -a "read" -d 'Read a file from the workspace' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from memory" -f -a "write" -d 'Write content to a workspace file' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from memory" -f -a "tree" -d 'Show workspace directory tree' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from memory" -f -a "status" -d 'Show workspace status (document count, index health)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from pairing" -f -a "list" -d 'List pending pairing requests' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from pairing" -f -a "approve" -d 'Approve a pairing request by code' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from service" -f -a "install" -d 'Install the OS service (launchd on macOS, systemd on Linux)' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from service" -f -a "start" -d 'Start the installed service' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from service" -f -a "stop" -d 'Stop the running service' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from service" -f -a "status" -d 'Show service status' +complete -c ironclaw -n "__fish_ironclaw_using_subcommand help; and __fish_seen_subcommand_from service" -f -a "uninstall" -d 'Uninstall the OS service and remove the unit file' diff --git a/ironclaw.zsh b/ironclaw.zsh new file mode 100644 index 00000000..9ad1e847 --- /dev/null +++ b/ironclaw.zsh @@ -0,0 +1,2027 @@ +#compdef ironclaw + +autoload -U is-at-least + +_ironclaw() { + typeset -A opt_args + typeset -a _arguments_options + local ret=1 + + if is-at-least 5.2; then + _arguments_options=(-s -S -C) + else + _arguments_options=(-s -C) + fi + + local context curcontext="$curcontext" state line + _arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +'-V[Print version]' \ +'--version[Print version]' \ +":: :_ironclaw_commands" \ +"*::: :->ironclaw" \ +&& ret=0 + case $state in + (ironclaw) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-command-$line[1]:" + case $line[1] in + (run) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(onboard) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--skip-auth[Skip authentication (use existing session)]' \ +'--channels-only[Reconfigure channels only]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(config) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +":: :_ironclaw__config_commands" \ +"*::: :->config" \ +&& ret=0 + + case $state in + (config) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-config-command-$line[1]:" + case $line[1] in + (init) +_arguments "${_arguments_options[@]}" : \ +'-o+[Output path (default\: ~/.ironclaw/config.toml)]:OUTPUT:_files' \ +'--output=[Output path (default\: ~/.ironclaw/config.toml)]:OUTPUT:_files' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--force[Overwrite existing file]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +'-f+[Show only settings matching this prefix (e.g., "agent", "heartbeat")]:FILTER:_default' \ +'--filter=[Show only settings matching this prefix (e.g., "agent", "heartbeat")]:FILTER:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(get) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':path -- Setting path (e.g., "agent.max_parallel_jobs"):_default' \ +&& ret=0 +;; +(set) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':path -- Setting path (e.g., "agent.max_parallel_jobs"):_default' \ +':value -- Value to set:_default' \ +&& ret=0 +;; +(reset) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':path -- Setting path (e.g., "agent.max_parallel_jobs"):_default' \ +&& ret=0 +;; +(path) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__config__help_commands" \ +"*::: :->help" \ +&& ret=0 + + case $state in + (help) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-config-help-command-$line[1]:" + case $line[1] in + (init) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(get) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(set) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(reset) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(path) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; + esac + ;; +esac +;; +(tool) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +":: :_ironclaw__tool_commands" \ +"*::: :->tool" \ +&& ret=0 + + case $state in + (tool) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-tool-command-$line[1]:" + case $line[1] in + (install) +_arguments "${_arguments_options[@]}" : \ +'-n+[Tool name (defaults to directory/file name)]:NAME:_default' \ +'--name=[Tool name (defaults to directory/file name)]:NAME:_default' \ +'--capabilities=[Path to capabilities JSON file (auto-detected if not specified)]:CAPABILITIES:_files' \ +'-t+[Target directory for installation (default\: ~/.ironclaw/tools/)]:TARGET:_files' \ +'--target=[Target directory for installation (default\: ~/.ironclaw/tools/)]:TARGET:_files' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--release[Build in release mode (default\: true)]' \ +'--skip-build[Skip compilation (use existing .wasm file)]' \ +'-f[Force overwrite if tool already exists]' \ +'--force[Force overwrite if tool already exists]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':path -- Path to tool source directory (with Cargo.toml) or .wasm file:_files' \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +'-d+[Directory to list tools from (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'--dir=[Directory to list tools from (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'-v[Show detailed information]' \ +'--verbose[Show detailed information]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(remove) +_arguments "${_arguments_options[@]}" : \ +'-d+[Directory to remove tool from (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'--dir=[Directory to remove tool from (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name -- Name of the tool to remove:_default' \ +&& ret=0 +;; +(info) +_arguments "${_arguments_options[@]}" : \ +'-d+[Directory to look for tool (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'--dir=[Directory to look for tool (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name_or_path -- Name of the tool or path to .wasm file:_default' \ +&& ret=0 +;; +(auth) +_arguments "${_arguments_options[@]}" : \ +'-d+[Directory to look for tool (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'--dir=[Directory to look for tool (default\: ~/.ironclaw/tools/)]:DIR:_files' \ +'-u+[User ID for storing the secret (default\: "default")]:USER:_default' \ +'--user=[User ID for storing the secret (default\: "default")]:USER:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name -- Name of the tool:_default' \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__tool__help_commands" \ +"*::: :->help" \ +&& ret=0 + + case $state in + (help) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-tool-help-command-$line[1]:" + case $line[1] in + (install) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(remove) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(info) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(auth) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; + esac + ;; +esac +;; +(mcp) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +":: :_ironclaw__mcp_commands" \ +"*::: :->mcp" \ +&& ret=0 + + case $state in + (mcp) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-mcp-command-$line[1]:" + case $line[1] in + (add) +_arguments "${_arguments_options[@]}" : \ +'--client-id=[OAuth client ID (if authentication is required)]:CLIENT_ID:_default' \ +'--auth-url=[OAuth authorization URL (optional, can be discovered)]:AUTH_URL:_default' \ +'--token-url=[OAuth token URL (optional, can be discovered)]:TOKEN_URL:_default' \ +'--scopes=[Scopes to request (comma-separated)]:SCOPES:_default' \ +'--description=[Server description]:DESCRIPTION:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name -- Server name (e.g., "notion", "github"):_default' \ +':url -- Server URL (e.g., "https\://mcp.notion.com"):_default' \ +&& ret=0 +;; +(remove) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name -- Server name to remove:_default' \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'-v[Show detailed information]' \ +'--verbose[Show detailed information]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(auth) +_arguments "${_arguments_options[@]}" : \ +'-u+[User ID for storing the token (default\: "default")]:USER:_default' \ +'--user=[User ID for storing the token (default\: "default")]:USER:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name -- Server name to authenticate:_default' \ +&& ret=0 +;; +(test) +_arguments "${_arguments_options[@]}" : \ +'-u+[User ID for authentication (default\: "default")]:USER:_default' \ +'--user=[User ID for authentication (default\: "default")]:USER:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name -- Server name to test:_default' \ +&& ret=0 +;; +(toggle) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'(--disable)--enable[Enable the server]' \ +'(--enable)--disable[Disable the server]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':name -- Server name:_default' \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__mcp__help_commands" \ +"*::: :->help" \ +&& ret=0 + + case $state in + (help) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-mcp-help-command-$line[1]:" + case $line[1] in + (add) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(remove) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(auth) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(test) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(toggle) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; + esac + ;; +esac +;; +(memory) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +":: :_ironclaw__memory_commands" \ +"*::: :->memory" \ +&& ret=0 + + case $state in + (memory) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-memory-command-$line[1]:" + case $line[1] in + (search) +_arguments "${_arguments_options[@]}" : \ +'-l+[Maximum number of results]:LIMIT:_default' \ +'--limit=[Maximum number of results]:LIMIT:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':query -- Search query:_default' \ +&& ret=0 +;; +(read) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':path -- File path (e.g., "MEMORY.md", "daily/2024-01-15.md"):_default' \ +&& ret=0 +;; +(write) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'-a[Append instead of overwrite]' \ +'--append[Append instead of overwrite]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':path -- File path (e.g., "notes/idea.md"):_default' \ +'::content -- Content to write (omit to read from stdin):_default' \ +&& ret=0 +;; +(tree) +_arguments "${_arguments_options[@]}" : \ +'-d+[Maximum depth to traverse]:DEPTH:_default' \ +'--depth=[Maximum depth to traverse]:DEPTH:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +'::path -- Root path to start from:_default' \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__memory__help_commands" \ +"*::: :->help" \ +&& ret=0 + + case $state in + (help) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-memory-help-command-$line[1]:" + case $line[1] in + (search) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(read) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(write) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(tree) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; + esac + ;; +esac +;; +(pairing) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +":: :_ironclaw__pairing_commands" \ +"*::: :->pairing" \ +&& ret=0 + + case $state in + (pairing) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-pairing-command-$line[1]:" + case $line[1] in + (list) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--json[Output as JSON]' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':channel -- Channel name (e.g., telegram, slack):_default' \ +&& ret=0 +;; +(approve) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +':channel -- Channel name (e.g., telegram, slack):_default' \ +':code -- Pairing code (e.g., ABC12345):_default' \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__pairing__help_commands" \ +"*::: :->help" \ +&& ret=0 + + case $state in + (help) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-pairing-help-command-$line[1]:" + case $line[1] in + (list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(approve) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; + esac + ;; +esac +;; +(service) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +":: :_ironclaw__service_commands" \ +"*::: :->service" \ +&& ret=0 + + case $state in + (service) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-service-command-$line[1]:" + case $line[1] in + (install) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(start) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(stop) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(uninstall) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__service__help_commands" \ +"*::: :->help" \ +&& ret=0 + + case $state in + (help) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-service-help-command-$line[1]:" + case $line[1] in + (install) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(start) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(stop) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(uninstall) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; + esac + ;; +esac +;; +(doctor) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(completion) +_arguments "${_arguments_options[@]}" : \ +'--shell=[The shell to generate completions for]:SHELL:(bash zsh fish powershell elvish)' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(worker) +_arguments "${_arguments_options[@]}" : \ +'--job-id=[Job ID to execute]:JOB_ID:_default' \ +'--orchestrator-url=[URL of the orchestrator'\''s internal API]:ORCHESTRATOR_URL:_default' \ +'--max-iterations=[Maximum iterations before stopping]:MAX_ITERATIONS:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(claude-bridge) +_arguments "${_arguments_options[@]}" : \ +'--job-id=[Job ID to execute]:JOB_ID:_default' \ +'--orchestrator-url=[URL of the orchestrator'\''s internal API]:ORCHESTRATOR_URL:_default' \ +'--max-turns=[Maximum agentic turns for Claude Code]:MAX_TURNS:_default' \ +'--model=[Claude model to use (e.g. "sonnet", "opus")]:MODEL:_default' \ +'-m+[Single message mode - send one message and exit]:MESSAGE:_default' \ +'--message=[Single message mode - send one message and exit]:MESSAGE:_default' \ +'-c+[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--config=[Configuration file path (optional, uses env vars by default)]:CONFIG:_files' \ +'--cli-only[Run in interactive CLI mode only (disable other channels)]' \ +'--no-db[Skip database connection (for testing)]' \ +'--no-onboard[Skip first-run onboarding check]' \ +'-h[Print help]' \ +'--help[Print help]' \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__help_commands" \ +"*::: :->help" \ +&& ret=0 + + case $state in + (help) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-help-command-$line[1]:" + case $line[1] in + (run) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(onboard) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(config) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__help__config_commands" \ +"*::: :->config" \ +&& ret=0 + + case $state in + (config) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-help-config-command-$line[1]:" + case $line[1] in + (init) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(get) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(set) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(reset) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(path) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; +(tool) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__help__tool_commands" \ +"*::: :->tool" \ +&& ret=0 + + case $state in + (tool) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-help-tool-command-$line[1]:" + case $line[1] in + (install) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(remove) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(info) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(auth) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; +(mcp) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__help__mcp_commands" \ +"*::: :->mcp" \ +&& ret=0 + + case $state in + (mcp) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-help-mcp-command-$line[1]:" + case $line[1] in + (add) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(remove) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(auth) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(test) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(toggle) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; +(memory) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__help__memory_commands" \ +"*::: :->memory" \ +&& ret=0 + + case $state in + (memory) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-help-memory-command-$line[1]:" + case $line[1] in + (search) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(read) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(write) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(tree) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; +(pairing) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__help__pairing_commands" \ +"*::: :->pairing" \ +&& ret=0 + + case $state in + (pairing) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-help-pairing-command-$line[1]:" + case $line[1] in + (list) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(approve) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; +(service) +_arguments "${_arguments_options[@]}" : \ +":: :_ironclaw__help__service_commands" \ +"*::: :->service" \ +&& ret=0 + + case $state in + (service) + words=($line[1] "${words[@]}") + (( CURRENT += 1 )) + curcontext="${curcontext%:*:*}:ironclaw-help-service-command-$line[1]:" + case $line[1] in + (install) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(start) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(stop) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(uninstall) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; +(doctor) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(status) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(completion) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(worker) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(claude-bridge) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; +(help) +_arguments "${_arguments_options[@]}" : \ +&& ret=0 +;; + esac + ;; +esac +;; + esac + ;; +esac +} + +(( $+functions[_ironclaw_commands] )) || +_ironclaw_commands() { + local commands; commands=( +'run:Run the agent (default if no subcommand given)' \ +'onboard:Interactive onboarding wizard' \ +'config:Manage configuration settings' \ +'tool:Manage WASM tools' \ +'mcp:Manage MCP servers (hosted tool providers)' \ +'memory:Query and manage workspace memory' \ +'pairing:DM pairing (approve inbound requests from unknown senders)' \ +'service:Manage OS service (launchd / systemd)' \ +'doctor:Probe external dependencies and validate configuration' \ +'status:Show system health and diagnostics' \ +'completion:Generate shell completion scripts' \ +'worker:Run as a sandboxed worker inside a Docker container (internal use). This is invoked automatically by the orchestrator, not by users directly' \ +'claude-bridge:Run as a Claude Code bridge inside a Docker container (internal use). Spawns the \`claude\` CLI and streams output back to the orchestrator' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw commands' commands "$@" +} +(( $+functions[_ironclaw__claude-bridge_commands] )) || +_ironclaw__claude-bridge_commands() { + local commands; commands=() + _describe -t commands 'ironclaw claude-bridge commands' commands "$@" +} +(( $+functions[_ironclaw__completion_commands] )) || +_ironclaw__completion_commands() { + local commands; commands=() + _describe -t commands 'ironclaw completion commands' commands "$@" +} +(( $+functions[_ironclaw__config_commands] )) || +_ironclaw__config_commands() { + local commands; commands=( +'init:Generate a default config.toml file' \ +'list:List all settings and their current values' \ +'get:Get a specific setting value' \ +'set:Set a setting value' \ +'reset:Reset a setting to its default value' \ +'path:Show the settings storage info' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw config commands' commands "$@" +} +(( $+functions[_ironclaw__config__get_commands] )) || +_ironclaw__config__get_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config get commands' commands "$@" +} +(( $+functions[_ironclaw__config__help_commands] )) || +_ironclaw__config__help_commands() { + local commands; commands=( +'init:Generate a default config.toml file' \ +'list:List all settings and their current values' \ +'get:Get a specific setting value' \ +'set:Set a setting value' \ +'reset:Reset a setting to its default value' \ +'path:Show the settings storage info' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw config help commands' commands "$@" +} +(( $+functions[_ironclaw__config__help__get_commands] )) || +_ironclaw__config__help__get_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config help get commands' commands "$@" +} +(( $+functions[_ironclaw__config__help__help_commands] )) || +_ironclaw__config__help__help_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config help help commands' commands "$@" +} +(( $+functions[_ironclaw__config__help__init_commands] )) || +_ironclaw__config__help__init_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config help init commands' commands "$@" +} +(( $+functions[_ironclaw__config__help__list_commands] )) || +_ironclaw__config__help__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config help list commands' commands "$@" +} +(( $+functions[_ironclaw__config__help__path_commands] )) || +_ironclaw__config__help__path_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config help path commands' commands "$@" +} +(( $+functions[_ironclaw__config__help__reset_commands] )) || +_ironclaw__config__help__reset_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config help reset commands' commands "$@" +} +(( $+functions[_ironclaw__config__help__set_commands] )) || +_ironclaw__config__help__set_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config help set commands' commands "$@" +} +(( $+functions[_ironclaw__config__init_commands] )) || +_ironclaw__config__init_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config init commands' commands "$@" +} +(( $+functions[_ironclaw__config__list_commands] )) || +_ironclaw__config__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config list commands' commands "$@" +} +(( $+functions[_ironclaw__config__path_commands] )) || +_ironclaw__config__path_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config path commands' commands "$@" +} +(( $+functions[_ironclaw__config__reset_commands] )) || +_ironclaw__config__reset_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config reset commands' commands "$@" +} +(( $+functions[_ironclaw__config__set_commands] )) || +_ironclaw__config__set_commands() { + local commands; commands=() + _describe -t commands 'ironclaw config set commands' commands "$@" +} +(( $+functions[_ironclaw__doctor_commands] )) || +_ironclaw__doctor_commands() { + local commands; commands=() + _describe -t commands 'ironclaw doctor commands' commands "$@" +} +(( $+functions[_ironclaw__help_commands] )) || +_ironclaw__help_commands() { + local commands; commands=( +'run:Run the agent (default if no subcommand given)' \ +'onboard:Interactive onboarding wizard' \ +'config:Manage configuration settings' \ +'tool:Manage WASM tools' \ +'mcp:Manage MCP servers (hosted tool providers)' \ +'memory:Query and manage workspace memory' \ +'pairing:DM pairing (approve inbound requests from unknown senders)' \ +'service:Manage OS service (launchd / systemd)' \ +'doctor:Probe external dependencies and validate configuration' \ +'status:Show system health and diagnostics' \ +'completion:Generate shell completion scripts' \ +'worker:Run as a sandboxed worker inside a Docker container (internal use). This is invoked automatically by the orchestrator, not by users directly' \ +'claude-bridge:Run as a Claude Code bridge inside a Docker container (internal use). Spawns the \`claude\` CLI and streams output back to the orchestrator' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw help commands' commands "$@" +} +(( $+functions[_ironclaw__help__claude-bridge_commands] )) || +_ironclaw__help__claude-bridge_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help claude-bridge commands' commands "$@" +} +(( $+functions[_ironclaw__help__completion_commands] )) || +_ironclaw__help__completion_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help completion commands' commands "$@" +} +(( $+functions[_ironclaw__help__config_commands] )) || +_ironclaw__help__config_commands() { + local commands; commands=( +'init:Generate a default config.toml file' \ +'list:List all settings and their current values' \ +'get:Get a specific setting value' \ +'set:Set a setting value' \ +'reset:Reset a setting to its default value' \ +'path:Show the settings storage info' \ + ) + _describe -t commands 'ironclaw help config commands' commands "$@" +} +(( $+functions[_ironclaw__help__config__get_commands] )) || +_ironclaw__help__config__get_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help config get commands' commands "$@" +} +(( $+functions[_ironclaw__help__config__init_commands] )) || +_ironclaw__help__config__init_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help config init commands' commands "$@" +} +(( $+functions[_ironclaw__help__config__list_commands] )) || +_ironclaw__help__config__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help config list commands' commands "$@" +} +(( $+functions[_ironclaw__help__config__path_commands] )) || +_ironclaw__help__config__path_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help config path commands' commands "$@" +} +(( $+functions[_ironclaw__help__config__reset_commands] )) || +_ironclaw__help__config__reset_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help config reset commands' commands "$@" +} +(( $+functions[_ironclaw__help__config__set_commands] )) || +_ironclaw__help__config__set_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help config set commands' commands "$@" +} +(( $+functions[_ironclaw__help__doctor_commands] )) || +_ironclaw__help__doctor_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help doctor commands' commands "$@" +} +(( $+functions[_ironclaw__help__help_commands] )) || +_ironclaw__help__help_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help help commands' commands "$@" +} +(( $+functions[_ironclaw__help__mcp_commands] )) || +_ironclaw__help__mcp_commands() { + local commands; commands=( +'add:Add an MCP server' \ +'remove:Remove an MCP server' \ +'list:List configured MCP servers' \ +'auth:Authenticate with an MCP server (OAuth flow)' \ +'test:Test connection to an MCP server' \ +'toggle:Enable or disable an MCP server' \ + ) + _describe -t commands 'ironclaw help mcp commands' commands "$@" +} +(( $+functions[_ironclaw__help__mcp__add_commands] )) || +_ironclaw__help__mcp__add_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help mcp add commands' commands "$@" +} +(( $+functions[_ironclaw__help__mcp__auth_commands] )) || +_ironclaw__help__mcp__auth_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help mcp auth commands' commands "$@" +} +(( $+functions[_ironclaw__help__mcp__list_commands] )) || +_ironclaw__help__mcp__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help mcp list commands' commands "$@" +} +(( $+functions[_ironclaw__help__mcp__remove_commands] )) || +_ironclaw__help__mcp__remove_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help mcp remove commands' commands "$@" +} +(( $+functions[_ironclaw__help__mcp__test_commands] )) || +_ironclaw__help__mcp__test_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help mcp test commands' commands "$@" +} +(( $+functions[_ironclaw__help__mcp__toggle_commands] )) || +_ironclaw__help__mcp__toggle_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help mcp toggle commands' commands "$@" +} +(( $+functions[_ironclaw__help__memory_commands] )) || +_ironclaw__help__memory_commands() { + local commands; commands=( +'search:Search workspace memory (hybrid full-text + semantic)' \ +'read:Read a file from the workspace' \ +'write:Write content to a workspace file' \ +'tree:Show workspace directory tree' \ +'status:Show workspace status (document count, index health)' \ + ) + _describe -t commands 'ironclaw help memory commands' commands "$@" +} +(( $+functions[_ironclaw__help__memory__read_commands] )) || +_ironclaw__help__memory__read_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help memory read commands' commands "$@" +} +(( $+functions[_ironclaw__help__memory__search_commands] )) || +_ironclaw__help__memory__search_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help memory search commands' commands "$@" +} +(( $+functions[_ironclaw__help__memory__status_commands] )) || +_ironclaw__help__memory__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help memory status commands' commands "$@" +} +(( $+functions[_ironclaw__help__memory__tree_commands] )) || +_ironclaw__help__memory__tree_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help memory tree commands' commands "$@" +} +(( $+functions[_ironclaw__help__memory__write_commands] )) || +_ironclaw__help__memory__write_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help memory write commands' commands "$@" +} +(( $+functions[_ironclaw__help__onboard_commands] )) || +_ironclaw__help__onboard_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help onboard commands' commands "$@" +} +(( $+functions[_ironclaw__help__pairing_commands] )) || +_ironclaw__help__pairing_commands() { + local commands; commands=( +'list:List pending pairing requests' \ +'approve:Approve a pairing request by code' \ + ) + _describe -t commands 'ironclaw help pairing commands' commands "$@" +} +(( $+functions[_ironclaw__help__pairing__approve_commands] )) || +_ironclaw__help__pairing__approve_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help pairing approve commands' commands "$@" +} +(( $+functions[_ironclaw__help__pairing__list_commands] )) || +_ironclaw__help__pairing__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help pairing list commands' commands "$@" +} +(( $+functions[_ironclaw__help__run_commands] )) || +_ironclaw__help__run_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help run commands' commands "$@" +} +(( $+functions[_ironclaw__help__service_commands] )) || +_ironclaw__help__service_commands() { + local commands; commands=( +'install:Install the OS service (launchd on macOS, systemd on Linux)' \ +'start:Start the installed service' \ +'stop:Stop the running service' \ +'status:Show service status' \ +'uninstall:Uninstall the OS service and remove the unit file' \ + ) + _describe -t commands 'ironclaw help service commands' commands "$@" +} +(( $+functions[_ironclaw__help__service__install_commands] )) || +_ironclaw__help__service__install_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help service install commands' commands "$@" +} +(( $+functions[_ironclaw__help__service__start_commands] )) || +_ironclaw__help__service__start_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help service start commands' commands "$@" +} +(( $+functions[_ironclaw__help__service__status_commands] )) || +_ironclaw__help__service__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help service status commands' commands "$@" +} +(( $+functions[_ironclaw__help__service__stop_commands] )) || +_ironclaw__help__service__stop_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help service stop commands' commands "$@" +} +(( $+functions[_ironclaw__help__service__uninstall_commands] )) || +_ironclaw__help__service__uninstall_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help service uninstall commands' commands "$@" +} +(( $+functions[_ironclaw__help__status_commands] )) || +_ironclaw__help__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help status commands' commands "$@" +} +(( $+functions[_ironclaw__help__tool_commands] )) || +_ironclaw__help__tool_commands() { + local commands; commands=( +'install:Install a WASM tool from source directory or .wasm file' \ +'list:List installed tools' \ +'remove:Remove an installed tool' \ +'info:Show information about a tool' \ +'auth:Configure authentication for a tool' \ + ) + _describe -t commands 'ironclaw help tool commands' commands "$@" +} +(( $+functions[_ironclaw__help__tool__auth_commands] )) || +_ironclaw__help__tool__auth_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help tool auth commands' commands "$@" +} +(( $+functions[_ironclaw__help__tool__info_commands] )) || +_ironclaw__help__tool__info_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help tool info commands' commands "$@" +} +(( $+functions[_ironclaw__help__tool__install_commands] )) || +_ironclaw__help__tool__install_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help tool install commands' commands "$@" +} +(( $+functions[_ironclaw__help__tool__list_commands] )) || +_ironclaw__help__tool__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help tool list commands' commands "$@" +} +(( $+functions[_ironclaw__help__tool__remove_commands] )) || +_ironclaw__help__tool__remove_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help tool remove commands' commands "$@" +} +(( $+functions[_ironclaw__help__worker_commands] )) || +_ironclaw__help__worker_commands() { + local commands; commands=() + _describe -t commands 'ironclaw help worker commands' commands "$@" +} +(( $+functions[_ironclaw__mcp_commands] )) || +_ironclaw__mcp_commands() { + local commands; commands=( +'add:Add an MCP server' \ +'remove:Remove an MCP server' \ +'list:List configured MCP servers' \ +'auth:Authenticate with an MCP server (OAuth flow)' \ +'test:Test connection to an MCP server' \ +'toggle:Enable or disable an MCP server' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw mcp commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__add_commands] )) || +_ironclaw__mcp__add_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp add commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__auth_commands] )) || +_ironclaw__mcp__auth_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp auth commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help_commands] )) || +_ironclaw__mcp__help_commands() { + local commands; commands=( +'add:Add an MCP server' \ +'remove:Remove an MCP server' \ +'list:List configured MCP servers' \ +'auth:Authenticate with an MCP server (OAuth flow)' \ +'test:Test connection to an MCP server' \ +'toggle:Enable or disable an MCP server' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw mcp help commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help__add_commands] )) || +_ironclaw__mcp__help__add_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp help add commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help__auth_commands] )) || +_ironclaw__mcp__help__auth_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp help auth commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help__help_commands] )) || +_ironclaw__mcp__help__help_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp help help commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help__list_commands] )) || +_ironclaw__mcp__help__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp help list commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help__remove_commands] )) || +_ironclaw__mcp__help__remove_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp help remove commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help__test_commands] )) || +_ironclaw__mcp__help__test_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp help test commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__help__toggle_commands] )) || +_ironclaw__mcp__help__toggle_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp help toggle commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__list_commands] )) || +_ironclaw__mcp__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp list commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__remove_commands] )) || +_ironclaw__mcp__remove_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp remove commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__test_commands] )) || +_ironclaw__mcp__test_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp test commands' commands "$@" +} +(( $+functions[_ironclaw__mcp__toggle_commands] )) || +_ironclaw__mcp__toggle_commands() { + local commands; commands=() + _describe -t commands 'ironclaw mcp toggle commands' commands "$@" +} +(( $+functions[_ironclaw__memory_commands] )) || +_ironclaw__memory_commands() { + local commands; commands=( +'search:Search workspace memory (hybrid full-text + semantic)' \ +'read:Read a file from the workspace' \ +'write:Write content to a workspace file' \ +'tree:Show workspace directory tree' \ +'status:Show workspace status (document count, index health)' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw memory commands' commands "$@" +} +(( $+functions[_ironclaw__memory__help_commands] )) || +_ironclaw__memory__help_commands() { + local commands; commands=( +'search:Search workspace memory (hybrid full-text + semantic)' \ +'read:Read a file from the workspace' \ +'write:Write content to a workspace file' \ +'tree:Show workspace directory tree' \ +'status:Show workspace status (document count, index health)' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw memory help commands' commands "$@" +} +(( $+functions[_ironclaw__memory__help__help_commands] )) || +_ironclaw__memory__help__help_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory help help commands' commands "$@" +} +(( $+functions[_ironclaw__memory__help__read_commands] )) || +_ironclaw__memory__help__read_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory help read commands' commands "$@" +} +(( $+functions[_ironclaw__memory__help__search_commands] )) || +_ironclaw__memory__help__search_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory help search commands' commands "$@" +} +(( $+functions[_ironclaw__memory__help__status_commands] )) || +_ironclaw__memory__help__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory help status commands' commands "$@" +} +(( $+functions[_ironclaw__memory__help__tree_commands] )) || +_ironclaw__memory__help__tree_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory help tree commands' commands "$@" +} +(( $+functions[_ironclaw__memory__help__write_commands] )) || +_ironclaw__memory__help__write_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory help write commands' commands "$@" +} +(( $+functions[_ironclaw__memory__read_commands] )) || +_ironclaw__memory__read_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory read commands' commands "$@" +} +(( $+functions[_ironclaw__memory__search_commands] )) || +_ironclaw__memory__search_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory search commands' commands "$@" +} +(( $+functions[_ironclaw__memory__status_commands] )) || +_ironclaw__memory__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory status commands' commands "$@" +} +(( $+functions[_ironclaw__memory__tree_commands] )) || +_ironclaw__memory__tree_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory tree commands' commands "$@" +} +(( $+functions[_ironclaw__memory__write_commands] )) || +_ironclaw__memory__write_commands() { + local commands; commands=() + _describe -t commands 'ironclaw memory write commands' commands "$@" +} +(( $+functions[_ironclaw__onboard_commands] )) || +_ironclaw__onboard_commands() { + local commands; commands=() + _describe -t commands 'ironclaw onboard commands' commands "$@" +} +(( $+functions[_ironclaw__pairing_commands] )) || +_ironclaw__pairing_commands() { + local commands; commands=( +'list:List pending pairing requests' \ +'approve:Approve a pairing request by code' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw pairing commands' commands "$@" +} +(( $+functions[_ironclaw__pairing__approve_commands] )) || +_ironclaw__pairing__approve_commands() { + local commands; commands=() + _describe -t commands 'ironclaw pairing approve commands' commands "$@" +} +(( $+functions[_ironclaw__pairing__help_commands] )) || +_ironclaw__pairing__help_commands() { + local commands; commands=( +'list:List pending pairing requests' \ +'approve:Approve a pairing request by code' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw pairing help commands' commands "$@" +} +(( $+functions[_ironclaw__pairing__help__approve_commands] )) || +_ironclaw__pairing__help__approve_commands() { + local commands; commands=() + _describe -t commands 'ironclaw pairing help approve commands' commands "$@" +} +(( $+functions[_ironclaw__pairing__help__help_commands] )) || +_ironclaw__pairing__help__help_commands() { + local commands; commands=() + _describe -t commands 'ironclaw pairing help help commands' commands "$@" +} +(( $+functions[_ironclaw__pairing__help__list_commands] )) || +_ironclaw__pairing__help__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw pairing help list commands' commands "$@" +} +(( $+functions[_ironclaw__pairing__list_commands] )) || +_ironclaw__pairing__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw pairing list commands' commands "$@" +} +(( $+functions[_ironclaw__run_commands] )) || +_ironclaw__run_commands() { + local commands; commands=() + _describe -t commands 'ironclaw run commands' commands "$@" +} +(( $+functions[_ironclaw__service_commands] )) || +_ironclaw__service_commands() { + local commands; commands=( +'install:Install the OS service (launchd on macOS, systemd on Linux)' \ +'start:Start the installed service' \ +'stop:Stop the running service' \ +'status:Show service status' \ +'uninstall:Uninstall the OS service and remove the unit file' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw service commands' commands "$@" +} +(( $+functions[_ironclaw__service__help_commands] )) || +_ironclaw__service__help_commands() { + local commands; commands=( +'install:Install the OS service (launchd on macOS, systemd on Linux)' \ +'start:Start the installed service' \ +'stop:Stop the running service' \ +'status:Show service status' \ +'uninstall:Uninstall the OS service and remove the unit file' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw service help commands' commands "$@" +} +(( $+functions[_ironclaw__service__help__help_commands] )) || +_ironclaw__service__help__help_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service help help commands' commands "$@" +} +(( $+functions[_ironclaw__service__help__install_commands] )) || +_ironclaw__service__help__install_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service help install commands' commands "$@" +} +(( $+functions[_ironclaw__service__help__start_commands] )) || +_ironclaw__service__help__start_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service help start commands' commands "$@" +} +(( $+functions[_ironclaw__service__help__status_commands] )) || +_ironclaw__service__help__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service help status commands' commands "$@" +} +(( $+functions[_ironclaw__service__help__stop_commands] )) || +_ironclaw__service__help__stop_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service help stop commands' commands "$@" +} +(( $+functions[_ironclaw__service__help__uninstall_commands] )) || +_ironclaw__service__help__uninstall_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service help uninstall commands' commands "$@" +} +(( $+functions[_ironclaw__service__install_commands] )) || +_ironclaw__service__install_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service install commands' commands "$@" +} +(( $+functions[_ironclaw__service__start_commands] )) || +_ironclaw__service__start_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service start commands' commands "$@" +} +(( $+functions[_ironclaw__service__status_commands] )) || +_ironclaw__service__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service status commands' commands "$@" +} +(( $+functions[_ironclaw__service__stop_commands] )) || +_ironclaw__service__stop_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service stop commands' commands "$@" +} +(( $+functions[_ironclaw__service__uninstall_commands] )) || +_ironclaw__service__uninstall_commands() { + local commands; commands=() + _describe -t commands 'ironclaw service uninstall commands' commands "$@" +} +(( $+functions[_ironclaw__status_commands] )) || +_ironclaw__status_commands() { + local commands; commands=() + _describe -t commands 'ironclaw status commands' commands "$@" +} +(( $+functions[_ironclaw__tool_commands] )) || +_ironclaw__tool_commands() { + local commands; commands=( +'install:Install a WASM tool from source directory or .wasm file' \ +'list:List installed tools' \ +'remove:Remove an installed tool' \ +'info:Show information about a tool' \ +'auth:Configure authentication for a tool' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw tool commands' commands "$@" +} +(( $+functions[_ironclaw__tool__auth_commands] )) || +_ironclaw__tool__auth_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool auth commands' commands "$@" +} +(( $+functions[_ironclaw__tool__help_commands] )) || +_ironclaw__tool__help_commands() { + local commands; commands=( +'install:Install a WASM tool from source directory or .wasm file' \ +'list:List installed tools' \ +'remove:Remove an installed tool' \ +'info:Show information about a tool' \ +'auth:Configure authentication for a tool' \ +'help:Print this message or the help of the given subcommand(s)' \ + ) + _describe -t commands 'ironclaw tool help commands' commands "$@" +} +(( $+functions[_ironclaw__tool__help__auth_commands] )) || +_ironclaw__tool__help__auth_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool help auth commands' commands "$@" +} +(( $+functions[_ironclaw__tool__help__help_commands] )) || +_ironclaw__tool__help__help_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool help help commands' commands "$@" +} +(( $+functions[_ironclaw__tool__help__info_commands] )) || +_ironclaw__tool__help__info_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool help info commands' commands "$@" +} +(( $+functions[_ironclaw__tool__help__install_commands] )) || +_ironclaw__tool__help__install_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool help install commands' commands "$@" +} +(( $+functions[_ironclaw__tool__help__list_commands] )) || +_ironclaw__tool__help__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool help list commands' commands "$@" +} +(( $+functions[_ironclaw__tool__help__remove_commands] )) || +_ironclaw__tool__help__remove_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool help remove commands' commands "$@" +} +(( $+functions[_ironclaw__tool__info_commands] )) || +_ironclaw__tool__info_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool info commands' commands "$@" +} +(( $+functions[_ironclaw__tool__install_commands] )) || +_ironclaw__tool__install_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool install commands' commands "$@" +} +(( $+functions[_ironclaw__tool__list_commands] )) || +_ironclaw__tool__list_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool list commands' commands "$@" +} +(( $+functions[_ironclaw__tool__remove_commands] )) || +_ironclaw__tool__remove_commands() { + local commands; commands=() + _describe -t commands 'ironclaw tool remove commands' commands "$@" +} +(( $+functions[_ironclaw__worker_commands] )) || +_ironclaw__worker_commands() { + local commands; commands=() + _describe -t commands 'ironclaw worker commands' commands "$@" +} + +if [ "$funcstack[1]" = "_ironclaw" ]; then + _ironclaw "$@" +else + compdef _ironclaw ironclaw +fi diff --git a/src/cli/completion.rs b/src/cli/completion.rs new file mode 100644 index 00000000..104aacec --- /dev/null +++ b/src/cli/completion.rs @@ -0,0 +1,39 @@ +use clap::{CommandFactory, Parser}; +use clap_complete::{Shell, generate}; +use std::io; + +/// Generate shell completion scripts for ironclaw +#[derive(Parser, Debug)] +pub struct Completion { + /// The shell to generate completions for + #[arg(value_enum, long)] + pub shell: Shell, +} + +impl Completion { + pub fn run(&self) -> anyhow::Result<()> { + let mut cmd = crate::cli::Cli::command(); + let bin_name = cmd.get_name().to_string(); + + // Generated and output script to stdout + generate(self.shell, &mut cmd, bin_name, &mut io::stdout()); + + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use clap::CommandFactory; + + #[test] + fn test_run_generates_output() { + let completion = Completion { shell: Shell::Zsh }; + let mut cmd = crate::cli::Cli::command(); + let bin_name = cmd.get_name().to_string(); + let mut buf = Vec::new(); + generate(completion.shell, &mut cmd, bin_name, &mut buf); + assert!(!buf.is_empty(), "generate() should produce output"); + } +} diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 1ff4d391..ee0ede9f 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -11,6 +11,7 @@ //! - Active health diagnostics (`doctor`) //! - Checking system health (`status`) +mod completion; mod config; mod doctor; mod mcp; @@ -22,6 +23,7 @@ mod service; pub mod status; mod tool; +pub use completion::Completion; pub use config::{ConfigCommand, run_config_command}; pub use doctor::run_doctor_command; pub use mcp::{McpCommand, run_mcp_command}; @@ -118,6 +120,9 @@ pub enum Command { /// Show system health and diagnostics Status, + /// Generate shell completion scripts + Completion(Completion), + /// Run as a sandboxed worker inside a Docker container (internal use). /// This is invoked automatically by the orchestrator, not by users directly. Worker { diff --git a/src/main.rs b/src/main.rs index a38ab8c4..a7103c22 100644 --- a/src/main.rs +++ b/src/main.rs @@ -90,6 +90,10 @@ async fn main() -> anyhow::Result<()> { ironclaw::bootstrap::load_ironclaw_env(); return run_status_command().await; } + Some(Command::Completion(completion)) => { + init_cli_tracing(); + return completion.run(); + } Some(Command::Worker { job_id, orchestrator_url,