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