opencode-magi 0.0.0-dev-20260522081829 → 0.0.0-dev-20260522101732

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.
package/dist/index.js CHANGED
@@ -306,6 +306,10 @@ function prMarkdownLink(repository, pr) {
306
306
  const url = `https://${host}/${repository.github.owner}/${repository.github.repo}/pull/${pr}`;
307
307
  return `[#${pr}](${url})`;
308
308
  }
309
+ export function formatRunStartMessage(command, repository, pr) {
310
+ const action = command === "merge" ? "merge flow" : "reviewing";
311
+ return `Started ${action} ${prMarkdownLink(repository, pr)}.`;
312
+ }
309
313
  function issueMarkdownLink(repository, issue) {
310
314
  const host = repository.github.host || "github.com";
311
315
  const url = `https://${host}/${repository.github.owner}/${repository.github.repo}/issues/${issue}`;
@@ -490,7 +494,7 @@ export const MagiPlugin = async ({ client, directory }) => {
490
494
  if (sync)
491
495
  return syncResult(runManager, states);
492
496
  return states
493
- .map((state) => `Started reviewing ${prMarkdownLink(repository, state.pr)}.`)
497
+ .map((state) => formatRunStartMessage("merge", repository, state.pr))
494
498
  .join("\n");
495
499
  },
496
500
  }),
@@ -535,7 +539,7 @@ export const MagiPlugin = async ({ client, directory }) => {
535
539
  if (sync)
536
540
  return syncResult(runManager, states);
537
541
  return states
538
- .map((state) => `Started reviewing ${prMarkdownLink(repository, state.pr)}.`)
542
+ .map((state) => formatRunStartMessage("review", repository, state.pr))
539
543
  .join("\n");
540
544
  },
541
545
  }),
@@ -343,6 +343,7 @@ async function classifyChecks(input) {
343
343
  }
344
344
  },
345
345
  options: reviewer.options,
346
+ parentSessionId: input.parentSessionId,
346
347
  parse: (text) => {
347
348
  const output = parseCiClassificationOutput(text);
348
349
  for (const check of output.checks) {
@@ -505,6 +506,7 @@ export async function waitForChecksWithClassification(input) {
505
506
  directory: input.directory,
506
507
  onClassifierProgress: input.onClassifierProgress,
507
508
  outputDir: input.outputDir,
509
+ parentSessionId: input.parentSessionId,
508
510
  pr: input.pr,
509
511
  repairAttempts: input.repairAttempts,
510
512
  repository: input.repository,
@@ -96,6 +96,7 @@ async function runEditor(input, worktreePath, cycle, reviewFindings, unresolvedT
96
96
  }
97
97
  },
98
98
  options: editor.options,
99
+ parentSessionId: input.parentSessionId,
99
100
  parse: parseEditOutput,
100
101
  permission: editor.permission,
101
102
  prompt,
@@ -250,6 +251,7 @@ async function runRereview(input, worktreePath, previousHeadSha, cycle, sessionI
250
251
  }
251
252
  },
252
253
  options: reviewer.options,
254
+ parentSessionId: input.parentSessionId,
253
255
  parse: (text) => parseRereviewOutputWithInlineTargets(text, inlineCommentTargets),
254
256
  permission: reviewer.permission,
255
257
  prompt,
@@ -333,6 +335,7 @@ async function runRereview(input, worktreePath, previousHeadSha, cycle, sessionI
333
335
  }
334
336
  },
335
337
  options: reviewer.options,
338
+ parentSessionId: input.parentSessionId,
336
339
  parse: (text) => {
337
340
  const output = parseRereviewCloseReconsiderationOutput(text);
338
341
  validateInlineCommentTargets(output.newFindings, inlineCommentTargets, "newFindings");
@@ -781,6 +784,7 @@ export async function runMerge(input) {
781
784
  exec,
782
785
  headSha: editedHeadSha,
783
786
  onProgress: (phase) => input.onProgress?.({ phase, type: "phase" }),
787
+ parentSessionId: input.parentSessionId,
784
788
  pr: input.pr,
785
789
  repairAttempts: input.config.output?.repairAttempts ?? 3,
786
790
  repository: input.repository,
@@ -89,6 +89,7 @@ function extractText(result, allowEmpty = false) {
89
89
  export async function createModelSession(input) {
90
90
  return extractSessionId(await input.client.session.create({
91
91
  body: {
92
+ parentID: input.parentSessionId,
92
93
  permission: toOpenCodePermissionRules(input.permission),
93
94
  title: input.title,
94
95
  },
@@ -113,6 +114,7 @@ export async function runModelText(input) {
113
114
  throwIfAborted(input.signal);
114
115
  const sessionId = await createModelSession({
115
116
  client: input.client,
117
+ parentSessionId: input.parentSessionId,
116
118
  permission: input.permission,
117
119
  title: input.title,
118
120
  });
@@ -152,6 +154,7 @@ export async function runModelWithRepair(input) {
152
154
  ? input.sessionId
153
155
  : extractSessionId(await input.client.session.create({
154
156
  body: {
157
+ parentID: input.parentSessionId,
155
158
  permission: toOpenCodePermissionRules(input.permission),
156
159
  title: input.title,
157
160
  },
@@ -290,6 +290,7 @@ async function runFindingValidation(input) {
290
290
  }
291
291
  },
292
292
  options: reviewer.options,
293
+ parentSessionId: input.reviewInput.parentSessionId,
293
294
  parse: (text) => {
294
295
  const output = parseFindingValidationOutput(text);
295
296
  validateFindingVotes({
@@ -403,6 +404,7 @@ async function runCloseReconsideration(input) {
403
404
  }
404
405
  },
405
406
  options: reviewer.options,
407
+ parentSessionId: input.reviewInput.parentSessionId,
406
408
  parse: (text) => {
407
409
  const output = parseCloseReconsiderationOutput(text);
408
410
  validateInlineCommentTargets(output.findings, input.inlineCommentTargets);
@@ -567,6 +569,7 @@ export async function runReview(input) {
567
569
  },
568
570
  onProgress: (phase) => input.onProgress?.({ phase, type: "phase" }),
569
571
  outputDir,
572
+ parentSessionId: input.parentSessionId,
570
573
  pr: input.pr,
571
574
  repairAttempts: input.config.output?.repairAttempts ?? 3,
572
575
  repository: input.repository,
@@ -665,6 +668,7 @@ export async function runReview(input) {
665
668
  }
666
669
  },
667
670
  options: reviewer.options,
671
+ parentSessionId: input.parentSessionId,
668
672
  parse: (text) => parseRereviewOutputWithInlineTargets(text, inlineCommentTargets),
669
673
  permission: reviewer.permission,
670
674
  prompt,
@@ -731,6 +735,7 @@ export async function runReview(input) {
731
735
  }
732
736
  },
733
737
  options: reviewer.options,
738
+ parentSessionId: input.parentSessionId,
734
739
  parse: (text) => parseReviewOutputWithInlineTargets(text, inlineCommentTargets),
735
740
  permission: reviewer.permission,
736
741
  prompt,
@@ -1292,6 +1292,7 @@ export class MagiRunManager {
1292
1292
  dryRun: input.dryRun,
1293
1293
  exec: withGitHubApiRetry(this.input.exec, input.config.github?.apiRetryAttempts ?? 3),
1294
1294
  onProgress: (progress) => this.applyReviewProgress(input.runId, progress),
1295
+ parentSessionId: input.parentSessionId,
1295
1296
  pr: input.pr,
1296
1297
  repository: input.repository,
1297
1298
  runId: input.runId,
@@ -1347,6 +1348,7 @@ export class MagiRunManager {
1347
1348
  dryRun: input.dryRun,
1348
1349
  exec: withGitHubApiRetry(this.input.exec, input.config.github?.apiRetryAttempts ?? 3),
1349
1350
  onProgress: (progress) => this.applyMergeProgress(input.runId, progress),
1351
+ parentSessionId: input.parentSessionId,
1350
1352
  pr: input.pr,
1351
1353
  repository: input.repository,
1352
1354
  runId: input.runId,
@@ -1388,6 +1390,7 @@ export class MagiRunManager {
1388
1390
  exec: withGitHubApiRetry(this.input.exec, input.config.github?.apiRetryAttempts ?? 3),
1389
1391
  issue: input.issue,
1390
1392
  onProgress: (progress) => this.applyTriageProgress(input.runId, progress),
1393
+ parentSessionId: input.parentSessionId,
1391
1394
  repository: input.repository,
1392
1395
  runId: input.runId,
1393
1396
  signal: input.signal,
@@ -152,6 +152,7 @@ async function runVote(input) {
152
152
  run: input.run,
153
153
  }),
154
154
  options: input.agent.options,
155
+ parentSessionId: input.run.parentSessionId,
155
156
  parse: input.parse,
156
157
  permission: input.agent.permission,
157
158
  prompt,
@@ -476,6 +477,7 @@ async function runActionPrompt(input) {
476
477
  client: input.input.client,
477
478
  model: agent.model,
478
479
  options: agent.options,
480
+ parentSessionId: input.input.parentSessionId,
479
481
  parse: parseTriageActionOutput,
480
482
  permission: agent.permission,
481
483
  prompt,
@@ -505,6 +507,7 @@ async function classifyMentionReplies(input) {
505
507
  client: input.input.client,
506
508
  model: agent.model,
507
509
  options: agent.options,
510
+ parentSessionId: input.input.parentSessionId,
508
511
  parse: parseTriageCommentClassificationOutput,
509
512
  permission: agent.permission,
510
513
  prompt,
@@ -845,6 +848,7 @@ async function createImplementationPr(input) {
845
848
  }
846
849
  },
847
850
  options: creator.options,
851
+ parentSessionId: input.input.parentSessionId,
848
852
  parse: parseTriageCreatePrOutput,
849
853
  permission: creator.permission,
850
854
  prompt,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-magi",
3
- "version": "0.0.0-dev-20260522081829",
3
+ "version": "0.0.0-dev-20260522101732",
4
4
  "description": "Multi-agent PR review and merge orchestration plugin for OpenCode.",
5
5
  "license": "MIT",
6
6
  "author": "Hirotomo Yamada <hirotomo.yamada@avap.co.jp>",