harn-stdlib 0.8.52

Embedded Harn standard library source catalog
Documentation
import { agent_first_tool_format_override_warning_text } from "std/agent/options"

/**
 * Zero-config `agent_loop` convenience wrapper for `harn try "<prompt>"`.
 * The Rust dispatch shim passes resolved CLI options through environment
 * variables so this script owns the agent-loop behavior.
 *
 * Inputs (from the dispatch shim in crates/harn-cli/src/commands/try_cmd.rs):
 *   argv[0]            — prompt text
 *   HARN_TRY_MAX_ITERS — max agent_loop iterations (default 5)
 *   HARN_TRY_PROVIDER  — resolved provider for this invocation
 *   HARN_TRY_MODEL     — resolved model for this invocation
 *   HARN_TRY_TOOL_FORMAT — optional forced tool_format
 *   HARN_TRY_OVERRIDE_REASON — optional rationale for a forced tool_format
 */
fn __trimmed_env(harness: Harness, key: string) {
  let value = trim(harness.env.get_or(key, ""))
  if value == "" {
    return nil
  }
  return value
}

fn main(harness: Harness) {
  if len(argv) < 1 {
    harness.stdio.eprintln("try: prompt is required")
    exit(2)
  }
  let prompt = argv[0]
  let max_iters = to_int(harness.env.get_or("HARN_TRY_MAX_ITERS", "5")) ?? 5
  // No `tools` option: the registered-tool contract requires schemas,
  // not bare identifiers, and `harn try` is meant to be a zero-config
  // smoke test. Users wanting tool-augmented loops should use `harn
  // run` with a script that builds the options explicitly.
  var options = {max_iterations: max_iters, llm_retries: 2}
  let provider = __trimmed_env(harness, "HARN_TRY_PROVIDER")
  let model = __trimmed_env(harness, "HARN_TRY_MODEL")
  if provider != nil && model != nil {
    options = options + {provider: provider, model: model}
  }
  let tool_format = __trimmed_env(harness, "HARN_TRY_TOOL_FORMAT")
  if tool_format != nil {
    options = options + {tool_format: tool_format}
  }
  let override_reason = __trimmed_env(harness, "HARN_TRY_OVERRIDE_REASON")
  if override_reason != nil {
    options = options + {tool_format_override_reason: override_reason}
  }
  let result = agent_loop(prompt, nil, options)
  let warning = agent_first_tool_format_override_warning_text(transcript_events(result?.transcript))
  if warning != nil {
    __io_eprintln(warning)
  }
  harness.stdio.println(result.text)
}