@a9n-shoji/rvw 0.2.4 → 0.2.5

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 (104) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cli.mjs +89 -35
  3. package/dist/cli.mjs.map +2 -2
  4. package/dist/web/assets/{DocumentViewer-B4LdSL1l.js → DocumentViewer-C2e6Mgta.js} +49 -40
  5. package/dist/web/assets/MarkdownTable-bGEPkcFA.js +7 -0
  6. package/dist/web/assets/WalkthroughViewer-TxeLcTE2.js +1 -0
  7. package/dist/web/assets/{abnfDiagram-N423BO3Z-CE1nZSC9.js → abnfDiagram-N423BO3Z-gOmziSzZ.js} +1 -1
  8. package/dist/web/assets/architecture-TIHT7OUA-B9tjggXM.js +1 -0
  9. package/dist/web/assets/{architectureDiagram-T3A2C74G-B88qYFUo.js → architectureDiagram-T3A2C74G-C9sPb-OU.js} +1 -1
  10. package/dist/web/assets/{blockDiagram-VBNYF7ZC-BaX0rhbb.js → blockDiagram-VBNYF7ZC-CxqI40sc.js} +1 -1
  11. package/dist/web/assets/{c4Diagram-5PPSVZJV-C1ppBaEC.js → c4Diagram-5PPSVZJV-BAK8Z0Vr.js} +1 -1
  12. package/dist/web/assets/channel-BD2FosIt.js +1 -0
  13. package/dist/web/assets/{chunk-2GRJ4B5K-D2TTocfh.js → chunk-2GRJ4B5K-oKAARewZ.js} +1 -1
  14. package/dist/web/assets/{chunk-4I5QYGJK-ikT25rPN.js → chunk-4I5QYGJK-BAAbxidn.js} +1 -1
  15. package/dist/web/assets/{chunk-5RXB4S5H-CGlPaulj.js → chunk-5RXB4S5H-DQ-Dk-To.js} +1 -1
  16. package/dist/web/assets/{chunk-6Q2QTUOP-BuuMeCo2.js → chunk-6Q2QTUOP-B64WcpmV.js} +1 -1
  17. package/dist/web/assets/{chunk-7Z6QIM7H-DT3BAZ4L.js → chunk-7Z6QIM7H-DiUNIjSC.js} +1 -1
  18. package/dist/web/assets/{chunk-GF5L2VYU-mIdlxzfr.js → chunk-GF5L2VYU-rbtkA8ZE.js} +1 -1
  19. package/dist/web/assets/{chunk-I66GZJ75-CGl1hx4J.js → chunk-I66GZJ75-BywUmQY9.js} +1 -1
  20. package/dist/web/assets/{chunk-JQJVKLGR-BLG6gAfx.js → chunk-JQJVKLGR-BW097h_E.js} +1 -1
  21. package/dist/web/assets/{chunk-KBJHAD2P-D_MPzBJx.js → chunk-KBJHAD2P-C1kXPXRi.js} +1 -1
  22. package/dist/web/assets/{chunk-NSK5VX7P-CiYiU8wP.js → chunk-NSK5VX7P-kej84W5N.js} +1 -1
  23. package/dist/web/assets/{chunk-QR6OTTB3-BK8Tnvcc.js → chunk-QR6OTTB3-BOzVZt4h.js} +1 -1
  24. package/dist/web/assets/{chunk-UBXNYLIW-BuzttTFk.js → chunk-UBXNYLIW-CJsGqSLH.js} +1 -1
  25. package/dist/web/assets/{chunk-W5SLKNZC-UidmFHe2.js → chunk-W5SLKNZC-BcRL2jRx.js} +1 -1
  26. package/dist/web/assets/{chunk-WRU74C26-nox7WFnh.js → chunk-WRU74C26-BDqViURG.js} +1 -1
  27. package/dist/web/assets/classDiagram-JCYQIIEL-yDkoGFrq.js +1 -0
  28. package/dist/web/assets/classDiagram-v2-OCEON4UE-yDkoGFrq.js +1 -0
  29. package/dist/web/assets/{cynefin-VYW2F7L2-wDMibS5s.js → cynefin-VYW2F7L2-Dugz8jnV.js} +1 -1
  30. package/dist/web/assets/{cynefinDiagram-MW4NZA55-CBTrdvOE.js → cynefinDiagram-MW4NZA55-D-C0yr-E.js} +1 -1
  31. package/dist/web/assets/{dagre-VZM6K2ZE-Bbgn4Rr7.js → dagre-VZM6K2ZE-Cw5E1SBZ.js} +1 -1
  32. package/dist/web/assets/{diagram-7IWD3JNH-Bm9AuXb9.js → diagram-7IWD3JNH-Sf7kJZ8B.js} +1 -1
  33. package/dist/web/assets/{diagram-B4RE2ZJO-D3lZ-r-H.js → diagram-B4RE2ZJO-yCiqe-d4.js} +1 -1
  34. package/dist/web/assets/{diagram-LBJQPF4R-D-GaynX7.js → diagram-LBJQPF4R-GOlna-Ju.js} +1 -1
  35. package/dist/web/assets/{diagram-Q27KOJAE-BeZRiu1d.js → diagram-Q27KOJAE-D6EGrNVJ.js} +1 -1
  36. package/dist/web/assets/{diagram-UB23O5K3-C3GP7iMe.js → diagram-UB23O5K3-DdPGDYZ-.js} +1 -1
  37. package/dist/web/assets/{ebnfDiagram-BXEA7PRR-BJWg0NVU.js → ebnfDiagram-BXEA7PRR-Cm7S99yh.js} +1 -1
  38. package/dist/web/assets/{erDiagram-JOGREHBK-XPmhUeB_.js → erDiagram-JOGREHBK-BaGSsO0U.js} +1 -1
  39. package/dist/web/assets/eventmodeling-45OFAUF4-CbAFmLja.js +1 -0
  40. package/dist/web/assets/flowDiagram-UKHOOZJN-Dz1a-iuK.js +1 -0
  41. package/dist/web/assets/{ganttDiagram-PKOTCBZU-CL-xEo-M.js → ganttDiagram-PKOTCBZU-Dcim-2qK.js} +1 -1
  42. package/dist/web/assets/{gitGraph-TEB2WS4Q-BVRyuIx3.js → gitGraph-TEB2WS4Q-BhPbNzbD.js} +1 -1
  43. package/dist/web/assets/{gitGraphDiagram-DS77QQ5N-BVNIEupW.js → gitGraphDiagram-DS77QQ5N-5n4OZuxI.js} +1 -1
  44. package/dist/web/assets/index-BOdYI3os.css +1 -0
  45. package/dist/web/assets/index-D2MzuS4L.js +384 -0
  46. package/dist/web/assets/{info-DKCQHKI2-BKBUVpfc.js → info-DKCQHKI2-B18FoJmv.js} +1 -1
  47. package/dist/web/assets/{infoDiagram-6WML65LV-_dTFnzSE.js → infoDiagram-6WML65LV-Cjd9H30j.js} +1 -1
  48. package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-DIRgD4hO.js → ishikawaDiagram-WSZJBQD7-B2HYwzk0.js} +1 -1
  49. package/dist/web/assets/{journeyDiagram-NVQOT4AX-bp7nZrfR.js → journeyDiagram-NVQOT4AX-CIIOlEIS.js} +1 -1
  50. package/dist/web/assets/{kanban-definition-27J2QSJJ-C6mZIo8S.js → kanban-definition-27J2QSJJ-DpD98gCE.js} +1 -1
  51. package/dist/web/assets/{line-DWTym7eJ.js → line-1uMtgP84.js} +1 -1
  52. package/dist/web/assets/{mermaid-parser.core-CbecsNA1.js → mermaid-parser.core-CsoLrwW_.js} +3 -3
  53. package/dist/web/assets/{mermaid.core-CdRuLyYI.js → mermaid.core-DLvBOZ4b.js} +4 -4
  54. package/dist/web/assets/{mindmap-definition-FAOFIHXS-CU2P1z-9.js → mindmap-definition-FAOFIHXS-aX8l0lZ8.js} +1 -1
  55. package/dist/web/assets/{packet-7NZHBO7P-CZsup6Od.js → packet-7NZHBO7P-C2mk4cRM.js} +1 -1
  56. package/dist/web/assets/{pegDiagram-VL7TDLO6-DTTyttpe.js → pegDiagram-VL7TDLO6-DJxCPsMd.js} +1 -1
  57. package/dist/web/assets/{pie-RZYD4A2V-DgrIiWZA.js → pie-RZYD4A2V-ZvoBUm4W.js} +1 -1
  58. package/dist/web/assets/{pieDiagram-7S7Q4E2Y-BBNFyPT1.js → pieDiagram-7S7Q4E2Y-B_Zxlt9c.js} +1 -1
  59. package/dist/web/assets/{quadrantDiagram-CIZ2JOQS-ejp-Aa2l.js → quadrantDiagram-CIZ2JOQS-BdQdNvfJ.js} +1 -1
  60. package/dist/web/assets/{radar-I7S5WNFK-Cp_hfjrI.js → radar-I7S5WNFK-C50TztIy.js} +1 -1
  61. package/dist/web/assets/{railroad-3IZDKUUU-Dw-oMal2.js → railroad-3IZDKUUU-C_CK0C2Y.js} +1 -1
  62. package/dist/web/assets/railroad-abnf-AHOZXSZD-DEjonoj9.js +1 -0
  63. package/dist/web/assets/railroad-ebnf-EBAXGLYW-BGY58zLm.js +1 -0
  64. package/dist/web/assets/railroad-peg-LSFZ7HO6-9byrH0Ii.js +1 -0
  65. package/dist/web/assets/{railroadDiagram-AXF67PYL-DkBUaj6Z.js → railroadDiagram-AXF67PYL-CZ1vA-S_.js} +1 -1
  66. package/dist/web/assets/{requirementDiagram-LRYGKXZP-Dff1ex_h.js → requirementDiagram-LRYGKXZP-BDp4_zQI.js} +1 -1
  67. package/dist/web/assets/{sankeyDiagram-W5VNT64P-DptSL9Bc.js → sankeyDiagram-W5VNT64P-CQQl9FYv.js} +1 -1
  68. package/dist/web/assets/{sequenceDiagram-SI44F4Z6-DEnPcs3U.js → sequenceDiagram-SI44F4Z6-BGANFekR.js} +1 -1
  69. package/dist/web/assets/{stateDiagram-OKZ733FA-BwJO1MKA.js → stateDiagram-OKZ733FA-DbYseVuv.js} +1 -1
  70. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CaYT-_kk.js +1 -0
  71. package/dist/web/assets/{swimlanes-SLNWSIFB-BosKiwZA.js → swimlanes-SLNWSIFB-Db9iJuW8.js} +1 -1
  72. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-CgMcCXPx.js +8 -0
  73. package/dist/web/assets/{timeline-definition-Z64GVDOM-C5isAn4X.js → timeline-definition-Z64GVDOM-Ioz0wd0X.js} +1 -1
  74. package/dist/web/assets/{treeView-QDETBFTQ-zEyUXRc4.js → treeView-QDETBFTQ-clJ74kxF.js} +1 -1
  75. package/dist/web/assets/{treemap-6X3UGDF4-B-X0EQSE.js → treemap-6X3UGDF4-Dr2iSopM.js} +1 -1
  76. package/dist/web/assets/{vennDiagram-T6HMQDX7-QMdGieCa.js → vennDiagram-T6HMQDX7-Dm_4JT58.js} +1 -1
  77. package/dist/web/assets/{wardley-OPB4EBWU-BaeAF8d8.js → wardley-OPB4EBWU-BijQqUc8.js} +1 -1
  78. package/dist/web/assets/{wardleyDiagram-T6FBY63Y-DTQ_uLUq.js → wardleyDiagram-T6FBY63Y-C4x0wEqS.js} +1 -1
  79. package/dist/web/assets/{xychartDiagram-ELKLHX3M-BMdBWzib.js → xychartDiagram-ELKLHX3M-BGoEonWo.js} +1 -1
  80. package/dist/web/index.html +2 -2
  81. package/migrations/011_comment_post_modifier.sql +3 -0
  82. package/package.json +1 -1
  83. package/skills/rvw/SKILL.md +1 -1
  84. package/skills/rvw-walkthrough/SKILL.md +1 -1
  85. package/skills/rvw-watch-comments/SKILL.md +28 -13
  86. package/skills/rvw-watch-comments/scripts/auto-ack.mjs +18 -2
  87. package/skills/rvw-watch-comments/scripts/preflight.mjs +1 -1
  88. package/skills/rvw-watch-comments/scripts/watch-driver.mjs +47 -17
  89. package/skills/rvw-watch-comments/scripts/watch-state.mjs +50 -3
  90. package/dist/web/assets/MarkdownTable-CdbKPft2.js +0 -7
  91. package/dist/web/assets/WalkthroughViewer-D1LlSQw2.js +0 -1
  92. package/dist/web/assets/architecture-TIHT7OUA-edLV2Zq-.js +0 -1
  93. package/dist/web/assets/channel-J8FHSJDG.js +0 -1
  94. package/dist/web/assets/classDiagram-JCYQIIEL-CmTWSnH0.js +0 -1
  95. package/dist/web/assets/classDiagram-v2-OCEON4UE-CmTWSnH0.js +0 -1
  96. package/dist/web/assets/eventmodeling-45OFAUF4-C3c4qddw.js +0 -1
  97. package/dist/web/assets/flowDiagram-UKHOOZJN-DMA-a1zf.js +0 -1
  98. package/dist/web/assets/index-D8GJBw23.js +0 -384
  99. package/dist/web/assets/index-DMD2vvQW.css +0 -1
  100. package/dist/web/assets/railroad-abnf-AHOZXSZD-BN-ZBhE0.js +0 -1
  101. package/dist/web/assets/railroad-ebnf-EBAXGLYW-CG97zyI2.js +0 -1
  102. package/dist/web/assets/railroad-peg-LSFZ7HO6-DHLQ1evQ.js +0 -1
  103. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-LaSNqvWy.js +0 -1
  104. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-C5OBtBlv.js +0 -8
@@ -23,6 +23,7 @@ const EXIT_AUTO_ACK = 23;
23
23
  const EXIT_ALREADY_RUNNING = 24;
24
24
  const DEFAULT_MAX_IN_FLIGHT = 1;
25
25
  const DEFAULT_AUTO_ACK_POLL_MS = 250;
26
+ const MAX_AUTHOR_LABEL_CHARACTERS = 100;
26
27
  const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
27
28
  const stateScript = path.join(scriptDirectory, "watch-state.mjs");
28
29
  const autoAckScript = path.join(scriptDirectory, "auto-ack.mjs");
@@ -41,6 +42,7 @@ function parseArguments(values) {
41
42
  let autoAck = false;
42
43
  let maxInFlight = DEFAULT_MAX_IN_FLIGHT;
43
44
  let maxInFlightProvided = false;
45
+ let authorLabel = null;
44
46
  for (let index = 0; index < values.length; index += 1) {
45
47
  const value = values[index];
46
48
  if (value === "--auto-ack") {
@@ -60,6 +62,18 @@ function parseArguments(values) {
60
62
  index += 1;
61
63
  continue;
62
64
  }
65
+ if (value === "--author-label") {
66
+ const next = values[index + 1];
67
+ if (!next || next.startsWith("--") || next.length > MAX_AUTHOR_LABEL_CHARACTERS) {
68
+ throw new DriverError(
69
+ `--author-label must contain 1 through ${MAX_AUTHOR_LABEL_CHARACTERS} characters`,
70
+ EXIT_WATCH,
71
+ );
72
+ }
73
+ authorLabel = next;
74
+ index += 1;
75
+ continue;
76
+ }
63
77
  if (value === "--state") {
64
78
  const next = values[index + 1];
65
79
  if (!next || next.startsWith("--")) {
@@ -79,7 +93,10 @@ function parseArguments(values) {
79
93
  if (!autoAck && maxInFlightProvided) {
80
94
  throw new DriverError("--max-in-flight requires --auto-ack", EXIT_WATCH);
81
95
  }
82
- return { state: path.resolve(state), autoAck, maxInFlight };
96
+ if (!autoAck && authorLabel !== null) {
97
+ throw new DriverError("--author-label requires --auto-ack", EXIT_WATCH);
98
+ }
99
+ return { state: path.resolve(state), autoAck, maxInFlight, authorLabel };
83
100
  }
84
101
 
85
102
  async function runNodeScript(script, args, input) {
@@ -219,20 +236,17 @@ function releaseDriverLock(lock) {
219
236
  unlinkIfOwned(lock.path, lock.identity);
220
237
  }
221
238
 
222
- async function dispatchAutoAck(state, pullRequest) {
223
- const result = await runNodeScript(autoAckScript, [
224
- "--state",
225
- state,
226
- "--pull-request",
227
- pullRequest,
228
- ]);
239
+ async function dispatchAutoAck(state, pullRequest, authorLabel) {
240
+ const args = ["--state", state, "--pull-request", pullRequest];
241
+ if (authorLabel !== null) args.push("--author-label", authorLabel);
242
+ const result = await runNodeScript(autoAckScript, args);
229
243
  if (result.code !== 0 || !result.json?.ok) {
230
244
  throw new DriverError(`auto-ack failed for ${pullRequest}`, EXIT_AUTO_ACK, result);
231
245
  }
232
246
  write({ ...result.json, type: "batch-acknowledged" });
233
247
  }
234
248
 
235
- async function dispatchPendingAutoAcks(state, maxInFlight) {
249
+ async function dispatchPendingAutoAcks(state, maxInFlight, authorLabel) {
236
250
  const work = await stateCommand(state, "list");
237
251
  const inFlight = Number(work.inFlight);
238
252
  if (!Number.isSafeInteger(inFlight) || inFlight < 0 || !Array.isArray(work.pending)) {
@@ -241,12 +255,26 @@ async function dispatchPendingAutoAcks(state, maxInFlight) {
241
255
  let available = Math.max(0, maxInFlight - inFlight);
242
256
  for (const batch of work.pending) {
243
257
  if (available === 0) break;
244
- await dispatchAutoAck(state, batch.pullRequest);
258
+ await dispatchAutoAck(state, batch.pullRequest, authorLabel);
245
259
  available -= 1;
246
260
  }
247
261
  }
248
262
 
249
- async function processFrame(state, frame, autoAck, maxInFlight) {
263
+ async function assertTaskAuthorLabel(state, authorLabel) {
264
+ const current = await stateCommand(state, "status");
265
+ if (!current.authorLabelBound || current.authorLabel === authorLabel) return;
266
+ throw new DriverError(
267
+ `Existing task author label ${current.authorLabel ?? "(unlabeled)"} does not match ${authorLabel ?? "(unlabeled)"}`,
268
+ EXIT_AUTO_ACK,
269
+ {
270
+ state,
271
+ expectedAuthorLabel: current.authorLabel,
272
+ receivedAuthorLabel: authorLabel,
273
+ },
274
+ );
275
+ }
276
+
277
+ async function processFrame(state, frame, autoAck, maxInFlight, authorLabel) {
250
278
  if (!frame || typeof frame !== "object" || typeof frame.type !== "string") {
251
279
  throw new DriverError("Invalid RFC 7464 frame", EXIT_SEQUENCE, frame);
252
280
  }
@@ -263,6 +291,7 @@ async function processFrame(state, frame, autoAck, maxInFlight) {
263
291
  anchoredAtCurrent: frame.anchoredAtCurrent,
264
292
  autoAck,
265
293
  maxInFlight: autoAck ? maxInFlight : null,
294
+ authorLabel: autoAck ? authorLabel : null,
266
295
  });
267
296
  } else if (frame.type === "comment-posted" && ingested.status === "queued") {
268
297
  if (!autoAck) {
@@ -286,7 +315,7 @@ function autoAckPollMilliseconds() {
286
315
  : DEFAULT_AUTO_ACK_POLL_MS;
287
316
  }
288
317
 
289
- async function runWatchOnce(state, autoAck, maxInFlight, stopping) {
318
+ async function runWatchOnce(state, autoAck, maxInFlight, authorLabel, stopping) {
290
319
  const current = await stateCommand(state, "status");
291
320
  const args = ["comment", "watch"];
292
321
  if (current.cursor) args.push("--after", current.cursor);
@@ -309,7 +338,7 @@ async function runWatchOnce(state, autoAck, maxInFlight, stopping) {
309
338
  const pumpAutoAcks = async () => {
310
339
  if (!autoAck || stopping.requested) return;
311
340
  if (autoAckPump) return autoAckPump;
312
- autoAckPump = dispatchPendingAutoAcks(state, maxInFlight);
341
+ autoAckPump = dispatchPendingAutoAcks(state, maxInFlight, authorLabel);
313
342
  try {
314
343
  await autoAckPump;
315
344
  } catch (error) {
@@ -345,7 +374,7 @@ async function runWatchOnce(state, autoAck, maxInFlight, stopping) {
345
374
  }
346
375
  readySeen ||= frame.type === "ready";
347
376
  stoppedSeen ||= frame.type === "stopped";
348
- await processFrame(state, frame, autoAck, maxInFlight);
377
+ await processFrame(state, frame, autoAck, maxInFlight, authorLabel);
349
378
  }
350
379
  await pumpAutoAcks();
351
380
  }
@@ -383,9 +412,10 @@ function delay(milliseconds) {
383
412
  }
384
413
 
385
414
  async function main() {
386
- const { state, autoAck, maxInFlight } = parseArguments(process.argv.slice(2));
415
+ const { state, autoAck, maxInFlight, authorLabel } = parseArguments(process.argv.slice(2));
387
416
  const driverLock = acquireDriverLock(state);
388
417
  try {
418
+ if (autoAck) await assertTaskAuthorLabel(state, authorLabel);
389
419
  const stopping = { requested: false, child: null };
390
420
  const stop = () => {
391
421
  stopping.requested = true;
@@ -398,8 +428,8 @@ async function main() {
398
428
  try {
399
429
  while (!stopping.requested) {
400
430
  const startedAt = Date.now();
401
- if (autoAck) await dispatchPendingAutoAcks(state, maxInFlight);
402
- const result = await runWatchOnce(state, autoAck, maxInFlight, stopping);
431
+ if (autoAck) await dispatchPendingAutoAcks(state, maxInFlight, authorLabel);
432
+ const result = await runWatchOnce(state, autoAck, maxInFlight, authorLabel, stopping);
403
433
  if (stopping.requested) return;
404
434
  if (Date.now() - startedAt >= 30_000) restarts = 0;
405
435
  restarts += 1;
@@ -11,7 +11,7 @@ function fail(message) {
11
11
 
12
12
  function parseOptions(values) {
13
13
  const result = {};
14
- const flags = new Set(["follow"]);
14
+ const flags = new Set(["follow", "no-author-label"]);
15
15
  for (let index = 0; index < values.length; index += 1) {
16
16
  const key = values[index];
17
17
  if (!key?.startsWith("--")) fail(`Unexpected argument: ${key ?? ""}`);
@@ -152,6 +152,32 @@ function setMeta(database, key, value) {
152
152
  .run(key, value);
153
153
  }
154
154
 
155
+ function taskAuthorLabel(database) {
156
+ const stored = getMeta(database, "author_label");
157
+ return stored === null || stored === "" ? null : stored;
158
+ }
159
+
160
+ function bindTaskAuthorLabel(database, authorLabel) {
161
+ if (
162
+ authorLabel !== null &&
163
+ (typeof authorLabel !== "string" || authorLabel.length === 0 || authorLabel.length > 100)
164
+ ) {
165
+ fail("authorLabel must contain 1 through 100 characters or be null");
166
+ }
167
+ const encoded = authorLabel ?? "";
168
+ const stored = getMeta(database, "author_label");
169
+ if (stored === null) {
170
+ setMeta(database, "author_label", encoded);
171
+ return authorLabel;
172
+ }
173
+ if (stored !== encoded) {
174
+ fail(
175
+ `Existing task author label ${stored || "(unlabeled)"} does not match ${encoded || "(unlabeled)"}`,
176
+ );
177
+ }
178
+ return taskAuthorLabel(database);
179
+ }
180
+
155
181
  function tableExists(database, tableName) {
156
182
  return Boolean(
157
183
  database
@@ -523,9 +549,13 @@ function createBatch(database, pullRequestUrl, now) {
523
549
  return batchId;
524
550
  }
525
551
 
526
- function claim(database, pullRequestUrl, writeKey) {
552
+ function claim(database, pullRequestUrl, writeKey, requestedAuthorLabel) {
527
553
  const canonicalWriteKey = writeKey === undefined ? undefined : normalizeWriteKey(writeKey);
528
554
  return transaction(database, () => {
555
+ const authorLabel =
556
+ requestedAuthorLabel === undefined
557
+ ? taskAuthorLabel(database)
558
+ : bindTaskAuthorLabel(database, requestedAuthorLabel);
529
559
  const now = new Date().toISOString();
530
560
  const ownMode = getMeta(database, "own_mode");
531
561
  if (canonicalWriteKey !== undefined && ownMode !== "fix-and-push") {
@@ -591,6 +621,7 @@ function claim(database, pullRequestUrl, writeKey) {
591
621
  pullRequest: pullRequestUrl,
592
622
  attempts: Number(batch.attempts) + 1,
593
623
  writeKey: canonicalWriteKey ?? null,
624
+ authorLabel,
594
625
  events,
595
626
  operations,
596
627
  };
@@ -802,6 +833,8 @@ function status(database) {
802
833
  taskId: getMeta(database, "task_id"),
803
834
  databaseId: getMeta(database, "database_id"),
804
835
  cursor: getMeta(database, "cursor"),
836
+ authorLabel: taskAuthorLabel(database),
837
+ authorLabelBound: getMeta(database, "author_label") !== null,
805
838
  expectedGitHubLogin: getMeta(database, "expected_login") || null,
806
839
  ownPullRequests: getMeta(database, "own_mode"),
807
840
  otherPullRequests: "investigate-and-reply",
@@ -852,9 +885,23 @@ async function main() {
852
885
  return;
853
886
  }
854
887
  if (command === "claim") {
888
+ if (options["author-label"] !== undefined && options["no-author-label"] === true) {
889
+ fail("Pass either --author-label or --no-author-label, not both");
890
+ }
891
+ const requestedAuthorLabel =
892
+ options["author-label"] !== undefined
893
+ ? options["author-label"]
894
+ : options["no-author-label"] === true
895
+ ? null
896
+ : undefined;
855
897
  write({
856
898
  ok: true,
857
- ...claim(database, required(options, "pull-request"), options["write-key"]),
899
+ ...claim(
900
+ database,
901
+ required(options, "pull-request"),
902
+ options["write-key"],
903
+ requestedAuthorLabel,
904
+ ),
858
905
  });
859
906
  return;
860
907
  }
@@ -1,7 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{J as t,U as n,q as r}from"./index-D8GJBw23.js";var i=e(t(),1),a=n(),o=r(),s=new Set([`blockquote`,`details`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`li`,`ol`,`p`,`pre`,`table`,`ul`]);function c(e,t){e.properties??={};let n=e.properties.className,r=Array.isArray(n)?n.map(String):typeof n==`string`?n.split(/\s+/u).filter(Boolean):[];r.includes(t)||r.push(t),e.properties.className=r}function l(e){return{dataRvwSourceStartLine:e.start.line,dataRvwSourceEndLine:e.end.line}}function u(e,t){let n=e.value??``,r=e.position??t;if(!r)return[e];let i=n.split(`
2
- `);if(i.length===1)return[{type:`element`,tagName:`span`,properties:{...l(r),dataRvwSourceLeaf:`true`},children:[{type:`text`,value:n}],position:r}];let a=[];for(let[e,t]of i.entries()){if(e===i.length-1&&t===``&&n.endsWith(`
3
- `))continue;let o=Math.min(r.start.line+e,r.end.line);t&&a.push({type:`element`,tagName:`span`,properties:{dataRvwSourceStartLine:o,dataRvwSourceEndLine:o,dataRvwSourceLeaf:`true`},children:[{type:`text`,value:t}],position:{start:{line:o},end:{line:o}}}),e<i.length-1&&a.push({type:`text`,value:`
4
- `})}return a}function d(e,t,n){if(!e||t===void 0)return;let r=Math.max(1,n.split(`
5
- `).length);return{start:{line:t},end:{line:Math.min(t+r-1,e.end.line)}}}function f(e,t){let n=e.position;if(!n)return;let r=t.split(`
6
- `),i=Math.max(1,t.endsWith(`
7
- `)?r.length-1:r.length),a=n.end.line-n.start.line+1>=i+2,o=n.start.line+ +!!a;return{start:{line:o},end:{line:o+i-1}}}function p(e){if(e.type===`element`&&e.position&&(e.properties={...e.properties,...l(e.position)}),!e.children)return;let t=e.type===`element`&&e.tagName===`code`,n=[],r=e.position?.start.line;for(let i of e.children){if(i.type===`text`){let a=t?f(e,i.value??``):d(e.position,r,i.value??``);if(i.position||a){let e=i.position??a;n.push(...u(i,e)),r=e?.end.line??r;continue}}p(i),r=i.position?.end.line??r,n.push(i)}e.children=n}function m(e,t){return!!(e&&e.start.line<=t.endLine&&e.end.line>=t.startLine)}function h(e,t,n,r){e.type===`element`&&e.properties?.dataRvwSourceLeaf===`true`&&(n&&t.some(t=>t.id===n&&t.range&&m(e.position,t.range))&&c(e,`rvw-markdown-commented`),r&&m(e.position,r)&&c(e,`rvw-markdown-selected`)),e.children?.forEach(e=>h(e,t,n,r))}function g(e,t){let n=null,r=null,i=[{node:e,depth:0}];for(;i.length>0;){let e=i.pop();if(!e)continue;let{node:a,depth:o}=e;if(a.type===`element`&&a.tagName&&s.has(a.tagName)&&a.position&&a.position.start.line<=t&&a.position.end.line>=t){let e=a.position.end.line-a.position.start.line;(!n||o>n.depth||o===n.depth&&e<n.span)&&(n={node:a,depth:o,span:e}),(a.tagName===`ul`||a.tagName===`ol`)&&(!r||o>r.depth)&&(r={node:a,depth:o})}a.children?.forEach(e=>i.push({node:e,depth:o+1}))}return r?.node??n?.node??null}function _(e,t){let n=new Map,r=[];for(let i of t){if(!i.range){r.push(i.id);continue}let t=g(e,i.range.endLine);if(!t){r.push(i.id);continue}let a=n.get(t)??[];a.push(i.id),n.set(t,a)}let i=e=>{if(!e.children)return;let t=[];for(let r of e.children){i(r),t.push(r);let e=n.get(r);e&&t.push({type:`element`,tagName:`div`,properties:{dataRvwCommentAnchor:e.join(`,`)},children:[]})}e.children=t};i(e),r.length>0&&(e.children??=[],e.children.unshift({type:`element`,tagName:`div`,properties:{dataRvwCommentAnchor:r.join(`,`)},children:[]}))}function v(e,t){if(!t)return;let n=t.endLine,r=e=>{if(!e.children)return!1;for(let t=0;t<e.children.length;t+=1){let i=e.children[t];if(!(i.position&&i.position.start.line<=n&&i.position.end.line>=n)){if(r(i))return!0;continue}if(i.tagName!==`ul`&&i.tagName!==`ol`&&i.tagName!==`table`&&r(i))return!0;if(i.type===`element`&&i.tagName&&s.has(i.tagName))return e.children.splice(t+1,0,{type:`element`,tagName:`div`,properties:{className:[`markdown-selection-composer-slot`],dataRvwComposerAnchor:`true`},children:[]}),!0}return!1};r(e)||(e.children??=[],e.children.push({type:`element`,tagName:`div`,properties:{className:[`markdown-selection-composer-slot`],dataRvwComposerAnchor:`true`},children:[]}))}function y(e={}){return t=>{let n=e.annotations??[];p(t),h(t,n,e.activeCommentId??null,e.composerOpen?e.selectedRange??null:null),_(t,n),v(t,e.composerOpen?e.selectedRange??null:null)}}function b(e,t,n,r){let i=t;if(t instanceof Element&&t.childNodes.length>0){let e=r===`start`?Math.min(n,t.childNodes.length-1):Math.max(0,n-1);i=t.childNodes[e]??t}let a=i instanceof Element?i:i?.parentElement;if(!a)return null;let o=a.closest(`[data-rvw-source-leaf='true']`);if(o&&e.contains(o))return o;let s=a.querySelectorAll(`[data-rvw-source-leaf='true']`);if(s.length>0)return r===`start`?s[0]??null:s[s.length-1]??null;let c=a.closest(`[data-rvw-source-start-line]`);if(c&&e.contains(c))return c;let l=a.querySelectorAll(`[data-rvw-source-start-line]`);return r===`start`?l[0]??null:l[l.length-1]??null}function x(e,t){let n=(t instanceof Element?t:t.parentElement)?.closest(`.comment-thread`);return!!(n&&e.contains(n))}function S(e,t){if(!t||t.rangeCount===0||t.isCollapsed||!t.toString().trim())return null;let n=t.getRangeAt(0);if(!e.contains(n.startContainer)||!e.contains(n.endContainer)||x(e,n.startContainer)||x(e,n.endContainer))return null;let r=b(e,n.startContainer,n.startOffset,`start`),i=b(e,n.endContainer,n.endOffset,`end`),a=Number(r?.dataset.rvwSourceStartLine),o=Number(i?.dataset.rvwSourceEndLine);return!Number.isInteger(a)||!Number.isInteger(o)||a<1||o<1?null:{startLine:Math.min(a,o),endLine:Math.max(a,o)}}function C(e,t,n,r){let i=document.caretPositionFromPoint?.(n,r),a=document.caretRangeFromPoint?.(n,r),o=[i?.offsetNode??a?.startContainer??null,t],s=null;for(let t of o){let n=t instanceof Element?t:t instanceof Node?t.parentElement:null;if(!(!n||!e.contains(n))&&(s=n.closest(`[data-rvw-source-leaf='true']`)??n.closest(`[data-rvw-source-start-line]`),s&&e.contains(s)))break}if(!s)return null;let c=Number(s.dataset.rvwSourceStartLine),l=Number(s.dataset.rvwSourceEndLine);return!Number.isInteger(c)||!Number.isInteger(l)||c<1||l<1?null:{startLine:Math.min(c,l),endLine:Math.max(c,l)}}function w(e,t,n){return t&&n?{startLine:Math.min(t.startLine,n.startLine),endLine:Math.max(t.endLine,n.endLine)}:e}function T(e){let t=e?.properties?.dataRvwCommentAnchor;return typeof t==`string`?t.split(`,`).filter(Boolean):[]}function E(e){let t=e?.position;return!t||t.start.line<1||t.end.line<t.start.line?null:{startLine:t.start.line,endLine:t.end.line}}function D(e){let t=E(e);return t?{"data-rvw-source-start-line":t.startLine,"data-rvw-source-end-line":t.endLine}:{}}function O(e){return e.startLine===e.endLine?`L${e.startLine}`:`L${e.startLine}–${e.endLine}`}function k({children:e,className:t,selectedRange:n,composerOpen:r,onSelection:s,onOpenComposer:c,composer:l}){let u=(0,i.useRef)(null),d=(0,i.useRef)(null),f=(0,i.useRef)(null),p=(0,i.useRef)(!1),m=(0,i.useRef)(null),h=(0,i.useRef)(s);h.current=s;let[g,_]=(0,i.useState)(null),[v,y]=(0,i.useState)(null),[b,x]=(0,i.useState)(null),[T,E]=(0,i.useState)(null);(0,i.useEffect)(()=>{if(r)return;let e=()=>{if(p.current)return;let e=u.current;e&&S(e,window.getSelection())||(_(null),y(null),x(null))};return document.addEventListener(`selectionchange`,e),()=>document.removeEventListener(`selectionchange`,e)},[r]),(0,i.useEffect)(()=>{if(r||n)return;let e=u.current;e&&S(e,window.getSelection())||(_(null),y(null),x(null))},[r,n]),(0,i.useEffect)(()=>()=>{m.current!==null&&window.clearTimeout(m.current)},[]),(0,i.useLayoutEffect)(()=>{let e=u.current,t=d.current;if(!v||!e||!t)return;let n=()=>{let n=Math.max(0,e.clientWidth-24),r=Math.min(t.offsetWidth,n),i=12+r/2,a=e.clientWidth-12-r/2,o=Math.max(i,Math.min(v.left,a));x(e=>e!==null&&Math.abs(e-o)<.5?e:o)};n();let i=null;r&&(i=window.requestAnimationFrame(()=>{t.scrollIntoView({block:`nearest`,inline:`nearest`})}));let a=new ResizeObserver(n);return a.observe(e),a.observe(t),()=>{a.disconnect(),i!==null&&window.cancelAnimationFrame(i)}},[v,r]),(0,i.useLayoutEffect)(()=>{if(!r){E(null);return}let e=u.current?.querySelector(`[data-rvw-composer-anchor='true']`);if(!e)return;E(e);let t=window.requestAnimationFrame(()=>{e.scrollIntoView({block:`nearest`,inline:`nearest`})});return()=>{window.cancelAnimationFrame(t)}},[r,n?.endLine,n?.startLine]);let D=(e=null,t=null)=>{let n=u.current;if(!n)return;let r=window.getSelection(),i=S(n,r);if(!i||!r){_(null),y(null),x(null);return}let a=w(i,e,t),o=r.getRangeAt(0).getBoundingClientRect(),s=n.getBoundingClientRect();x(null),y({left:o.left+o.width/2-s.left,top:Math.max(8,o.bottom-s.top+8)}),_(a)},k=r?n:g;return(0,o.jsxs)(`div`,{className:[`markdown-comment-surface`,t].filter(Boolean).join(` `),ref:u,onPointerDown:e=>{if(m.current!==null&&(window.clearTimeout(m.current),m.current=null),e.button!==0){p.current=!1,f.current=null;return}p.current=!0,f.current=C(e.currentTarget,e.target,e.clientX,e.clientY)},onPointerUp:e=>{if(e.target.closest(`.markdown-selection-popover, button, input, textarea, select`)){p.current=!1,f.current=null;return}let t=f.current,n=C(e.currentTarget,e.target,e.clientX,e.clientY);f.current=null,p.current=!1;let r=u.current;if(r&&S(r,window.getSelection())){D(t,n);return}m.current=window.setTimeout(()=>{m.current=null,D()},250)},onPointerCancel:()=>{p.current=!1,f.current=null},onKeyUp:e=>{e.target.closest(`.markdown-selection-popover, button, input, textarea, select`)||window.requestAnimationFrame(()=>D())},children:[e,k&&v&&!T&&(0,o.jsx)(`div`,{ref:d,className:`markdown-selection-popover${r?` is-composing`:``}`,style:{left:b??v.left,top:v.top},onPointerDown:e=>e.stopPropagation(),children:r?l:(0,o.jsxs)(`button`,{className:`markdown-selection-comment-action`,onPointerDown:e=>e.preventDefault(),onClick:()=>{h.current(k),c()},children:[O(k),`へコメント`]})}),T&&(0,a.createPortal)(l,T)]})}var A=({children:e,node:t,...n})=>(0,o.jsx)(`div`,{className:`markdown-table-scroll`,children:(0,o.jsx)(`table`,{...D(t),...n,children:e})});export{D as a,E as i,k as n,y as o,T as r,A as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{B as t,G as n,H as r,J as i,K as a,L as o,R as s,T as c,W as l,_ as u,b as d,c as f,l as p,n as m,o as h,q as g,r as _,s as v,t as y,w as b,x,z as S}from"./index-D8GJBw23.js";import{a as C,i as w,n as T,o as E,r as D,t as O}from"./MarkdownTable-CdbKPft2.js";var k=e(i(),1),A=g(),j=2400;function M(e){return k.Children.toArray(e).map(e=>typeof e==`string`||typeof e==`number`?String(e):(0,k.isValidElement)(e)?M(e.props.children):``).join(``)}function N(e,t){return!!(e&&t&&e.startLine===t.startLine&&e.endLine===t.endLine)}function P(){return(0,A.jsx)(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,width:`16`,height:`16`,children:(0,A.jsx)(`path`,{fill:`currentColor`,d:`M5.5 1.75A1.75 1.75 0 0 1 7.25 0h1.5a1.75 1.75 0 0 1 1.75 1.75V2h3a.75.75 0 0 1 0 1.5h-.64l-.68 10.03A2.5 2.5 0 0 1 9.69 16H6.31a2.5 2.5 0 0 1-2.49-2.47L3.14 3.5H2.5a.75.75 0 0 1 0-1.5h3v-.25Zm1.5 0V2h2v-.25a.25.25 0 0 0-.25-.25h-1.5a.25.25 0 0 0-.25.25ZM4.65 3.5l.67 9.96c.02.58.46 1.04.99 1.04h3.38c.53 0 .97-.46.99-1.04l.67-9.96h-6.7Z`})})}function F({source:e,sourceRange:t,commented:n,bindings:r,references:i,themePreference:a,onOpenReference:s,onCommentRange:c,commentComposer:l}){let u=(0,k.useRef)(null),d=!!l;(0,k.useLayoutEffect)(()=>{if(!d)return;let e=window.requestAnimationFrame(()=>{u.current?.scrollIntoView({block:`nearest`,inline:`nearest`})});return()=>window.cancelAnimationFrame(e)},[d]);let f=(0,k.useCallback)(e=>{if(!(e instanceof Element))return;let t=e.closest(`[data-walkthrough-reference-id]`)?.dataset.walkthroughReferenceId;return t?i.get(t):void 0},[i]),p=(0,k.useCallback)(e=>{for(let t of e.querySelectorAll(`g.node, g.classGroup, g[data-id], g[id^='classId-']`)){let e=t.dataset.id??Object.keys(r).find(e=>t.id===e||t.id.includes(`-${e}`)||t.id.includes(`-${e}-`)||t.id.endsWith(`-${e}`));if(!e)continue;let n=r[e],a=n?i.get(n):void 0;a&&(t.classList.add(`walkthrough-diagram-node--linked`),t.setAttribute(`role`,`button`),t.setAttribute(`tabindex`,`0`),t.setAttribute(`aria-label`,`${a.label}をコードで開く`),t.dataset.walkthroughReferenceId=a.id)}},[r,i]);return(0,A.jsxs)(`div`,{className:`walkthrough-diagram-shell${n?` has-comment`:``}`,...t?{"data-rvw-navigation-start-line":t.startLine,"data-rvw-navigation-end-line":t.endLine}:{},children:[(0,A.jsxs)(`div`,{className:`walkthrough-diagram-toolbar`,children:[(0,A.jsx)(`span`,{children:`Mermaid diagram`}),(0,A.jsx)(`span`,{children:`nodeを選択して開く · Cmd/Ctrlで反対のペイン`}),t&&(0,A.jsxs)(`button`,{className:`button--quiet walkthrough-diagram-comment`,onPointerDown:e=>{e.button===0&&(e.preventDefault(),c(t))},onClick:e=>{e.detail===0&&c(t)},children:[(0,A.jsx)(o,{}),`図全体へコメント`]})]}),(0,A.jsx)(_,{className:`walkthrough-diagram`,source:e,themePreference:a,renderIdPrefix:`rvwWalkthrough`,errorClassName:`walkthrough-diagram-error`,onRendered:p,onPointerDown:e=>{let t=f(e.target);t&&(e.preventDefault(),e.stopPropagation(),s(t,e.metaKey||e.ctrlKey))},onKeyDown:e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=f(e.target);t&&(e.preventDefault(),s(t,!1))}}),l&&(0,A.jsx)(`div`,{className:`walkthrough-diagram-comment-composer`,ref:u,children:l})]})}var I=(0,k.createContext)(null);function L({range:e,pending:t,error:n,onCancel:r,onSubmit:i}){let[a,o]=(0,k.useState)(``),c=e.startLine===e.endLine?`L${e.startLine}へコメント`:`L${e.startLine}–${e.endLine}へコメント`;return(0,A.jsx)(s,{body:a,label:c,pending:t,error:n,validationError:void 0,placement:`line`,onBodyChange:o,onCancel:r,onSubmit:()=>i(a)})}var R=({children:e,node:t,...n})=>{let r=(0,k.useContext)(I),i=k.Children.count(e)===1?k.Children.only(e):null;if(!r||!(0,k.isValidElement)(i)||i.props.className!==`language-mermaid`)return(0,A.jsx)(`pre`,{...n,children:e});let a=w(t);return(0,A.jsx)(F,{source:M(i.props.children).trim(),sourceRange:a,commented:!!(a&&r.activeCommentId&&r.placedComments.some(({comment:e,placement:t})=>e.id===r.activeCommentId&&t.range&&t.range.startLine<=a.endLine&&t.range.endLine>=a.startLine)),bindings:r.diagramBindings,references:r.references,themePreference:r.themePreference,onOpenReference:r.onOpenReference,onCommentRange:r.onCommentRange,commentComposer:a&&N(a,r.diagramCommentRange)?(0,A.jsx)(L,{range:a,pending:r.diagramCommentPending,error:r.diagramCommentError,onCancel:r.onCancelDiagramComment,onSubmit:e=>r.onSubmitDiagramComment(a,e)},`${a.startLine}:${a.endLine}`):null})},z=(0,k.memo)(function({body:e,diagramBindings:t,references:n,placedComments:r,activeCommentId:i,selectedRange:a,selectionComposerOpen:o,diagramCommentRange:s,markdownSourceOid:l,themePreference:g,onOpenReference:_,onOpenCommentCodeReference:y,onOpenRepositoryLink:S,onCommentActiveChange:w,onCommentRange:T,diagramCommentPending:j,diagramCommentError:M,onCancelDiagramComment:N,onSubmitDiagramComment:P}){let F=(0,k.useMemo)(()=>r.map(({comment:e,placement:t})=>({id:e.id,range:t.range})),[r]),L=(0,k.useMemo)(()=>new Map(r.map(({comment:e,placement:t})=>[e.id,{comment:e,placement:t}])),[r]),z=(0,k.useCallback)(({node:e,children:t,...n})=>{let r=D(e);return r.length===0?(0,A.jsx)(`div`,{...n,children:t}):(0,A.jsx)(`div`,{className:`markdown-inline-comments`,children:r.map(e=>{let t=L.get(e);return t?(0,A.jsx)(m,{comment:t.comment,variant:`inline`,placement:t.placement,markdownSourceOid:l,themePreference:g,onActiveChange:w,onOpenCodeReference:y,onOpenRepositoryLink:S},e):null})})},[L,l,w,y,S,g]);return(0,A.jsx)(I.Provider,{value:{diagramBindings:t,references:n,placedComments:r,activeCommentId:i,diagramCommentRange:s,themePreference:g,onOpenReference:_,onCommentRange:T,diagramCommentPending:j,diagramCommentError:M,onCancelDiagramComment:N,onSubmitDiagramComment:P},children:(0,A.jsx)(`article`,{className:`walkthrough-markdown`,children:(0,A.jsx)(b,{rehypePlugins:[x,[d,p],[E,{annotations:F,activeCommentId:i,selectedRange:a,composerOpen:o}]],remarkPlugins:[u],urlTransform:e=>e.startsWith(`rvw-ref:`)?e:c(e),components:{div:z,table:O,a:({href:e,children:t,node:r,...i})=>{let a=f(e),o=a?n.get(a):void 0;return o?(0,A.jsx)(v,{reference:o,className:`walkthrough-inline-reference`,onOpen:_,children:t}):(0,A.jsx)(`a`,{...C(r),...i,href:e,children:t})},img:({alt:e,title:t,node:n})=>(0,A.jsx)(h,{alt:e,title:t,sourceAttributes:C(n)}),pre:R},children:e})})})});function B({walkthrough:e,comments:i,activeCommentId:c,navigationTarget:u,onNavigationApplied:d,themePreference:f,onCommentActiveChange:p,onOpenReference:h,onOpenCommentCodeReference:g,onOpenRepositoryLink:_,onDeleted:v}){let b=a(),x=(0,k.useRef)(null),C=(0,k.useRef)(null),w=(0,k.useRef)(d);w.current=d;let[E,D]=(0,k.useState)(!1),[O,M]=(0,k.useState)(null),[N,F]=(0,k.useState)(null),[I,L]=(0,k.useState)(null),[R,B]=(0,k.useState)(``),[V,H]=(0,k.useState)(null),U=(0,k.useRef)(0),W=(0,k.useRef)(null),G=(0,k.useMemo)(()=>new Map(e.references.map(e=>[e.id,e])),[e.references]);(0,k.useLayoutEffect)(()=>{if(!u||C.current===u.requestId)return;let e=u.requestId,t=window.requestAnimationFrame(()=>{let t=x.current;if(!t)return;if(u.line===null){t.scrollIntoView({behavior:`auto`,block:`start`,inline:`nearest`}),C.current=e,w.current(e);return}let n=String(u.line),r=t.querySelector(`[data-rvw-navigation-start-line="${n}"]`)??t.querySelector(`[data-rvw-source-start-line="${n}"]`),i=r?.closest(`details:not([open])`);i&&(i.open=!0),r&&(r.scrollIntoView({behavior:`auto`,block:`center`,inline:`nearest`}),C.current=e,w.current(e))});return()=>window.cancelAnimationFrame(t)},[u]);let ee=(0,k.useCallback)((t,n)=>{U.current+=1;let r=U.current;W.current!==null&&(window.clearTimeout(W.current),W.current=null),H(null),h(e,t,n).then(e=>{r!==U.current||!e||(H(e),W.current=window.setTimeout(()=>{H(null),W.current=null},j))})},[h,e]);(0,k.useEffect)(()=>()=>{U.current+=1,W.current!==null&&window.clearTimeout(W.current)},[]);let K=i.filter(t=>t.target.kind===`walkthrough`&&t.target.walkthroughId===e.id),te=K.reduce((e,t)=>e+t.posts.length,0),q=n({queryKey:[`walkthrough-comment-placements`,e.id,e.body,K.map(e=>`${e.id}:${e.updatedAt}`)],queryFn:async()=>{let n=new URLSearchParams({kind:`walkthrough`,pullRequestId:e.pullRequestId,walkthroughId:e.id});return await Promise.all(K.map(async e=>({comment:e,placement:(await t(`/api/comments/${e.id}/placement?${n.toString()}`)).placement})))},enabled:K.length>0}),J=(0,k.useMemo)(()=>q.data??[],[q.data]),ne=(0,k.useMemo)(()=>J.filter(({placement:e})=>!e.outdated&&e.range!==null),[J]),Y=(0,k.useMemo)(()=>J.filter(({comment:e,placement:t})=>e.target.kind===`walkthrough`&&e.target.startLine===null||t.outdated),[J]),X=l({mutationFn:async({range:n,body:i})=>await t(`/api/comments`,r({pullRequestId:e.pullRequestId,target:{kind:`walkthrough`,walkthroughId:e.id,startLine:n?.startLine??null,endLine:n?.endLine??null},body:i,authorLabel:`You`})),onSuccess:async()=>{window.getSelection()?.removeAllRanges(),B(``),D(!1),M(null),F(null),L(null),await b.invalidateQueries({queryKey:[`comments`]}),await b.invalidateQueries({queryKey:[`change-sequence`]})}}),Z=l({mutationFn:async()=>await t(`/api/pull-requests/${e.pullRequestId}/walkthroughs/${e.id}`,{...r({}),method:`DELETE`}),onSuccess:async()=>{v(e),await Promise.all([b.invalidateQueries({queryKey:[`walkthroughs`]}),b.invalidateQueries({queryKey:[`walkthrough`]}),b.invalidateQueries({queryKey:[`comments`]}),b.invalidateQueries({queryKey:[`change-sequence`]})])}}),Q=K.filter(e=>e.resolvedAt===null).length,re=()=>{let e=K.length===0?`紐づくコメントはありません。`:`紐づくコメント ${K.length}件と投稿 ${te}件も削除されます。`;window.confirm(`このウォークスルーを削除します。\n${e}\nコピー済みの参照は無効になります。\n\nこの操作は元に戻せません。`)&&Z.mutate()},ie=O?O.startLine===O.endLine?`L${O.startLine}`:`L${O.startLine}–${O.endLine}`:null,$=()=>{window.getSelection()?.removeAllRanges(),X.reset(),B(``),M(null),F(null),L(null)},ae=e=>{X.reset(),B(``),D(!1),M(null),F(e),L(`diagram`)},oe=O?(0,A.jsx)(s,{body:R,label:`${ie??`選択範囲`}へコメント`,pending:X.isPending,error:X.error,validationError:void 0,placement:`line`,onBodyChange:B,onCancel:$,onSubmit:()=>X.mutate({range:O,body:R})}):null,se=(0,A.jsx)(z,{body:e.body,diagramBindings:e.diagramBindings,references:G,placedComments:ne,activeCommentId:c,selectedRange:I===`selection`?O:null,selectionComposerOpen:I===`selection`,diagramCommentRange:N,markdownSourceOid:e.sourceOid,themePreference:f,onOpenReference:ee,onOpenCommentCodeReference:g,onOpenRepositoryLink:_,onCommentActiveChange:p,onCommentRange:ae,diagramCommentPending:X.isPending,diagramCommentError:X.error,onCancelDiagramComment:$,onSubmitDiagramComment:(e,t)=>X.mutate({range:e,body:t})});return(0,A.jsxs)(`div`,{className:`walkthrough-viewer`,ref:x,children:[(0,A.jsxs)(`header`,{className:`walkthrough-viewer-header`,children:[(0,A.jsxs)(`div`,{className:`walkthrough-viewer-title`,children:[(0,A.jsx)(`span`,{className:`walkthrough-viewer-icon`,children:(0,A.jsx)(y,{})}),(0,A.jsxs)(`div`,{className:`walkthrough-viewer-heading-copy`,children:[(0,A.jsx)(`span`,{className:`walkthrough-kicker`,children:`Agent-provided walkthrough`}),(0,A.jsx)(`h2`,{title:e.title,children:e.title})]})]}),(0,A.jsxs)(`div`,{className:`walkthrough-viewer-actions`,children:[(0,A.jsxs)(`button`,{className:`comment-icon-button walkthrough-comment-button`,"aria-label":`ウォークスルー全体へコメント`,title:`ウォークスルー全体へコメント`,"aria-pressed":E,onClick:()=>{X.reset(),B(``),M(null),F(null),L(null),D(e=>!e)},children:[(0,A.jsx)(o,{}),Q>0&&(0,A.jsx)(`span`,{children:Q})]}),(0,A.jsx)(`button`,{className:`comment-icon-button walkthrough-delete-button`,"aria-label":`ウォークスルーを削除`,title:`ウォークスルーを削除`,disabled:Z.isPending,onClick:re,children:(0,A.jsx)(P,{})})]}),V&&(0,A.jsx)(`div`,{className:`code-reference-notice walkthrough-reference-notice`,role:`status`,"aria-live":`polite`,children:V})]}),(0,A.jsx)(S,{error:Z.error}),(0,A.jsx)(S,{error:q.error}),(E||Y.length>0)&&(0,A.jsxs)(`div`,{className:`walkthrough-comment-area`,children:[E&&(0,A.jsx)(s,{body:R,label:`ウォークスルー全体へコメント`,pending:X.isPending,error:X.error,validationError:void 0,placement:`file`,onBodyChange:B,onCancel:()=>{X.reset(),B(``),D(!1)},onSubmit:()=>X.mutate({range:null,body:R})}),Y.map(({comment:t,placement:n})=>(0,A.jsx)(m,{comment:t,variant:`inline`,placement:n,markdownSourceOid:e.sourceOid,themePreference:f,onActiveChange:p,onOpenCodeReference:g,onOpenRepositoryLink:_},t.id))]}),(0,A.jsx)(T,{className:`walkthrough-markdown-surface`,selectedRange:O,composerOpen:I===`selection`,onSelection:e=>{if(!e){M(null),L(e=>e===`selection`?null:e);return}X.reset(),B(``),D(!1),M(e),F(null),L(null)},onOpenComposer:()=>L(`selection`),composer:oe,children:se})]})}export{B as WalkthroughViewer};
@@ -1 +0,0 @@
1
- import"./chunk-KEIR6QF5-BICK3FdT.js";import{M as e}from"./mermaid-parser.core-CbecsNA1.js";export{e as createArchitectureServices};
@@ -1 +0,0 @@
1
- import{at as e,ot as t}from"./chunk-I66GZJ75-CGl1hx4J.js";var n=(n,r)=>t.lang.round(e.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-B6xuSHsQ.js";import"./chunk-I66GZJ75-CGl1hx4J.js";import"./chunk-NSK5VX7P-CiYiU8wP.js";import"./chunk-4I5QYGJK-ikT25rPN.js";import"./chunk-WRU74C26-nox7WFnh.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-UBXNYLIW-BuzttTFk.js";import"./chunk-2GRJ4B5K-D2TTocfh.js";import"./chunk-XXDRQBXY-DqAYeljN.js";import"./chunk-KBJHAD2P-D_MPzBJx.js";import"./chunk-W5SLKNZC-UidmFHe2.js";import"./chunk-QR6OTTB3-BK8Tnvcc.js";import"./chunk-7Z6QIM7H-DT3BAZ4L.js";import{i as t,n,r,t as i}from"./chunk-GF5L2VYU-mIdlxzfr.js";import"./mermaid.core-CdRuLyYI.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-B6xuSHsQ.js";import"./chunk-I66GZJ75-CGl1hx4J.js";import"./chunk-NSK5VX7P-CiYiU8wP.js";import"./chunk-4I5QYGJK-ikT25rPN.js";import"./chunk-WRU74C26-nox7WFnh.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-UBXNYLIW-BuzttTFk.js";import"./chunk-2GRJ4B5K-D2TTocfh.js";import"./chunk-XXDRQBXY-DqAYeljN.js";import"./chunk-KBJHAD2P-D_MPzBJx.js";import"./chunk-W5SLKNZC-UidmFHe2.js";import"./chunk-QR6OTTB3-BK8Tnvcc.js";import"./chunk-7Z6QIM7H-DT3BAZ4L.js";import{i as t,n,r,t as i}from"./chunk-GF5L2VYU-mIdlxzfr.js";import"./mermaid.core-CdRuLyYI.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import"./chunk-KEIR6QF5-BICK3FdT.js";import{O as e}from"./mermaid-parser.core-CbecsNA1.js";export{e as createEventModelingServices};
@@ -1 +0,0 @@
1
- import"./src-B6xuSHsQ.js";import"./chunk-I66GZJ75-CGl1hx4J.js";import"./chunk-NSK5VX7P-CiYiU8wP.js";import"./chunk-4I5QYGJK-ikT25rPN.js";import"./chunk-WRU74C26-nox7WFnh.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-UBXNYLIW-BuzttTFk.js";import"./chunk-2GRJ4B5K-D2TTocfh.js";import"./chunk-XXDRQBXY-DqAYeljN.js";import"./chunk-KBJHAD2P-D_MPzBJx.js";import"./chunk-W5SLKNZC-UidmFHe2.js";import"./chunk-QR6OTTB3-BK8Tnvcc.js";import"./chunk-7Z6QIM7H-DT3BAZ4L.js";import{n as e}from"./chunk-JQJVKLGR-BLG6gAfx.js";import"./mermaid.core-CdRuLyYI.js";export{e as diagram};