Skip to main content

harn_cli/cli/
mod.rs

1//! Top-level clap definition for the `harn` CLI.
2//!
3//! Per-subcommand arg structs live in their own modules under
4//! `crates/harn-cli/src/cli/`. The `Cli` and `Command` enum here only
5//! reference types via `pub(crate) use ...` re-exports so external
6//! consumers can keep using `crate::cli::TypeName` unchanged.
7//!
8//! Some variants of subcommand enums are reached only by destructuring
9//! the parent (`SubCommand::Foo(args) => ...`) and are never referenced
10//! by name from outside this module. Those types stay private to their
11//! per-subcommand module and are accessed through their parent enum.
12
13mod bench;
14mod check;
15mod completions;
16mod config_cmd;
17mod connect;
18mod connector;
19mod contracts;
20mod crystallize;
21mod demo;
22mod dev;
23mod doctor;
24mod dump;
25mod eval;
26mod explain;
27mod fix;
28mod flow;
29mod graph;
30mod init;
31mod lint_fmt;
32mod local;
33mod mcp;
34mod merge_captain;
35mod models;
36mod orchestrator;
37mod pack;
38mod package;
39mod parse_tokens;
40mod persona;
41mod playground;
42mod portal;
43mod precompile;
44mod profile;
45mod provider;
46mod providers;
47mod quickstart;
48mod routes;
49mod run;
50mod runs;
51mod serve;
52mod session;
53mod skill;
54mod skills;
55mod supervisor;
56mod test;
57mod test_bench;
58mod time;
59mod tool;
60mod trace;
61mod trigger;
62mod trust;
63mod try_cmd;
64mod upgrade;
65mod util;
66mod verify;
67mod version;
68mod viz;
69mod watch;
70mod workflow;
71
72pub(crate) use bench::{BenchArgs, BenchCommand, BenchReplayArgs};
73pub(crate) use check::{CheckArgs, CheckOutputFormat};
74pub(crate) use completions::{CompletionShell, CompletionsArgs};
75pub(crate) use config_cmd::{ConfigArgs, ConfigCommand, ConfigInspectArgs, ConfigValidateArgs};
76pub(crate) use connect::{
77    ConnectApiKeyArgs, ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs,
78    ConnectLinearArgs, ConnectOAuthArgs, ConnectSetupPlanArgs, ConnectStatusArgs,
79};
80pub(crate) use connector::{
81    ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
82};
83pub(crate) use contracts::{
84    ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
85    ContractsOutputArgs,
86};
87pub(crate) use crystallize::{
88    CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
89    CrystallizeValidateArgs,
90};
91pub(crate) use demo::DemoArgs;
92pub(crate) use dev::DevArgs;
93pub(crate) use doctor::DoctorArgs;
94pub(crate) use dump::{
95    DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpProtocolArtifactsArgs,
96    DumpTriggerQuickrefArgs,
97};
98pub use eval::{
99    EvalArgs, EvalCodingAgentArgs, EvalCommand, EvalContextArgs, EvalPromptArgs, EvalPromptMode,
100    EvalPromptOutput, EvalScopeTriageArgs, EvalToolCallsArgs, EvalToolCallsCommand,
101    EvalToolCallsRegressionArgs,
102};
103pub(crate) use explain::{CatalogFormat, ExplainArgs};
104pub(crate) use fix::{FixArgs, HarnessThreadingMode};
105pub(crate) use flow::{
106    FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
107    FlowShipCommand, FlowShipWatchArgs,
108};
109pub(crate) use graph::GraphArgs;
110pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
111pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
112pub(crate) use local::{
113    LocalArgs, LocalCommand, LocalListArgs, LocalProfileArgs, LocalStatusArgs, LocalStopArgs,
114    LocalSwitchArgs,
115};
116pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
117pub(crate) use merge_captain::{
118    MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
119    MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
120    MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
121    MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
122    MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
123};
124pub(crate) use models::{
125    ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
126    ModelsTestArgs,
127};
128pub(crate) use orchestrator::{
129    OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
130    OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
131    OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
132    OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
133    OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
134    OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
135    OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
136    OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
137    OrchestratorTenantSuspendArgs,
138};
139pub use pack::{PackArgs, PackCommand, PackVerifyArgs};
140pub(crate) use package::{
141    AddArgs, InstallArgs, PackageArgs, PackageArtifactsCommand, PackageCacheCommand,
142    PackageCommand, PackageScaffoldCommand, PackageScaffoldOpenapiArgs, PublishArgs, RemoveArgs,
143    UpdateArgs,
144};
145pub(crate) use parse_tokens::{ParseArgs, TokensArgs};
146pub(crate) use persona::{
147    PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
148    PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
149    PersonaSupervisionCommand, PersonaSupervisionTailArgs, PersonaTemplateKind, PersonaTickArgs,
150    PersonaTriggerArgs,
151};
152pub(crate) use playground::PlaygroundArgs;
153pub(crate) use portal::PortalArgs;
154pub use precompile::PrecompileArgs;
155pub(crate) use profile::ProfileArgs;
156pub(crate) use provider::{
157    ModelInfoArgs, ProviderArgs, ProviderCapabilitiesCommand,
158    ProviderCapabilitiesPromoteFromEvalArgs, ProviderCatalogArgs, ProviderCommand,
159    ProviderProbeArgs, ProviderReadyArgs, ProviderToolProbeArgs, ProviderToolProbeModeArg,
160};
161pub(crate) use providers::{
162    ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersMatrixArgs,
163    ProvidersRecommendArgs, ProvidersRefreshArgs, ProvidersSupportArgs, ProvidersValidateArgs,
164};
165pub(crate) use quickstart::QuickstartArgs;
166pub(crate) use routes::RoutesArgs;
167pub(crate) use run::RunArgs;
168pub(crate) use runs::{ReplayArgs, RunsArgs, RunsCommand};
169pub(crate) use serve::{
170    A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
171    ServeMcpArgs, ServeTlsMode,
172};
173pub(crate) use session::{
174    SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
175    SessionValidateArgs,
176};
177pub(crate) use skill::{
178    SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
179    SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
180    SkillWhoSignedArgs,
181};
182pub(crate) use skills::{
183    SkillsArgs, SkillsCommand, SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs,
184    SkillsListArgs, SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs,
185};
186pub(crate) use supervisor::{
187    SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
188    SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
189    SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
190    SupervisorStartArgs, SupervisorStopArgs,
191};
192pub(crate) use test::TestArgs;
193pub(crate) use test_bench::{
194    TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
195    TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
196};
197pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
198pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
199pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
200pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
201pub(crate) use try_cmd::TryArgs;
202pub(crate) use upgrade::UpgradeArgs;
203// `TrustOutcomeArg` / `TrustTierArg` are referenced from the cli
204// parser tests only; they're matched via destructuring elsewhere.
205#[allow(unused_imports)]
206pub(crate) use trust::{
207    TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
208    TrustVerifyChainArgs,
209};
210pub(crate) use verify::VerifyArgs;
211pub(crate) use version::VersionArgs;
212pub(crate) use viz::VizArgs;
213pub(crate) use watch::WatchArgs;
214pub(crate) use workflow::{
215    WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
216    WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
217    WorkflowPatchValidateArgs,
218};
219
220use clap::{Parser, Subcommand};
221
222#[derive(Debug, Parser)]
223#[command(
224    name = "harn",
225    about = "The agent harness language",
226    version,
227    disable_help_subcommand = false,
228    arg_required_else_help = true
229)]
230pub(crate) struct Cli {
231    /// Emit the JSON-schema catalog for every `harn` subcommand that
232    /// exposes a structured `--json` envelope. Pair with
233    /// `--command <name>` to print just one entry.
234    #[arg(long = "json-schemas", global = false)]
235    pub json_schemas: bool,
236
237    /// When combined with `--json-schemas`, restrict the catalog to a
238    /// single command name (e.g. `--command run`).
239    #[arg(
240        long = "command",
241        requires = "json_schemas",
242        value_name = "COMMAND",
243        global = false
244    )]
245    pub schema_command: Option<String>,
246
247    #[command(subcommand)]
248    pub command: Option<Command>,
249}
250
251#[derive(Debug, Subcommand)]
252pub(crate) enum Command {
253    /// Execute a .harn file or an inline expression.
254    #[command(long_about = "\
255Execute a .harn file or an inline expression.
256
257USAGE
258    harn run script.harn
259    harn run -e 'log(\"hello\")'
260    harn run script.harn -- arg1 arg2   (script reads `argv` as list<string>)
261
262CONCURRENCY
263    Harn supports first-class concurrency primitives:
264      - spawn { ... }         — launch a task, return a handle
265      - parallel each LIST    — concurrent map
266      - parallel settle LIST  — concurrent map, collect Ok/Err
267      - parallel N            — N-way fan-out
268      - with { max_concurrent: N }  — cap in-flight workers
269      - channels, retry, select
270    https://harnlang.com/concurrency.html
271
272LLM THROTTLING
273    Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
274    or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
275    (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
276
277SCRIPTING
278    LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
279    Human cheatsheet:       https://harnlang.com/scripting-cheatsheet.html
280    Full docs:              https://harnlang.com/
281")]
282    Run(RunArgs),
283    /// Type-check .harn files or directories without executing them.
284    Check(CheckArgs),
285    /// Parse a .harn file and print its AST.
286    Parse(ParseArgs),
287    /// Tokenize a .harn file and print lexer tokens.
288    Tokens(TokensArgs),
289    /// Inspect, validate, and emit schemas for layered Harn runtime config.
290    Config(ConfigArgs),
291    /// Explain a diagnostic. Pass a stable `HARN-<CAT>-<NNN>` code
292    /// (optionally with `--json` for the structured envelope), or the
293    /// legacy `--invariant <NAME> <FUNCTION> <FILE>` form to walk the
294    /// control-flow path behind a Harn invariant violation.
295    Explain(ExplainArgs),
296    /// Plan or apply repair-bearing diagnostics under an explicit safety ceiling.
297    Fix(FixArgs),
298    /// Export machine-readable Harn contracts and bundle manifests.
299    Contracts(ContractsArgs),
300    /// Lint .harn files or directories for common issues.
301    Lint(PathTargetsArgs),
302    /// Format .harn files or directories.
303    Fmt(FmtArgs),
304    /// Run user tests or the conformance suite.
305    Test(TestArgs),
306    /// Run a .harn script under a hermetic testbench (paused clock,
307    /// optional LLM/process tapes, fs overlay, deny-by-default network).
308    #[command(name = "test-bench")]
309    TestBench(TestBenchArgs),
310    /// Instrument a wrapped subcommand with phase-level wall-clock
311    /// timing (parse, typecheck, bytecode compile + cache hit/miss,
312    /// run setup, run main) plus per-LLM-call and per-tool-call
313    /// latency. Pair with `--json` for an agent-readable envelope.
314    Time(TimeArgs),
315    /// Scaffold a new project with harn.toml.
316    Init(InitArgs),
317    /// Scaffold a new project, package, or connector from a starter template.
318    New(NewArgs),
319    /// Diagnose the local Harn environment: toolchain version, configured
320    /// LLM providers and credentials, MCP server reachability, file
321    /// permissions on `~/.harn`, and project manifest health. Reports
322    /// each check as ok/warn/fail with a suggested fix.
323    Doctor(DoctorArgs),
324    /// Configure a starter Harn project and LLM provider settings.
325    Quickstart(QuickstartArgs),
326    /// Run a bundled offline demo scenario to see Harn in action without
327    /// API keys. `harn demo` lists scenarios; `harn demo <id>` runs one.
328    Demo(DemoArgs),
329    /// Register outbound connector resources with a provider.
330    Connect(Box<ConnectArgs>),
331    /// Validate pure-Harn connector packages against the connector contract.
332    Connector(ConnectorArgs),
333    /// Serve a Harn workflow over a transport adapter.
334    Serve(ServeArgs),
335    /// Manage remote MCP OAuth credentials and status.
336    Mcp(McpArgs),
337    /// Watch a .harn file and re-run it on changes.
338    Watch(WatchArgs),
339    /// Watch a Harn project and re-typecheck only the modules whose
340    /// public interface fingerprint actually changed.
341    ///
342    /// USAGE
343    ///     harn dev --watch [<root>]
344    ///     harn dev --watch --json
345    ///     harn dev --watch --with-tests
346    ///
347    /// On each file change, the changed module's interface fingerprint
348    /// (BLAKE3 of types + signatures + `pub import` re-exports) is
349    /// recomputed. If it matches the previous fingerprint, only that
350    /// module is re-checked. If it changed, every transitive importer
351    /// is invalidated and re-checked. `--with-tests` extends the loop
352    /// to also re-run `test_*` / `@test`-attributed pipelines in
353    /// every invalidated module.
354    Dev(DevArgs),
355    /// Launch the local Harn observability portal.
356    Portal(PortalArgs),
357    /// Replay and inspect historical trigger dispatches from the event log.
358    Trigger(TriggerArgs),
359    /// Statically enumerate declared trigger routes and their requirements.
360    Routes(RoutesArgs),
361    /// Statically enumerate modules, symbols, imports, capabilities, effects, and host calls.
362    Graph(GraphArgs),
363    /// Inspect Harn Flow atom, slice, and predicate audit state.
364    Flow(FlowArgs),
365    /// Validate, preview, and run portable workflow bundles.
366    Workflow(WorkflowArgs),
367    /// Control local durable workflow automations for trusted hosts.
368    Supervisor(SupervisorArgs),
369    /// Import third-party eval traces into replayable Harn fixtures.
370    Trace(TraceArgs),
371    /// Mine repeated traces into a reviewable deterministic Harn workflow candidate.
372    Crystallize(CrystallizeArgs),
373    /// Query and manage trust-graph autonomy state.
374    Trust(TrustArgs),
375    /// Alias for `harn trust`. Query and verify trust-graph autonomy state.
376    #[command(name = "trust-graph")]
377    TrustGraph(TrustArgs),
378    /// Verify a signed Harn provenance receipt.
379    Verify(VerifyArgs),
380    /// Print shell completion script to stdout.
381    Completions(CompletionsArgs),
382    /// Start the orchestrator process that hosts triggers and connector dispatch.
383    Orchestrator(OrchestratorArgs),
384    /// Run a pipeline against a Harn-native host module for fast iteration.
385    Playground(PlaygroundArgs),
386    /// Inspect persisted workflow run records.
387    Runs(RunsArgs),
388    /// Export, import, and validate portable Harn session bundles.
389    Session(SessionArgs),
390    /// Replay a persisted workflow run record.
391    Replay(ReplayArgs),
392    /// Evaluate a run record, run directory, or eval manifest.
393    Eval(EvalArgs),
394    /// Start the interactive REPL.
395    Repl,
396    /// Benchmark a .harn pipeline over repeated runs.
397    Bench(BenchArgs),
398    /// Pre-compile `.harn` sources into the content-addressed bytecode
399    /// cache so cold-start `harn run` for the same source skips parse
400    /// and compile and goes straight to bytecode load.
401    ///
402    /// `harn precompile path/` walks the directory and compiles every
403    /// `.harn` file; `harn precompile script.harn` compiles a single
404    /// file. Artifacts are written adjacent to each source as
405    /// `<name>.harnbc` by default; pass `--out DIR` to redirect them
406    /// into a sibling tree.
407    Precompile(PrecompileArgs),
408    /// Build or verify a `.harnpack` content-addressed run bundle.
409    ///
410    /// `harn pack <entrypoint>` walks the entrypoint's transitive imports,
411    /// precompiles every module, snapshots the provider catalog and
412    /// stdlib pin, generates a minimal SBOM, and emits a deterministic
413    /// tar.zst container under `<entrypoint>.harnpack` (or `--out`).
414    ///
415    /// `harn pack verify <bundle.harnpack>` reads a bundle back, recomputes
416    /// its canonical hash, verifies the embedded Ed25519 signature (if any),
417    /// and cross-checks every per-module BLAKE3 against the manifest.
418    /// Exits non-zero on any mismatch.
419    ///
420    /// `--upgrade <old.harnpack>` reads an existing bundle (v1 or v2) and
421    /// re-emits it under the v2 manifest, preserving the prior bundle's
422    /// workflow graph, triggers, and prompt capsules. `--exclude-secrets`
423    /// refuses to bundle paths that look like secrets (`.env`, `*.pem`,
424    /// `credentials*`, anything under `secrets/`).
425    Pack(PackArgs),
426    /// Render a .harn file as a Mermaid workflow graph.
427    Viz(VizArgs),
428    /// Install dependencies declared in harn.toml.
429    Install(InstallArgs),
430    /// Add a dependency to harn.toml.
431    Add(AddArgs),
432    /// Refresh one or more dependency lock entries.
433    Update(UpdateArgs),
434    /// Remove a dependency from harn.toml and harn.lock.
435    Remove(RemoveArgs),
436    /// Resolve dependencies and write harn.lock without materializing packages.
437    Lock,
438    /// Manage Harn package caches and integrity verification.
439    Package(PackageArgs),
440    /// Publish a package by tagging the source repo and opening a package-index PR.
441    Publish(PublishArgs),
442    /// List and inspect durable agent persona manifests.
443    Persona(PersonaArgs),
444    /// Merge Captain transcript oracle and audit (#1013).
445    #[command(name = "merge-captain")]
446    MergeCaptain(MergeCaptainArgs),
447    /// Print resolved metadata for a model alias or model id as JSON.
448    ModelInfo(ModelInfoArgs),
449    /// List, install, recommend, and test configured LLM models.
450    Models(ModelsArgs),
451    /// Manage local LLM runtime lifecycle: enumerate, switch, and stop
452    /// Ollama, llama.cpp, MLX, and other OpenAI-compatible local servers.
453    Local(LocalArgs),
454    /// Validate and generate provider/model catalog artifacts.
455    Providers(ProvidersArgs),
456    /// Inspect provider/model capabilities.
457    Provider(ProviderArgs),
458    /// Print the provider/model catalog Harn loaded as JSON.
459    ProviderCatalog(ProviderCatalogArgs),
460    /// Probe a provider's /models endpoint and optionally verify a served model.
461    ProviderReady(ProviderReadyArgs),
462    /// Snapshot a provider: readiness, served models, loaded models with
463    /// memory/context details. Designed for eval pipelines that need a
464    /// stable telemetry envelope per provider.
465    ProviderProbe(ProviderProbeArgs),
466    /// Run one-tool provider conformance and classify native/text fallback.
467    ProviderToolProbe(ProviderToolProbeArgs),
468    /// One-shot agent_loop with a prompt. Routes through the configured
469    /// provider (or `HARN_LLM_PROVIDER=mock` for offline use).
470    #[command(name = "try")]
471    Try(TryArgs),
472    /// Manage and inspect Harn skills (list/get/dump for the embedded
473    /// corpus; resolved/inspect/match/install/new for FS-resolved skills).
474    Skills(SkillsArgs),
475    /// Manage skill provenance: keys, signatures, verification, and trust policy.
476    Skill(SkillArgs),
477    /// Scaffold and inspect Harn-native custom tools.
478    Tool(ToolArgs),
479    /// Print the decorated version banner.
480    Version(VersionArgs),
481    /// Download and atomically replace the running `harn` binary with
482    /// the latest published GitHub release (or a specific tag via
483    /// `--version`). Verifies the archive against the release's
484    /// `SHA256SUMS` manifest before installing.
485    Upgrade(UpgradeArgs),
486    /// Regenerate docs/theme/harn-keywords.js from the live lexer + stdlib sets.
487    ///
488    /// Dev-only. Hidden from `--help` — invoke via
489    /// `cargo run -p harn-cli -- dump-highlight-keywords` or the
490    /// `make gen-highlight` target.
491    #[command(hide = true, name = "dump-highlight-keywords")]
492    DumpHighlightKeywords(DumpHighlightKeywordsArgs),
493    /// Regenerate docs/llm/harn-triggers-quickref.md from the live trigger provider catalog.
494    ///
495    /// Dev-only. Hidden from `--help` — invoke via
496    /// `cargo run -p harn-cli -- dump-trigger-quickref` or the
497    /// `make gen-trigger-quickref` target.
498    #[command(hide = true, name = "dump-trigger-quickref")]
499    DumpTriggerQuickref(DumpTriggerQuickrefArgs),
500    /// Regenerate docs/src/connectors/parity-matrix.md from connector package manifests.
501    ///
502    /// Dev-only. Hidden from `--help` — invoke via
503    /// `cargo run -p harn-cli -- dump-connector-matrix` or the
504    /// `make gen-connector-matrix` target.
505    #[command(hide = true, name = "dump-connector-matrix")]
506    DumpConnectorMatrix(DumpConnectorMatrixArgs),
507    /// Regenerate Harn protocol schemas and TypeScript/Swift bindings.
508    ///
509    /// Dev-only. Hidden from `--help` — invoke via
510    /// `cargo run -p harn-cli -- dump-protocol-artifacts` or the
511    /// `make gen-protocol-artifacts` target.
512    #[command(hide = true, name = "dump-protocol-artifacts")]
513    DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
514}
515
516#[cfg(test)]
517mod tests;