belay 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +155 -0
  4. data/app/assets/belay/application.css +1 -0
  5. data/app/controllers/belay/application_controller.rb +48 -0
  6. data/app/controllers/belay/runs_controller.rb +166 -0
  7. data/app/controllers/belay/stats_controller.rb +14 -0
  8. data/app/helpers/belay/application_helper.rb +76 -0
  9. data/app/views/belay/runs/_header.html.erb +20 -0
  10. data/app/views/belay/runs/_pending_gate.html.erb +25 -0
  11. data/app/views/belay/runs/_pending_needs_review.html.erb +30 -0
  12. data/app/views/belay/runs/_replayed_from.html.erb +7 -0
  13. data/app/views/belay/runs/_replays.html.erb +14 -0
  14. data/app/views/belay/runs/_step.html.erb +52 -0
  15. data/app/views/belay/runs/diff.html.erb +47 -0
  16. data/app/views/belay/runs/index.html.erb +60 -0
  17. data/app/views/belay/runs/show.html.erb +34 -0
  18. data/app/views/belay/shared/_flash.html.erb +11 -0
  19. data/app/views/belay/shared/_sidebar.html.erb +22 -0
  20. data/app/views/belay/stats/_chart.html.erb +56 -0
  21. data/app/views/belay/stats/_table.html.erb +22 -0
  22. data/app/views/belay/stats/index.html.erb +16 -0
  23. data/app/views/layouts/belay/application.html.erb +19 -0
  24. data/config/routes.rb +13 -0
  25. data/lib/belay/anthropic_provider.rb +166 -0
  26. data/lib/belay/application_record.rb +7 -0
  27. data/lib/belay/approval.rb +35 -0
  28. data/lib/belay/cache_entry.rb +65 -0
  29. data/lib/belay/configuration.rb +60 -0
  30. data/lib/belay/context.rb +241 -0
  31. data/lib/belay/daily_stats.rb +60 -0
  32. data/lib/belay/engine.rb +40 -0
  33. data/lib/belay/executor.rb +411 -0
  34. data/lib/belay/fake_provider.rb +41 -0
  35. data/lib/belay/janitor_job.rb +48 -0
  36. data/lib/belay/provider.rb +15 -0
  37. data/lib/belay/provider_response.rb +19 -0
  38. data/lib/belay/resume_run_job.rb +42 -0
  39. data/lib/belay/rule.rb +113 -0
  40. data/lib/belay/run.rb +629 -0
  41. data/lib/belay/step.rb +57 -0
  42. data/lib/belay/version.rb +5 -0
  43. data/lib/belay/workflow.rb +199 -0
  44. data/lib/belay.rb +49 -0
  45. data/lib/generators/belay/install/install_generator.rb +48 -0
  46. data/lib/generators/belay/install/templates/create_belay_approvals.rb.tt +43 -0
  47. data/lib/generators/belay/install/templates/create_belay_cache_entries.rb.tt +27 -0
  48. data/lib/generators/belay/install/templates/create_belay_rules.rb.tt +46 -0
  49. data/lib/generators/belay/install/templates/create_belay_runs.rb.tt +37 -0
  50. data/lib/generators/belay/install/templates/create_belay_steps.rb.tt +58 -0
  51. metadata +226 -0
metadata ADDED
@@ -0,0 +1,226 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: belay
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Swakhar Dey
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-10-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '7.1'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '9'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '7.1'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '9'
33
+ - !ruby/object:Gem::Dependency
34
+ name: actionview
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '7.1'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '9'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '7.1'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '9'
53
+ - !ruby/object:Gem::Dependency
54
+ name: activejob
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '7.1'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '9'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '7.1'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '9'
73
+ - !ruby/object:Gem::Dependency
74
+ name: activerecord
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '7.1'
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '9'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '7.1'
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '9'
93
+ - !ruby/object:Gem::Dependency
94
+ name: json_schemer
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '2.5'
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '2.5'
107
+ - !ruby/object:Gem::Dependency
108
+ name: pg
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '1.1'
114
+ type: :runtime
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '1.1'
121
+ - !ruby/object:Gem::Dependency
122
+ name: railties
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '7.1'
128
+ - - "<"
129
+ - !ruby/object:Gem::Version
130
+ version: '9'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '7.1'
138
+ - - "<"
139
+ - !ruby/object:Gem::Version
140
+ version: '9'
141
+ description: Belay records every model and tool call as a Postgres row, so an AI workflow
142
+ that crashes partway resumes from its last checkpoint instead of starting over.
143
+ email:
144
+ - swakhar.me@gmail.com
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - LICENSE
150
+ - README.md
151
+ - app/assets/belay/application.css
152
+ - app/controllers/belay/application_controller.rb
153
+ - app/controllers/belay/runs_controller.rb
154
+ - app/controllers/belay/stats_controller.rb
155
+ - app/helpers/belay/application_helper.rb
156
+ - app/views/belay/runs/_header.html.erb
157
+ - app/views/belay/runs/_pending_gate.html.erb
158
+ - app/views/belay/runs/_pending_needs_review.html.erb
159
+ - app/views/belay/runs/_replayed_from.html.erb
160
+ - app/views/belay/runs/_replays.html.erb
161
+ - app/views/belay/runs/_step.html.erb
162
+ - app/views/belay/runs/diff.html.erb
163
+ - app/views/belay/runs/index.html.erb
164
+ - app/views/belay/runs/show.html.erb
165
+ - app/views/belay/shared/_flash.html.erb
166
+ - app/views/belay/shared/_sidebar.html.erb
167
+ - app/views/belay/stats/_chart.html.erb
168
+ - app/views/belay/stats/_table.html.erb
169
+ - app/views/belay/stats/index.html.erb
170
+ - app/views/layouts/belay/application.html.erb
171
+ - config/routes.rb
172
+ - lib/belay.rb
173
+ - lib/belay/anthropic_provider.rb
174
+ - lib/belay/application_record.rb
175
+ - lib/belay/approval.rb
176
+ - lib/belay/cache_entry.rb
177
+ - lib/belay/configuration.rb
178
+ - lib/belay/context.rb
179
+ - lib/belay/daily_stats.rb
180
+ - lib/belay/engine.rb
181
+ - lib/belay/executor.rb
182
+ - lib/belay/fake_provider.rb
183
+ - lib/belay/janitor_job.rb
184
+ - lib/belay/provider.rb
185
+ - lib/belay/provider_response.rb
186
+ - lib/belay/resume_run_job.rb
187
+ - lib/belay/rule.rb
188
+ - lib/belay/run.rb
189
+ - lib/belay/step.rb
190
+ - lib/belay/version.rb
191
+ - lib/belay/workflow.rb
192
+ - lib/generators/belay/install/install_generator.rb
193
+ - lib/generators/belay/install/templates/create_belay_approvals.rb.tt
194
+ - lib/generators/belay/install/templates/create_belay_cache_entries.rb.tt
195
+ - lib/generators/belay/install/templates/create_belay_rules.rb.tt
196
+ - lib/generators/belay/install/templates/create_belay_runs.rb.tt
197
+ - lib/generators/belay/install/templates/create_belay_steps.rb.tt
198
+ homepage: https://github.com/Swakhar/belay
199
+ licenses:
200
+ - MIT
201
+ metadata:
202
+ source_code_uri: https://github.com/Swakhar/belay
203
+ changelog_uri: https://github.com/Swakhar/belay/blob/main/CHANGELOG.md
204
+ bug_tracker_uri: https://github.com/Swakhar/belay/issues
205
+ documentation_uri: https://swakhar.github.io/belay/
206
+ rubygems_mfa_required: 'true'
207
+ post_install_message:
208
+ rdoc_options: []
209
+ require_paths:
210
+ - lib
211
+ required_ruby_version: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: 3.2.0
216
+ required_rubygems_version: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ requirements: []
222
+ rubygems_version: 3.5.11
223
+ signing_key:
224
+ specification_version: 4
225
+ summary: Durable execution for AI agents in Rails.
226
+ test_files: []