- Session class wrapping a session_id; block form `forge.session do |s|`
- Idempotent Session#close (in-memory short-circuit + server is also
idempotent server-side; @closed rolled back on transport failure so
retry is safe)
- Client#create_session / #list_sessions / #get_session
- TurnResult#text helper concatenates text events (skips thinking,
tool_call, and nil contents)
- Session#inspect / #to_s / #pretty_print redact the embedded client
reference so the bearer never leaks via logs / pp / irb / backtraces
- test/test_session.rb: 26 tests covering block-form auto-close on
return + on exception + with-failing-close-must-not-mask-block-error,
manual lifecycle, close idempotency (single DELETE on N closes),
transport-failure rollback, turn round-trip + files/timeout/auth,
closed-session guard, empty-prompt guard, TurnResult#text edge cases,
list/get state, cross-token 404, server 410, redaction in inspect /
to_s / PP, and a v0.1 #run regression smoke
v0.1 surface (#run, #upload_file, #create_token, #list_tokens,
#revoke_token, #healthz) is byte-identical — purely additive.
Spec: memory/spec-clawdforge-v0.2.md
Server core: 940861f
21 lines
689 B
Ruby
21 lines
689 B
Ruby
# frozen_string_literal: true
|
|
|
|
# Clawdforge — Ruby SDK for the clawdforge HTTP service.
|
|
#
|
|
# The clawdforge service wraps `claude -p` subprocess calls behind a bearer-
|
|
# token-gated REST API. This SDK is a thin idiomatic wrapper over that API.
|
|
#
|
|
# Quickstart:
|
|
#
|
|
# require "clawdforge"
|
|
# forge = Clawdforge::Client.new(base_url: "http://localhost:8800", token: "cf_...")
|
|
# r = forge.run(prompt: 'Reply with JSON: {"hello": "world"}')
|
|
# r.result # => {"hello" => "world"}
|
|
module Clawdforge
|
|
end
|
|
|
|
require_relative "clawdforge/version"
|
|
require_relative "clawdforge/errors"
|
|
require_relative "clawdforge/models"
|
|
require_relative "clawdforge/session"
|
|
require_relative "clawdforge/client"
|