@paretools/github 0.8.5 → 0.9.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 (82) hide show
  1. package/dist/lib/formatters.d.ts.map +1 -1
  2. package/dist/lib/formatters.js +112 -16
  3. package/dist/lib/formatters.js.map +1 -1
  4. package/dist/lib/parsers.d.ts +33 -11
  5. package/dist/lib/parsers.d.ts.map +1 -1
  6. package/dist/lib/parsers.js +309 -24
  7. package/dist/lib/parsers.js.map +1 -1
  8. package/dist/lib/path-validation.d.ts +13 -0
  9. package/dist/lib/path-validation.d.ts.map +1 -0
  10. package/dist/lib/path-validation.js +54 -0
  11. package/dist/lib/path-validation.js.map +1 -0
  12. package/dist/schemas/index.d.ts +126 -3
  13. package/dist/schemas/index.d.ts.map +1 -1
  14. package/dist/schemas/index.js +116 -3
  15. package/dist/schemas/index.js.map +1 -1
  16. package/dist/tools/api.d.ts.map +1 -1
  17. package/dist/tools/api.js +135 -5
  18. package/dist/tools/api.js.map +1 -1
  19. package/dist/tools/gist-create.d.ts.map +1 -1
  20. package/dist/tools/gist-create.js +70 -16
  21. package/dist/tools/gist-create.js.map +1 -1
  22. package/dist/tools/issue-close.d.ts.map +1 -1
  23. package/dist/tools/issue-close.js +31 -5
  24. package/dist/tools/issue-close.js.map +1 -1
  25. package/dist/tools/issue-comment.d.ts.map +1 -1
  26. package/dist/tools/issue-comment.js +43 -6
  27. package/dist/tools/issue-comment.js.map +1 -1
  28. package/dist/tools/issue-create.d.ts.map +1 -1
  29. package/dist/tools/issue-create.js +69 -5
  30. package/dist/tools/issue-create.js.map +1 -1
  31. package/dist/tools/issue-list.d.ts.map +1 -1
  32. package/dist/tools/issue-list.js +79 -3
  33. package/dist/tools/issue-list.js.map +1 -1
  34. package/dist/tools/issue-update.d.ts.map +1 -1
  35. package/dist/tools/issue-update.js +102 -11
  36. package/dist/tools/issue-update.js.map +1 -1
  37. package/dist/tools/issue-view.d.ts.map +1 -1
  38. package/dist/tools/issue-view.js +26 -6
  39. package/dist/tools/issue-view.js.map +1 -1
  40. package/dist/tools/pr-checks.d.ts.map +1 -1
  41. package/dist/tools/pr-checks.js +27 -7
  42. package/dist/tools/pr-checks.js.map +1 -1
  43. package/dist/tools/pr-comment.d.ts.map +1 -1
  44. package/dist/tools/pr-comment.js +43 -6
  45. package/dist/tools/pr-comment.js.map +1 -1
  46. package/dist/tools/pr-create.d.ts.map +1 -1
  47. package/dist/tools/pr-create.js +125 -3
  48. package/dist/tools/pr-create.js.map +1 -1
  49. package/dist/tools/pr-diff.d.ts.map +1 -1
  50. package/dist/tools/pr-diff.js +36 -4
  51. package/dist/tools/pr-diff.js.map +1 -1
  52. package/dist/tools/pr-list.d.ts.map +1 -1
  53. package/dist/tools/pr-list.js +83 -3
  54. package/dist/tools/pr-list.js.map +1 -1
  55. package/dist/tools/pr-merge.d.ts.map +1 -1
  56. package/dist/tools/pr-merge.js +77 -6
  57. package/dist/tools/pr-merge.js.map +1 -1
  58. package/dist/tools/pr-review.d.ts.map +1 -1
  59. package/dist/tools/pr-review.js +43 -6
  60. package/dist/tools/pr-review.js.map +1 -1
  61. package/dist/tools/pr-update.d.ts.map +1 -1
  62. package/dist/tools/pr-update.js +110 -5
  63. package/dist/tools/pr-update.js.map +1 -1
  64. package/dist/tools/pr-view.d.ts.map +1 -1
  65. package/dist/tools/pr-view.js +27 -6
  66. package/dist/tools/pr-view.js.map +1 -1
  67. package/dist/tools/release-create.d.ts.map +1 -1
  68. package/dist/tools/release-create.js +79 -3
  69. package/dist/tools/release-create.js.map +1 -1
  70. package/dist/tools/release-list.d.ts.map +1 -1
  71. package/dist/tools/release-list.js +23 -5
  72. package/dist/tools/release-list.js.map +1 -1
  73. package/dist/tools/run-list.d.ts.map +1 -1
  74. package/dist/tools/run-list.js +84 -3
  75. package/dist/tools/run-list.js.map +1 -1
  76. package/dist/tools/run-rerun.d.ts.map +1 -1
  77. package/dist/tools/run-rerun.js +20 -4
  78. package/dist/tools/run-rerun.js.map +1 -1
  79. package/dist/tools/run-view.d.ts.map +1 -1
  80. package/dist/tools/run-view.js +44 -4
  81. package/dist/tools/run-view.js.map +1 -1
  82. package/package.json +2 -2
@@ -9,6 +9,15 @@ export function parsePrView(json) {
9
9
  status: c.status || c.state || "unknown",
10
10
  conclusion: c.conclusion ?? null,
11
11
  }));
12
+ // P1-gap #147: Parse reviews array
13
+ const reviews = raw.reviews
14
+ ? raw.reviews.map((r) => ({
15
+ author: r.author?.login ?? "unknown",
16
+ state: r.state,
17
+ body: r.body || undefined,
18
+ submittedAt: r.submittedAt ?? undefined,
19
+ }))
20
+ : undefined;
12
21
  return {
13
22
  number: raw.number,
14
23
  state: raw.state,
@@ -23,6 +32,21 @@ export function parsePrView(json) {
23
32
  additions: raw.additions ?? 0,
24
33
  deletions: raw.deletions ?? 0,
25
34
  changedFiles: raw.changedFiles ?? 0,
35
+ // S-gap fields
36
+ author: raw.author?.login ?? undefined,
37
+ labels: raw.labels ? raw.labels.map((l) => l.name) : undefined,
38
+ isDraft: raw.isDraft ?? undefined,
39
+ assignees: raw.assignees
40
+ ? raw.assignees.map((a) => a.login)
41
+ : undefined,
42
+ createdAt: raw.createdAt ?? undefined,
43
+ updatedAt: raw.updatedAt ?? undefined,
44
+ milestone: raw.milestone?.title ?? undefined,
45
+ projectItems: raw.projectItems
46
+ ? raw.projectItems.map((p) => p.title)
47
+ : undefined,
48
+ // P1-gap #147
49
+ reviews,
26
50
  };
27
51
  }
28
52
  /**
@@ -38,6 +62,12 @@ export function parsePrList(json) {
38
62
  url: pr.url,
39
63
  headBranch: pr.headRefName,
40
64
  author: pr.author?.login ?? "",
65
+ // S-gap fields
66
+ labels: pr.labels ? pr.labels.map((l) => l.name) : undefined,
67
+ isDraft: pr.isDraft ?? undefined,
68
+ baseBranch: pr.baseRefName ?? undefined,
69
+ reviewDecision: pr.reviewDecision ?? undefined,
70
+ mergeable: pr.mergeable ?? undefined,
41
71
  }));
42
72
  return { prs, total: prs.length };
43
73
  }
@@ -63,37 +93,126 @@ export function parsePrUpdate(stdout, number) {
63
93
  /**
64
94
  * Parses `gh pr merge` output into structured data.
65
95
  * The gh CLI prints a confirmation message with the PR URL on success.
96
+ * Enhanced to detect merge commit SHA, auto-merge state, and merge method.
66
97
  */
67
- export function parsePrMerge(stdout, number, method) {
98
+ export function parsePrMerge(stdout, number, method, deleteBranch, auto, disableAuto) {
68
99
  const urlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+\/pull\/\d+)/);
69
100
  const url = urlMatch ? urlMatch[1] : "";
70
- return { number, merged: true, method, url };
101
+ // S-gap: detect if branch was deleted from output
102
+ const branchDeleted = deleteBranch !== undefined
103
+ ? /deleted branch|branch.*deleted/i.test(stdout)
104
+ ? true
105
+ : deleteBranch
106
+ : undefined;
107
+ // Extract merge commit SHA if present in output
108
+ // gh pr merge may output lines like "Merge commit SHA: abc123..." or include it in the URL
109
+ const shaMatch = stdout.match(/\b([0-9a-f]{40})\b/);
110
+ const mergeCommitSha = shaMatch ? shaMatch[1] : undefined;
111
+ // Determine the merge state
112
+ let state;
113
+ if (disableAuto) {
114
+ state = "auto-merge-disabled";
115
+ }
116
+ else if (auto || /auto-merge/i.test(stdout) || /automatically merge/i.test(stdout)) {
117
+ state = "auto-merge-enabled";
118
+ }
119
+ else {
120
+ state = "merged";
121
+ }
122
+ // Detect actual merge method from output text when possible
123
+ let detectedMethod = method;
124
+ if (/squashed and merged/i.test(stdout)) {
125
+ detectedMethod = "squash";
126
+ }
127
+ else if (/rebased and merged/i.test(stdout)) {
128
+ detectedMethod = "rebase";
129
+ }
130
+ else if (/merged.*pull request/i.test(stdout) && !/squashed|rebased/i.test(stdout)) {
131
+ detectedMethod = "merge";
132
+ }
133
+ return {
134
+ number,
135
+ merged: state === "merged",
136
+ method: detectedMethod,
137
+ url,
138
+ branchDeleted,
139
+ mergeCommitSha,
140
+ state,
141
+ };
71
142
  }
72
143
  /**
73
144
  * Parses `gh pr comment` / `gh issue comment` output into structured data.
74
145
  * The gh CLI prints the new comment URL to stdout.
146
+ * S-gap: Enhanced to include operation type, commentId, number, and body echo.
75
147
  */
76
- export function parseComment(stdout) {
148
+ export function parseComment(stdout, opts) {
77
149
  const url = stdout.trim();
78
- return { url };
150
+ // S-gap: extract commentId from URL (e.g., #issuecomment-123456)
151
+ const commentIdMatch = url.match(/#issuecomment-(\d+)/);
152
+ const commentId = commentIdMatch ? commentIdMatch[1] : undefined;
153
+ return {
154
+ url: url || undefined,
155
+ operation: opts?.operation,
156
+ commentId,
157
+ issueNumber: opts?.issueNumber,
158
+ prNumber: opts?.prNumber,
159
+ body: opts?.body,
160
+ };
79
161
  }
80
162
  /**
81
163
  * Parses `gh pr review` output into structured data.
82
164
  * The gh CLI prints a confirmation message with the PR URL on success.
165
+ * S-gap: Enhanced to include reviewId, reviewDecision, and body echo.
83
166
  */
84
- export function parsePrReview(stdout, number, event) {
167
+ export function parsePrReview(stdout, number, event, body, stderr) {
85
168
  const urlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+\/pull\/\d+)/);
86
169
  const url = urlMatch ? urlMatch[1] : "";
87
- return { number, event, url };
170
+ // P1-gap #145: Parse review event type from CLI output for confirmation
171
+ // Map the CLI event name to GitHub's review event type
172
+ const eventMap = {
173
+ approve: "APPROVE",
174
+ "request-changes": "REQUEST_CHANGES",
175
+ comment: "COMMENT",
176
+ };
177
+ const resolvedEvent = eventMap[event] ?? event;
178
+ // P1-gap #146: Classify review errors from stderr
179
+ const errorType = stderr ? classifyReviewError(stderr) : undefined;
180
+ return {
181
+ number,
182
+ event: resolvedEvent,
183
+ url,
184
+ body: body ?? undefined,
185
+ errorType,
186
+ };
187
+ }
188
+ /**
189
+ * Classifies review error from stderr into structured error types.
190
+ * P1-gap #146.
191
+ */
192
+ function classifyReviewError(stderr) {
193
+ const lower = stderr.toLowerCase();
194
+ if (/not found|could not resolve|no pull request/i.test(lower))
195
+ return "not-found";
196
+ if (/permission|forbidden|403/i.test(lower))
197
+ return "permission-denied";
198
+ if (/already reviewed|already approved|already submitted/i.test(lower))
199
+ return "already-reviewed";
200
+ if (/draft|is a draft/i.test(lower))
201
+ return "draft-pr";
202
+ if (stderr.trim())
203
+ return "unknown";
204
+ return undefined;
88
205
  }
89
206
  /**
90
207
  * Parses `gh pr checks --json ...` output into structured PR checks data.
91
208
  * Computes summary counts by bucket (pass, fail, pending, skipping, cancel).
209
+ * Deduplicates entries by check name, keeping the most recent run
210
+ * (determined by completedAt, then startedAt, with later entries winning ties).
92
211
  */
93
212
  export function parsePrChecks(json, pr) {
94
213
  const raw = JSON.parse(json);
95
214
  const items = Array.isArray(raw) ? raw : [];
96
- const checks = items.map((c) => ({
215
+ const allChecks = items.map((c) => ({
97
216
  name: c.name ?? "",
98
217
  state: c.state ?? "",
99
218
  bucket: c.bucket ?? "",
@@ -104,6 +223,25 @@ export function parsePrChecks(json, pr) {
104
223
  startedAt: c.startedAt ?? "",
105
224
  completedAt: c.completedAt ?? "",
106
225
  }));
226
+ // Deduplicate by check name, keeping the most recent run.
227
+ // For checks with the same name, prefer the one with the later completedAt
228
+ // (or startedAt as fallback). If timestamps are equal, keep the later entry
229
+ // in the array (which is typically the most recent re-run).
230
+ const deduped = new Map();
231
+ for (const check of allChecks) {
232
+ const existing = deduped.get(check.name);
233
+ if (!existing) {
234
+ deduped.set(check.name, check);
235
+ continue;
236
+ }
237
+ // Compare by completedAt first, then startedAt
238
+ const existingTime = existing.completedAt || existing.startedAt || "";
239
+ const newTime = check.completedAt || check.startedAt || "";
240
+ if (newTime >= existingTime) {
241
+ deduped.set(check.name, check);
242
+ }
243
+ }
244
+ const checks = Array.from(deduped.values());
107
245
  const summary = {
108
246
  total: checks.length,
109
247
  passed: checks.filter((c) => c.bucket === "pass").length,
@@ -128,6 +266,16 @@ export function parseIssueView(json) {
128
266
  assignees: (raw.assignees ?? []).map((a) => a.login),
129
267
  url: raw.url,
130
268
  createdAt: raw.createdAt ?? "",
269
+ // S-gap fields
270
+ stateReason: raw.stateReason ?? undefined,
271
+ author: raw.author?.login ?? undefined,
272
+ milestone: raw.milestone?.title ?? undefined,
273
+ updatedAt: raw.updatedAt ?? undefined,
274
+ closedAt: raw.closedAt ?? undefined,
275
+ isPinned: raw.isPinned ?? undefined,
276
+ projectItems: raw.projectItems
277
+ ? raw.projectItems.map((p) => p.title)
278
+ : undefined,
131
279
  };
132
280
  }
133
281
  /**
@@ -143,26 +291,57 @@ export function parseIssueList(json) {
143
291
  url: issue.url,
144
292
  labels: (issue.labels ?? []).map((l) => l.name),
145
293
  assignees: (issue.assignees ?? []).map((a) => a.login),
294
+ // S-gap fields
295
+ author: issue.author?.login ?? undefined,
296
+ createdAt: issue.createdAt ?? undefined,
297
+ milestone: issue.milestone?.title ?? undefined,
146
298
  }));
147
299
  return { issues, total: issues.length };
148
300
  }
149
301
  /**
150
302
  * Parses `gh issue create` output (URL on stdout) into structured data.
151
303
  * The gh CLI prints the new issue URL to stdout. We extract the number from it.
304
+ * S-gap: Enhanced to echo back applied labels.
152
305
  */
153
- export function parseIssueCreate(stdout) {
306
+ export function parseIssueCreate(stdout, labels) {
154
307
  const url = stdout.trim();
155
308
  const match = url.match(/\/issues\/(\d+)$/);
156
309
  const number = match ? parseInt(match[1], 10) : 0;
157
- return { number, url };
310
+ return {
311
+ number,
312
+ url,
313
+ labelsApplied: labels && labels.length > 0 ? labels : undefined,
314
+ };
158
315
  }
159
316
  /**
160
317
  * Parses `gh issue close` output into structured data.
161
- * The gh CLI prints a confirmation URL to stdout. We extract the number from it.
318
+ * The gh CLI may print a confirmation message plus URL to stdout.
319
+ * We robustly extract the issue URL using a regex rather than assuming
320
+ * the entire stdout is just a URL (handles extra text, whitespace, and
321
+ * different output formats).
322
+ * S-gap: Enhanced to include reason and commentUrl.
162
323
  */
163
- export function parseIssueClose(stdout, number) {
164
- const url = stdout.trim();
165
- return { number, state: "closed", url };
324
+ export function parseIssueClose(stdout, number, reason, comment, stderr) {
325
+ // Robust URL extraction: find the GitHub issue URL anywhere in the output
326
+ const urlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+\/issues\/\d+)/);
327
+ const url = urlMatch ? urlMatch[1] : stdout.trim();
328
+ // S-gap: Extract comment URL from output if a comment was added
329
+ const commentUrlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+#issuecomment-\d+)/);
330
+ // P1-gap #144: Detect already-closed issues
331
+ const combined = `${stdout}\n${stderr ?? ""}`;
332
+ const alreadyClosed = /already closed/i.test(combined) ||
333
+ /issue .* is already closed/i.test(combined) ||
334
+ /already been closed/i.test(combined)
335
+ ? true
336
+ : undefined;
337
+ return {
338
+ number,
339
+ state: "closed",
340
+ url,
341
+ reason: reason ?? undefined,
342
+ commentUrl: comment && commentUrlMatch ? commentUrlMatch[1] : undefined,
343
+ alreadyClosed,
344
+ };
166
345
  }
167
346
  /**
168
347
  * Parses `gh issue edit` output into structured data.
@@ -176,6 +355,7 @@ export function parseIssueUpdate(stdout, number) {
176
355
  /**
177
356
  * Parses `gh run view --json ...` output into structured run view data.
178
357
  * Renames gh field names (e.g., databaseId → id).
358
+ * S-gap: Enhanced to include job steps, headSha, event, startedAt, attempt.
179
359
  */
180
360
  export function parseRunView(json) {
181
361
  const raw = JSON.parse(json);
@@ -183,6 +363,14 @@ export function parseRunView(json) {
183
363
  name: j.name,
184
364
  status: j.status,
185
365
  conclusion: j.conclusion ?? null,
366
+ // S-gap: Include steps array
367
+ steps: j.steps
368
+ ? j.steps.map((s) => ({
369
+ name: s.name,
370
+ status: s.status,
371
+ conclusion: s.conclusion ?? null,
372
+ }))
373
+ : undefined,
186
374
  }));
187
375
  return {
188
376
  id: raw.databaseId,
@@ -194,6 +382,11 @@ export function parseRunView(json) {
194
382
  jobs,
195
383
  url: raw.url,
196
384
  createdAt: raw.createdAt ?? "",
385
+ // P0 enrichments
386
+ headSha: raw.headSha ?? undefined,
387
+ event: raw.event ?? undefined,
388
+ startedAt: raw.startedAt ?? undefined,
389
+ attempt: raw.attempt ?? undefined,
197
390
  };
198
391
  }
199
392
  /**
@@ -211,6 +404,11 @@ export function parseRunList(json) {
211
404
  headBranch: r.headBranch,
212
405
  url: r.url,
213
406
  createdAt: r.createdAt ?? "",
407
+ // P1-gap #148
408
+ headSha: r.headSha ?? undefined,
409
+ event: r.event ?? undefined,
410
+ startedAt: r.startedAt ?? undefined,
411
+ attempt: r.attempt ?? undefined,
214
412
  }));
215
413
  return { runs, total: runs.length };
216
414
  }
@@ -218,31 +416,51 @@ export function parseRunList(json) {
218
416
  * Parses `gh run rerun` output into structured data.
219
417
  * The gh CLI prints a confirmation message to stderr on success.
220
418
  * We construct the URL from the run ID and repo info.
419
+ * S-gap: Enhanced to include job field.
221
420
  */
222
- export function parseRunRerun(stdout, stderr, runId, failedOnly) {
421
+ export function parseRunRerun(stdout, stderr, runId, failedOnly, job) {
223
422
  // gh run rerun outputs confirmation to stderr, e.g.:
224
423
  // "✓ Requested rerun of run 12345"
225
424
  // Try to extract URL from stdout/stderr if present
226
425
  const combined = `${stdout}\n${stderr}`;
227
426
  const urlMatch = combined.match(/(https:\/\/github\.com\/[^\s]+\/actions\/runs\/\d+)/);
228
427
  const url = urlMatch ? urlMatch[1] : "";
428
+ // P1-gap #149: Parse attempt number from output
429
+ const attemptMatch = combined.match(/attempt[\s#:]*?(\d+)/i);
430
+ const attempt = attemptMatch ? parseInt(attemptMatch[1], 10) : undefined;
431
+ // P1-gap #149: Extract new run URL if a different URL appears (for the new attempt)
432
+ // Sometimes gh outputs the new run URL after a rerun
433
+ const allUrls = combined.match(/https:\/\/github\.com\/[^\s]+\/actions\/runs\/\d+/g) ?? [];
434
+ const newRunUrl = allUrls.length > 1 ? allUrls[allUrls.length - 1] : undefined;
229
435
  return {
230
436
  runId,
231
437
  status: "requested",
232
438
  failedOnly,
233
439
  url,
440
+ job: job ?? undefined,
441
+ attempt,
442
+ newRunUrl,
234
443
  };
235
444
  }
236
445
  /**
237
446
  * Parses `gh release create` output (URL on stdout) into structured data.
238
447
  * The gh CLI prints the new release URL to stdout.
448
+ * S-gap: Enhanced to include title, assetsUploaded count.
239
449
  */
240
- export function parseReleaseCreate(stdout, tag, draft, prerelease) {
450
+ export function parseReleaseCreate(stdout, tag, draft, prerelease, title, assetsCount) {
241
451
  const url = stdout.trim();
242
- return { tag, url, draft, prerelease };
452
+ return {
453
+ tag,
454
+ url,
455
+ draft,
456
+ prerelease,
457
+ title: title ?? undefined,
458
+ assetsUploaded: assetsCount ?? undefined,
459
+ };
243
460
  }
244
461
  /**
245
462
  * Parses `gh release list --json ...` output into structured release list data.
463
+ * S-gap: Enhanced to include isLatest and createdAt.
246
464
  */
247
465
  export function parseReleaseList(json) {
248
466
  const raw = JSON.parse(json);
@@ -254,34 +472,101 @@ export function parseReleaseList(json) {
254
472
  prerelease: r.isPrerelease ?? false,
255
473
  publishedAt: r.publishedAt ?? "",
256
474
  url: r.url ?? "",
475
+ // S-gap fields
476
+ isLatest: r.isLatest ?? undefined,
477
+ createdAt: r.createdAt ?? undefined,
257
478
  }));
258
479
  return { releases, total: releases.length };
259
480
  }
260
481
  /**
261
482
  * Parses `gh api` stdout into structured API result data.
262
- * Attempts to parse stdout as JSON; falls back to raw string body.
483
+ * When `--include` is used, the output starts with HTTP headers followed by
484
+ * a blank line and then the response body. We parse the real HTTP status code
485
+ * from the status line and separate the body.
263
486
  */
264
- export function parseApi(stdout, exitCode, endpoint, method) {
265
- // gh api returns exit code 0 for success. Map to HTTP-like status codes.
487
+ export function parseApi(stdout, exitCode, endpoint, method, stderr) {
488
+ // Default: infer status from exit code
489
+ let statusCode = exitCode === 0 ? 200 : 422;
490
+ let bodyText = stdout;
491
+ // When --include is passed, stdout starts with HTTP headers:
492
+ // HTTP/2.0 200 OK\r\n...headers...\r\n\r\nbody
493
+ const headerEndIndex = stdout.indexOf("\r\n\r\n");
494
+ if (headerEndIndex !== -1) {
495
+ const headerBlock = stdout.slice(0, headerEndIndex);
496
+ bodyText = stdout.slice(headerEndIndex + 4);
497
+ // Parse status code from first line: "HTTP/1.1 200 OK" or "HTTP/2.0 200 OK"
498
+ const statusMatch = headerBlock.match(/^HTTP\/[\d.]+ (\d+)/);
499
+ if (statusMatch) {
500
+ statusCode = parseInt(statusMatch[1], 10);
501
+ }
502
+ }
503
+ else {
504
+ // Also handle \n\n separator (some environments)
505
+ const headerEndLF = stdout.indexOf("\n\n");
506
+ if (headerEndLF !== -1 && /^HTTP\/[\d.]+ \d+/.test(stdout)) {
507
+ const headerBlock = stdout.slice(0, headerEndLF);
508
+ bodyText = stdout.slice(headerEndLF + 2);
509
+ const statusMatch = headerBlock.match(/^HTTP\/[\d.]+ (\d+)/);
510
+ if (statusMatch) {
511
+ statusCode = parseInt(statusMatch[1], 10);
512
+ }
513
+ }
514
+ }
515
+ // Keep legacy `status` as before for backward compat
266
516
  const status = exitCode === 0 ? 200 : 422;
267
517
  let body;
268
518
  try {
269
- body = JSON.parse(stdout);
519
+ body = JSON.parse(bodyText);
270
520
  }
271
521
  catch {
272
- body = stdout;
522
+ body = bodyText;
523
+ }
524
+ // P1-gap #141: Preserve error body for debugging when request failed
525
+ const errorBody = exitCode !== 0 && stderr ? parseErrorBody(stderr) : undefined;
526
+ return { status, statusCode, body, endpoint, method, errorBody };
527
+ }
528
+ /**
529
+ * Attempts to parse error body from stderr output.
530
+ * gh api may output JSON error details or plain text to stderr.
531
+ */
532
+ function parseErrorBody(stderr) {
533
+ const trimmed = stderr.trim();
534
+ if (!trimmed)
535
+ return undefined;
536
+ try {
537
+ return JSON.parse(trimmed);
538
+ }
539
+ catch {
540
+ // Check if stderr contains an embedded JSON object (e.g., after a prefix message)
541
+ const jsonMatch = trimmed.match(/\{[\s\S]*\}/);
542
+ if (jsonMatch) {
543
+ try {
544
+ return JSON.parse(jsonMatch[0]);
545
+ }
546
+ catch {
547
+ // fall through
548
+ }
549
+ }
550
+ return trimmed;
273
551
  }
274
- return { status, body, endpoint, method };
275
552
  }
276
553
  /**
277
554
  * Parses `gh gist create` output (URL on stdout) into structured data.
278
555
  * The gh CLI prints the new gist URL to stdout. We extract the ID from it.
556
+ * S-gap: Enhanced to include files, description, fileCount.
279
557
  */
280
- export function parseGistCreate(stdout, isPublic) {
558
+ export function parseGistCreate(stdout, isPublic, files, description) {
281
559
  const url = stdout.trim();
282
560
  const match = url.match(/\/([a-f0-9]+)$/);
283
561
  const id = match ? match[1] : "";
284
- return { id, url, public: isPublic };
562
+ return {
563
+ id,
564
+ url,
565
+ public: isPublic,
566
+ files: files ?? undefined,
567
+ description: description ?? undefined,
568
+ fileCount: files ? files.length : undefined,
569
+ };
285
570
  }
286
571
  /**
287
572
  * Parses `gh pr diff --numstat` output into structured PR diff data.
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAC9C,CAAC,CAMA,EAAE,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS;QACtC,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS;QACxC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;KACjC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;QACtB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;QACxC,MAAM;QACN,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;QAC7B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;QAC7B,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CACnB,CAAC,EAOA,EAAE,EAAE,CAAC,CAAC;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,GAAG,EAAE,EAAE,CAAC,GAAG;QACX,UAAU,EAAE,EAAE,CAAC,WAAW;QAC1B,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;KAC/B,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAc;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAc,EAAE,MAAc;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,EAAU;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CACtB,CAAC,CAUA,EAAE,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;QACtB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;QAC5B,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;KACjC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QACxD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QACxD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAC5D,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;QAC7D,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;KAC9D,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7B,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;QACtB,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,SAAS,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CACtB,CAAC,KAOA,EAAE,EAAE,CAAC,CAAC;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KACvD,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,MAAc;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAC/B,CAAC,CAA8D,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;KACjC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,UAAU;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QAClC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE;QACxC,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QACpC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI;QACJ,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CACpB,CAAC,CAUA,EAAE,EAAE,CAAC,CAAC;QACL,EAAE,EAAE,CAAC,CAAC,UAAU;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;QAChC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE;QACpC,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;QAClC,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;KAC7B,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,MAAc,EACd,KAAa,EACb,UAAmB;IAEnB,qDAAqD;IACrD,mCAAmC;IACnC,mDAAmD;IACnD,MAAM,QAAQ,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExC,OAAO;QACL,KAAK;QACL,MAAM,EAAE,WAAW;QACnB,UAAU;QACV,GAAG;KACJ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,GAAW,EACX,KAAc,EACd,UAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,CAOA,EAAE,EAAE,CAAC,CAAC;QACL,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK;QACzB,UAAU,EAAE,CAAC,CAAC,YAAY,IAAI,KAAK;QACnC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;KACjB,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAc,EACd,QAAgB,EAChB,QAAgB,EAChB,MAAc;IAEd,yEAAyE;IACzE,MAAM,MAAM,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAE1C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,QAAiB;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,sDAAsD;QACtD,MAAM,WAAW,GACf,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC;QAC/B,MAAM,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEtD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ;gBACpD,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,QAAQ;oBACR,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC;wBAChC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,UAAU,CAA4C;YAC9D,SAAS;YACT,SAAS;YACT,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,UAAU,EAAE,KAAK,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Validates that a file path is safe to pass to `gh gist create`.
3
+ * Rejects paths that:
4
+ * - Contain `..` path traversal components
5
+ * - Are absolute paths outside the working directory
6
+ * - Are symlinks pointing outside the working directory
7
+ *
8
+ * @param filePath The user-supplied file path
9
+ * @param cwd The working directory used as the trust boundary
10
+ * @throws Error if the path is unsafe
11
+ */
12
+ export declare function assertSafeFilePath(filePath: string, cwd: string): void;
13
+ //# sourceMappingURL=path-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-validation.d.ts","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA+CtE"}
@@ -0,0 +1,54 @@
1
+ import { realpathSync, lstatSync } from "node:fs";
2
+ import { resolve, isAbsolute, relative } from "node:path";
3
+ /**
4
+ * Validates that a file path is safe to pass to `gh gist create`.
5
+ * Rejects paths that:
6
+ * - Contain `..` path traversal components
7
+ * - Are absolute paths outside the working directory
8
+ * - Are symlinks pointing outside the working directory
9
+ *
10
+ * @param filePath The user-supplied file path
11
+ * @param cwd The working directory used as the trust boundary
12
+ * @throws Error if the path is unsafe
13
+ */
14
+ export function assertSafeFilePath(filePath, cwd) {
15
+ // Reject path traversal via ".."
16
+ if (filePath.includes("..")) {
17
+ throw new Error(`Unsafe file path "${filePath}": path traversal ("..") is not allowed. ` +
18
+ `Provide a relative path within the working directory.`);
19
+ }
20
+ // Resolve the path relative to cwd
21
+ const resolvedPath = resolve(cwd, filePath);
22
+ // Reject absolute paths outside the cwd
23
+ if (isAbsolute(filePath)) {
24
+ const rel = relative(cwd, resolvedPath);
25
+ if (rel.startsWith("..")) {
26
+ throw new Error(`Unsafe file path "${filePath}": absolute path is outside the working directory "${cwd}". ` +
27
+ `Provide a relative path within the working directory.`);
28
+ }
29
+ }
30
+ // Check for symlinks pointing outside cwd
31
+ try {
32
+ const stat = lstatSync(resolvedPath);
33
+ if (stat.isSymbolicLink()) {
34
+ const realTarget = realpathSync(resolvedPath);
35
+ // Resolve the real cwd too, to handle macOS /var -> /private/var symlinks
36
+ const realCwd = realpathSync(cwd);
37
+ const rel = relative(realCwd, realTarget);
38
+ if (rel.startsWith("..")) {
39
+ throw new Error(`Unsafe file path "${filePath}": symlink resolves to "${realTarget}" ` +
40
+ `which is outside the working directory "${cwd}".`);
41
+ }
42
+ }
43
+ }
44
+ catch (err) {
45
+ // If the file doesn't exist yet (ENOENT), we can't check symlinks
46
+ // but path traversal and absolute path checks above still apply.
47
+ // Re-throw our own errors, ignore ENOENT.
48
+ if (err instanceof Error && err.message.startsWith("Unsafe file path")) {
49
+ throw err;
50
+ }
51
+ // File doesn't exist — path-traversal / absolute checks above are sufficient
52
+ }
53
+ }
54
+ //# sourceMappingURL=path-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-validation.js","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,GAAW;IAC9D,iCAAiC;IACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,2CAA2C;YACtE,uDAAuD,CAC1D,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE5C,wCAAwC;IACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,sDAAsD,GAAG,KAAK;gBACzF,uDAAuD,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAC9C,0EAA0E;YAC1E,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC1C,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,2BAA2B,UAAU,IAAI;oBACpE,2CAA2C,GAAG,IAAI,CACrD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kEAAkE;QAClE,iEAAiE;QACjE,0CAA0C;QAC1C,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvE,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,6EAA6E;IAC/E,CAAC;AACH,CAAC"}