harn-stdlib 0.10.36

Embedded Harn standard library source catalog
Documentation
/**
 * `harn version` ported to .harn — see harn#2301 (W1).
 *
 * Build-time constants come from env vars set by the dispatch shim in
 * crates/harn-cli/src/lib.rs's `Command::Version` arm: HARN_BUILD_NAME,
 * HARN_BUILD_VERSION, HARN_BUILD_DESCRIPTION, and HARN_BUILD_REVISION.
 * The shim reads package metadata and the optional revision embedded by the
 * build script, never from the caller's runtime environment or checkout.
 *
 * The banner and JSON envelope shapes are pinned by
 * crates/harn-cli/tests/harn_cli_e2e/version_dispatch.rs.
 */
fn render_banner(version: string) -> string {
  return "\n ╱▔▔╲\n ╱    ╲    harn v" + version
    + "\n │ ◆  │    the agent harness language\n │    │\n ╰──╯╱\n   ╱╱\n"
}

fn render_json(
  name: string,
  version: string,
  description: string,
  source_revision: string?,
) -> string {
  // Adding an optional field does not bump VERSION_SCHEMA_VERSION.
  const env = {
    schemaVersion: 1,
    ok: true,
    data: {
      name: name,
      version: version,
      description: description,
      source_revision: source_revision,
    },
    error: nil,
    warnings: [],
  }
  return json_stringify_pretty(env)
}

fn main(harness: Harness) {
  const json_mode = harness.env.get_or("HARN_OUTPUT_JSON", "0") == "1"
  const version = harness.env.get_or("HARN_BUILD_VERSION", "unknown")
  if json_mode {
    const name = harness.env.get_or("HARN_BUILD_NAME", "harn-cli")
    const description = harness.env.get_or("HARN_BUILD_DESCRIPTION", "")
    const raw_revision = trim(harness.env.get_or("HARN_BUILD_REVISION", ""))
    const source_revision: string? = if raw_revision == "" {
      nil
    } else {
      raw_revision
    }
    harness.stdio.println(render_json(name, version, description, source_revision))
  } else {
    harness.stdio.println(render_banner(version))
  }
}