brainiac-github 0.0.1 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0429a02480efea5f24251aa7dfc818a7140867fd971367523c35125993bdaaca'
4
- data.tar.gz: a15b23fbce8f026cdc592cce528d7f1ca48fa304e21176a1d6bc6c34cdf54d5f
3
+ metadata.gz: 58c7781338d9306f96983620c1e19d0d6f844f33d1b6843fdc625b66752b7d82
4
+ data.tar.gz: 473c5d503104d10370891c2d452aad5d450980703122a10d2e09af0f4d3350d9
5
5
  SHA512:
6
- metadata.gz: 60af838671e16cf03b1e0488059c216c08094661a63689ccc203361e7a337dfd9d1bacbad64563bdb2fb7dd1a59432c1ac137b5f0b854fb22ae3973da0723ecc
7
- data.tar.gz: 6040fb703d23aac121df9f34c4188af9d643f8de9c8cb2d6a807954ebf57d7d56948ce32e62d1dfb58fd01e25c36de35a2eeb67ba7abad9e558a3facec0552ff
6
+ metadata.gz: dceffc28a15ae991ac61b2f257f44c2847708818eea23263e192751da092ff969a5c37a61d73fa71a072f7a151f030bf287f78d98365a1e41dd19f6a88976ca6
7
+ data.tar.gz: ec5bb6fcf641fe7128e641de48e57e4282f00f713321aaab8d0788788306adbcf3d07868eb745120162acb752a7396c419f478c853747e75ba67494159433ef0
@@ -101,19 +101,25 @@ module Brainiac
101
101
  repo_path = project_config["repo_path"]
102
102
 
103
103
  result = find_work_item_by_branch(branch)
104
- return [200, { status: "ignored", reason: "no matching card" }.to_json] unless result
105
104
 
106
- _internal_id, card_info = result
107
- card_number = card_info["number"]
108
- unless card_number
109
- LOG.warn "Card has no number — can't dispatch review"
110
- return [200, { status: "ignored", reason: "card has no number" }.to_json]
105
+ if result
106
+ _internal_id, card_info = result
107
+ card_number = card_info["number"]
108
+ unless card_number
109
+ LOG.warn "Card has no number can't dispatch review"
110
+ return [200, { status: "ignored", reason: "card has no number" }.to_json]
111
+ end
112
+ card_key = "card-#{card_number}"
113
+ else
114
+ card_info = {}
115
+ card_number = nil
116
+ card_key = "pr-#{repo_name.tr("/", "-")}-#{pr_number}"
111
117
  end
112
118
 
113
- card_key = "card-#{card_number}"
114
119
  return [200, { status: "ignored", reason: "session already active" }.to_json] if session_active?(card_key)
115
120
 
116
- LOG.info "PR review submitted by #{reviewer} on PR ##{pr_number} for card ##{card_number} (project: #{project_key})"
121
+ card_context = card_number ? " for card ##{card_number}" : ""
122
+ LOG.info "PR review submitted by #{reviewer} on PR ##{pr_number}#{card_context} (project: #{project_key})"
117
123
  dispatch_pr_review(card_number, card_key, card_info, pr_number, review, reviewer,
118
124
  repo_name, project_key, project_config, repo_path)
119
125
 
@@ -150,27 +156,31 @@ module Brainiac
150
156
  branch = JSON.parse(pr_data)["branch"]
151
157
 
152
158
  result = find_work_item_by_branch(branch)
153
- unless result
154
- LOG.info "No card found for PR ##{pr_number} (branch: #{branch})"
155
- return [200, { status: "ignored", reason: "no matching card" }.to_json]
156
- end
157
159
 
158
- _, card_info = result
159
- card_number = card_info["number"]
160
- worktree = card_info["worktree"]
160
+ if result
161
+ _, card_info = result
162
+ card_number = card_info["number"]
163
+ worktree = card_info["worktree"]
161
164
 
162
- unless worktree && File.directory?(worktree)
163
- LOG.info "No active worktree for PR ##{pr_number}, ignoring comment"
164
- return [200, { status: "ignored", reason: "no active worktree" }.to_json]
165
+ unless worktree && File.directory?(worktree)
166
+ LOG.info "No active worktree for PR ##{pr_number}, ignoring comment"
167
+ return [200, { status: "ignored", reason: "no active worktree" }.to_json]
168
+ end
169
+
170
+ card_key = "card-#{card_number}"
171
+ else
172
+ card_number = nil
173
+ worktree = project_config["repo_path"]
174
+ card_key = "pr-#{repo_name.tr("/", "-")}-#{pr_number}"
165
175
  end
166
176
 
167
- card_key = "card-#{card_number}"
168
177
  if session_active?(card_key)
169
- LOG.info "Skipping PR comment on card ##{card_number} — agent session already active"
178
+ LOG.info "Skipping PR comment on #{card_key} — agent session already active"
170
179
  return [200, { status: "ignored", reason: "session already active" }.to_json]
171
180
  end
172
181
 
173
- LOG.info "PR comment from #{comment_user} on PR ##{pr_number} for card ##{card_number} (project: #{project_key})"
182
+ card_context = card_number ? " for card ##{card_number}" : ""
183
+ LOG.info "PR comment from #{comment_user} on PR ##{pr_number}#{card_context} (project: #{project_key})"
174
184
  dispatch_pr_comment(card_number, card_key, pr_number, comment_id, comment_user, comment_body,
175
185
  repo_name, worktree, project_key, project_config)
176
186
 
@@ -225,6 +235,16 @@ module Brainiac
225
235
 
226
236
  private
227
237
 
238
+ def find_work_item_by_branch(branch)
239
+ map = load_work_item_map
240
+ map.each do |internal_id, info|
241
+ next unless info["branch"] == branch
242
+
243
+ return [internal_id, info]
244
+ end
245
+ nil
246
+ end
247
+
228
248
  def process_merged_pr(card_info, card_number, branch, pull_request, pr_url, pr_title, project_key, project_config, repo_path)
229
249
  mark_work_item_merged(card_number)
230
250
  cleanup_work_item_worktrees(card_number, repo_path: repo_path,
@@ -273,7 +293,8 @@ module Brainiac
273
293
 
274
294
  agent_name = agent_name_for(project_config)
275
295
  prompt = render_prompt(Prompts::PR_COMMENT,
276
- { "CARD_NUMBER" => card_number, "CARD_ID" => card_number,
296
+ { "CARD_NUMBER" => card_number || "PR-#{pr_number}",
297
+ "CARD_ID" => card_number || "PR-#{pr_number}",
277
298
  "COMMENT_CREATOR" => comment_user, "COMMENT_BODY" => comment_body,
278
299
  "PR_NUMBER" => pr_number.to_s, "WORKTREE_PATH" => worktree },
279
300
  brain_context: build_brain_context(agent_name: agent_name, card_number: card_number,
@@ -308,7 +329,8 @@ module Brainiac
308
329
  work_dir = worktree && File.directory?(worktree) ? worktree : repo_path
309
330
 
310
331
  prompt = render_prompt(Prompts::PR_REVIEW,
311
- { "CARD_NUMBER" => card_number, "CARD_ID" => card_number,
332
+ { "CARD_NUMBER" => card_number || "PR-#{pr_number}",
333
+ "CARD_ID" => card_number || "PR-#{pr_number}",
312
334
  "COMMENT_CREATOR" => reviewer, "REVIEW_CONTEXT" => review_context,
313
335
  "PR_NUMBER" => pr_number.to_s, "WORKTREE_PATH" => work_dir },
314
336
  brain_context: build_brain_context(agent_name: agent_name, card_number: card_number,
@@ -316,7 +338,8 @@ module Brainiac
316
338
  agent_name: agent_name, channel: :github)
317
339
 
318
340
  pid, log_file = run_agent(prompt, project_config: project_config, chdir: work_dir,
319
- log_name: "review-#{card_number}", agent_name: agent_name,
341
+ log_name: "review-#{card_number || "pr-#{pr_number}"}",
342
+ agent_name: agent_name,
320
343
  source: :github,
321
344
  source_context: { pr_number: pr_number, repo_name: repo_name, work_dir: work_dir })
322
345
  register_session(card_key, pid, log_file: log_file, agent_name: agent_name)
@@ -3,7 +3,7 @@
3
3
  module Brainiac
4
4
  module Plugins
5
5
  module Github
6
- VERSION = "0.0.1"
6
+ VERSION = "0.0.3"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainiac-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Davis