brainiac-github 0.0.2 → 0.0.4

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: 349dea99e9af54116610ef4d46162210af43d3ff1b0cbad891aef306483cffc3
4
- data.tar.gz: 7f3a383dd917c7cd5b066f2f1027d10b670b1ca0b8291fc58b3cd052c88c3203
3
+ metadata.gz: 2b4b7765436395524bb60085fcbc02da2c081ad9317936158e0e1b35b55d84c6
4
+ data.tar.gz: 7d1ee30b16258e253fe89330a9c4d8a59452e87f94f939bc4146aa0170d81ed6
5
5
  SHA512:
6
- metadata.gz: '05028d62ddd36e394db50d37873e8380ee6fb2c75ded41104d5e25502847fbd23b3de5984bd53576323356ffed4c5711df8e9796d45fe43ad828aa51c24eb102'
7
- data.tar.gz: 9d662f48d40ddb9ba386324af8c76ab980fb3f611c4b2b6ddfc38fdb1f6bb4881f88ed455842caeba6a9a205af474b61c99a104e7e7f8e71cefa9760a1ea1f10
6
+ metadata.gz: 7e9da9afda1cabacd1aaf6c6ec6705b77f515b0ec161b109fe8b08a466ebf8a129fae26705538d131e01ef60419c61505cb3386fe0aaee1b90d99f80e09d7871
7
+ data.tar.gz: a8584862b22c4efe2627d9174d0b52062e079c0853f344e13f22c4ec13b9ded05adf1aff741e347e8c9ec3d3f223fbfacf5909717c503409a9d1513a90babe81
@@ -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"]
164
+
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
161
169
 
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]
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
 
@@ -283,7 +293,8 @@ module Brainiac
283
293
 
284
294
  agent_name = agent_name_for(project_config)
285
295
  prompt = render_prompt(Prompts::PR_COMMENT,
286
- { "CARD_NUMBER" => card_number, "CARD_ID" => card_number,
296
+ { "CARD_NUMBER" => card_number || "PR-#{pr_number}",
297
+ "CARD_ID" => card_number || "PR-#{pr_number}",
287
298
  "COMMENT_CREATOR" => comment_user, "COMMENT_BODY" => comment_body,
288
299
  "PR_NUMBER" => pr_number.to_s, "WORKTREE_PATH" => worktree },
289
300
  brain_context: build_brain_context(agent_name: agent_name, card_number: card_number,
@@ -295,7 +306,10 @@ module Brainiac
295
306
  model: detect_model(project_config, text: comment_body),
296
307
  effort: detect_effort(project_config, text: comment_body),
297
308
  agent_name: agent_name, source: :github,
298
- source_context: { pr_number: pr_number, repo_name: repo_name, work_dir: worktree })
309
+ source_context: { pr_number: pr_number, repo_name: repo_name, work_dir: worktree },
310
+ message: comment_body, channel: "GitHub PR comment")
311
+ return unless pid
312
+
299
313
  register_session(card_key, pid, log_file: log_file, agent_name: agent_name)
300
314
  end
301
315
 
@@ -318,7 +332,8 @@ module Brainiac
318
332
  work_dir = worktree && File.directory?(worktree) ? worktree : repo_path
319
333
 
320
334
  prompt = render_prompt(Prompts::PR_REVIEW,
321
- { "CARD_NUMBER" => card_number, "CARD_ID" => card_number,
335
+ { "CARD_NUMBER" => card_number || "PR-#{pr_number}",
336
+ "CARD_ID" => card_number || "PR-#{pr_number}",
322
337
  "COMMENT_CREATOR" => reviewer, "REVIEW_CONTEXT" => review_context,
323
338
  "PR_NUMBER" => pr_number.to_s, "WORKTREE_PATH" => work_dir },
324
339
  brain_context: build_brain_context(agent_name: agent_name, card_number: card_number,
@@ -326,9 +341,13 @@ module Brainiac
326
341
  agent_name: agent_name, channel: :github)
327
342
 
328
343
  pid, log_file = run_agent(prompt, project_config: project_config, chdir: work_dir,
329
- log_name: "review-#{card_number}", agent_name: agent_name,
344
+ log_name: "review-#{card_number || "pr-#{pr_number}"}",
345
+ agent_name: agent_name,
330
346
  source: :github,
331
- source_context: { pr_number: pr_number, repo_name: repo_name, work_dir: work_dir })
347
+ source_context: { pr_number: pr_number, repo_name: repo_name, work_dir: work_dir },
348
+ message: review["body"], channel: "GitHub PR review")
349
+ return unless pid
350
+
332
351
  register_session(card_key, pid, log_file: log_file, agent_name: agent_name)
333
352
  end
334
353
 
@@ -3,7 +3,7 @@
3
3
  module Brainiac
4
4
  module Plugins
5
5
  module Github
6
- VERSION = "0.0.2"
6
+ VERSION = "0.0.4"
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.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Davis
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.0.9
18
+ version: 0.0.14
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 0.0.9
25
+ version: 0.0.14
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: minitest
28
28
  requirement: !ruby/object:Gem::Requirement