Module: Optimize::Demo::Claude::Invoker
- Defined in:
- lib/optimize/demo/claude/invoker.rb
Overview
Thin shell wrapper around ‘claude -p –output-format json`. Single-shot, no retries — the caller is responsible for orchestration.
Defined Under Namespace
Classes: CLIError, ParseError
Class Method Summary collapse
-
.call(prompt:, binary: "claude") ⇒ Object
Shells out to ‘claude -p –output-format json`, pipes
prompton stdin.
Class Method Details
.call(prompt:, binary: "claude") ⇒ Object
Shells out to ‘claude -p –output-format json`, pipes prompt on stdin. Returns the JSON-parsed assistant output (the contents of the envelope’s “result” field, re-parsed as JSON).
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/optimize/demo/claude/invoker.rb', line 27 def call(prompt:, binary: "claude") stdout, stderr, status = Open3.capture3( binary, "-p", "--output-format", "json", stdin_data: prompt ) unless status.exitstatus.zero? raise CLIError, "#{binary} exited #{status.exitstatus}: #{stderr}" end envelope = begin JSON.parse(stdout) rescue JSON::ParserError => e raise CLIError, "could not parse #{binary} envelope: #{e.}" end unless envelope.is_a?(Hash) && envelope.key?("result") raise CLIError, "#{binary} envelope missing 'result' field: #{envelope.inspect[0, 200]}" end result_text = envelope["result"] begin JSON.parse(result_text) rescue JSON::ParserError => e raise ParseError, "could not parse assistant JSON: #{e.}\n---\n#{result_text}" end end |