Initial public release v0.0.1.alpha2
opencode-rails — production-grade Rails integration for OpenCode. Rails companion to opencode-ruby. ActiveRecord-aware session lifecycle (idempotent ensure!/recreate!/abort! with row-level locks), a Turn orchestrator driving the Reply state machine and recovering from session-not-found, an artifact pipeline backed by ActiveStorage, sandbox seeding, and tool-display value objects for Turbo Stream broadcasts. Drop into any Rails 7.1+ app that wants production-grade OpenCode streaming without rolling boilerplate. What this version ships: - Opencode::Session (AR-coupled lifecycle, row-level locks) - Opencode::Turn (Reply state machine, session-not-found recovery) - Opencode::Exchange (one turn = one request/response unit) - Opencode::Impostor (deterministic mock for tests) - Opencode::Sandbox / SandboxFile (per-session FS scratch space) - Opencode::Transform (host-rendered artifact pipeline) - Opencode::Artifact / MessageArtifacts (ActiveStorage-backed) - Opencode::UploadedFilesPrompt (system-prompt builder) - Opencode::ToolDisplay (Turbo Stream value objects) - Opencode::ErrorReporter (pluggable adapter — Honeybadger/Sentry/etc.) - examples/rails_integration.rb — canonical wiring blueprint 53 smoke tests. CI on Ruby 3.2/3.3/3.4. Ruby >= 3.2. Runtime deps: opencode-ruby = 0.0.1.alpha2, activerecord/activestorage/activesupport >= 7.1, < 9.0. See CHANGELOG.md for the alpha1 -> alpha2 delta.
This commit is contained in:
50
CHANGELOG.md
Normal file
50
CHANGELOG.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Changelog
|
||||
|
||||
## 0.0.1.alpha2 — 2026-05-20
|
||||
|
||||
### Changed
|
||||
|
||||
- `Opencode::Exchange` now emits `opencode.apply_patch.artifacts_dropped`
|
||||
via the new `Opencode::Instrumentation.notify` fire-and-forget API
|
||||
(introduced in opencode-ruby v0.0.1.alpha2) instead of
|
||||
`.instrument(name, payload) { }` with an empty block. Cleaner read
|
||||
at the call site; identical semantics on the wire (same event name,
|
||||
same payload).
|
||||
|
||||
### Bumped
|
||||
|
||||
- Runtime dependency `opencode-ruby` pinned to `= 0.0.1.alpha2` (was
|
||||
`= 0.0.1.alpha1`). Versions stay in lockstep during alpha.
|
||||
|
||||
## 0.0.1.alpha1 — 2026-05-20
|
||||
|
||||
Initial public alpha. Extracted from a production Rails app where these objects shipped as in-tree library code before being carved out into a standalone gem.
|
||||
|
||||
**Includes:**
|
||||
|
||||
- `Opencode::Session` — AR-coupled, row-level-locked session lifecycle (`ensure!`, `recreate!`, `abort!`)
|
||||
- `Opencode::Turn` — orchestrator covering send → stream → recover → finalize, with CAS-safe message terminal-state transitions
|
||||
- `Opencode::Exchange` — domain object over a turn's message array; emits `opencode.apply_patch.artifacts_dropped` when post-write file content is unavailable
|
||||
- `Opencode::Artifact` — value-object (filename + content + content_type + trust metadata), idempotent attach
|
||||
- `Opencode::MessageArtifacts` — ActiveStorage-aware artifact attachment pipeline with transform support
|
||||
- `Opencode::Sandbox` — disk-backed sandbox reader, returns `Artifact` list
|
||||
- `Opencode::SandboxFile` — single-file value object (pathname → bytes/content-type)
|
||||
- `Opencode::Transform` — base class for content-rewriting transforms
|
||||
- `Opencode::Impostor` — ActiveStorage download/upload round-trip helper
|
||||
- `Opencode::UploadedFilesPrompt` — user-prompt prefix builder listing uploaded files, sandbox-path inverted (injection-based, no `Opencode::Permissions` reference)
|
||||
- `Opencode::ToolDisplay` — view-model for tool-call hashes (Turbo Stream-friendly)
|
||||
- `Opencode::ErrorReporter` — pluggable adapter mirroring the `Opencode::Instrumentation` pattern
|
||||
|
||||
**Runtime dependencies:**
|
||||
|
||||
- `opencode-ruby ~> 0.0.1.alpha1` (wire client + Reply state machine)
|
||||
- `activerecord >= 7.1, < 9.0`
|
||||
- `activestorage >= 7.1, < 9.0`
|
||||
- `activesupport >= 7.1, < 9.0`
|
||||
|
||||
**Known limitations (alpha):**
|
||||
|
||||
- Apply-patch tool's post-write file content is not extracted (wire-format limitation in OpenCode v1.15+); affected files surface via the `opencode.apply_patch.artifacts_dropped` instrumentation event. Future work: optional sandbox-read fallback path.
|
||||
- Smoke tests only inside the gem. Behavioral coverage currently lives in the host app that produced this code. A standalone gem-side test suite using Combustion is open work.
|
||||
- No generator (`rails g opencode:install`) yet.
|
||||
- No Rails Engine integration — `require "opencode-rails"` is sufficient.
|
||||
Reference in New Issue
Block a user