ghagga 2.8.1 → 3.1.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 (146) hide show
  1. package/LICENSE +21 -0
  2. package/dist/commands/__tests__/review-tui.test.js +2 -2
  3. package/dist/commands/__tests__/review-tui.test.js.map +1 -1
  4. package/dist/commands/audit.d.ts +23 -0
  5. package/dist/commands/audit.d.ts.map +1 -0
  6. package/dist/commands/audit.js +282 -0
  7. package/dist/commands/audit.js.map +1 -0
  8. package/dist/commands/audit.test.d.ts +10 -0
  9. package/dist/commands/audit.test.d.ts.map +1 -0
  10. package/dist/commands/audit.test.js +110 -0
  11. package/dist/commands/audit.test.js.map +1 -0
  12. package/dist/commands/dismiss.d.ts +14 -0
  13. package/dist/commands/dismiss.d.ts.map +1 -0
  14. package/dist/commands/dismiss.js +98 -0
  15. package/dist/commands/dismiss.js.map +1 -0
  16. package/dist/commands/feedback.d.ts +18 -0
  17. package/dist/commands/feedback.d.ts.map +1 -0
  18. package/dist/commands/feedback.js +122 -0
  19. package/dist/commands/feedback.js.map +1 -0
  20. package/dist/commands/login.js +3 -3
  21. package/dist/commands/login.js.map +1 -1
  22. package/dist/commands/login.test.js +3 -4
  23. package/dist/commands/login.test.js.map +1 -1
  24. package/dist/commands/review-commit-msg.test.js +2 -2
  25. package/dist/commands/review-commit-msg.test.js.map +1 -1
  26. package/dist/commands/review-output.test.js +30 -2
  27. package/dist/commands/review-output.test.js.map +1 -1
  28. package/dist/commands/review.d.ts +16 -0
  29. package/dist/commands/review.d.ts.map +1 -1
  30. package/dist/commands/review.js +239 -3
  31. package/dist/commands/review.js.map +1 -1
  32. package/dist/commands/review.mr-exit.test.d.ts +13 -0
  33. package/dist/commands/review.mr-exit.test.d.ts.map +1 -0
  34. package/dist/commands/review.mr-exit.test.js +190 -0
  35. package/dist/commands/review.mr-exit.test.js.map +1 -0
  36. package/dist/commands/review.postback-disclosure.test.d.ts +22 -0
  37. package/dist/commands/review.postback-disclosure.test.d.ts.map +1 -0
  38. package/dist/commands/review.postback-disclosure.test.js +192 -0
  39. package/dist/commands/review.postback-disclosure.test.js.map +1 -0
  40. package/dist/commands/review.pr-exit.test.d.ts +13 -0
  41. package/dist/commands/review.pr-exit.test.d.ts.map +1 -0
  42. package/dist/commands/review.pr-exit.test.js +162 -0
  43. package/dist/commands/review.pr-exit.test.js.map +1 -0
  44. package/dist/commands/review.pr-jenkins.test.d.ts +16 -0
  45. package/dist/commands/review.pr-jenkins.test.d.ts.map +1 -0
  46. package/dist/commands/review.pr-jenkins.test.js +106 -0
  47. package/dist/commands/review.pr-jenkins.test.js.map +1 -0
  48. package/dist/commands/review.pr-nativeid-fallback.test.d.ts +15 -0
  49. package/dist/commands/review.pr-nativeid-fallback.test.d.ts.map +1 -0
  50. package/dist/commands/review.pr-nativeid-fallback.test.js +151 -0
  51. package/dist/commands/review.pr-nativeid-fallback.test.js.map +1 -0
  52. package/dist/commands/review.test.js +48 -33
  53. package/dist/commands/review.test.js.map +1 -1
  54. package/dist/commands/status.d.ts.map +1 -1
  55. package/dist/commands/status.js +15 -2
  56. package/dist/commands/status.js.map +1 -1
  57. package/dist/commands/status.test.js +31 -10
  58. package/dist/commands/status.test.js.map +1 -1
  59. package/dist/index.d.ts +3 -3
  60. package/dist/index.js +116 -23
  61. package/dist/index.js.map +1 -1
  62. package/dist/lib/cli-github-client-port.d.ts +52 -0
  63. package/dist/lib/cli-github-client-port.d.ts.map +1 -0
  64. package/dist/lib/cli-github-client-port.js +199 -0
  65. package/dist/lib/cli-github-client-port.js.map +1 -0
  66. package/dist/lib/cli-github-client-port.test.d.ts +10 -0
  67. package/dist/lib/cli-github-client-port.test.d.ts.map +1 -0
  68. package/dist/lib/cli-github-client-port.test.js +47 -0
  69. package/dist/lib/cli-github-client-port.test.js.map +1 -0
  70. package/dist/lib/cli-gitlab-client-port.d.ts +62 -0
  71. package/dist/lib/cli-gitlab-client-port.d.ts.map +1 -0
  72. package/dist/lib/cli-gitlab-client-port.js +209 -0
  73. package/dist/lib/cli-gitlab-client-port.js.map +1 -0
  74. package/dist/lib/cli-gitlab-client-port.test.d.ts +9 -0
  75. package/dist/lib/cli-gitlab-client-port.test.d.ts.map +1 -0
  76. package/dist/lib/cli-gitlab-client-port.test.js +278 -0
  77. package/dist/lib/cli-gitlab-client-port.test.js.map +1 -0
  78. package/dist/lib/config.d.ts +12 -0
  79. package/dist/lib/config.d.ts.map +1 -1
  80. package/dist/lib/config.js +14 -2
  81. package/dist/lib/config.js.map +1 -1
  82. package/dist/lib/config.test.js +22 -3
  83. package/dist/lib/config.test.js.map +1 -1
  84. package/dist/lib/forge-postback.d.ts +72 -0
  85. package/dist/lib/forge-postback.d.ts.map +1 -0
  86. package/dist/lib/forge-postback.js +39 -0
  87. package/dist/lib/forge-postback.js.map +1 -0
  88. package/dist/lib/github-api.d.ts.map +1 -1
  89. package/dist/lib/github-api.js +15 -6
  90. package/dist/lib/github-api.js.map +1 -1
  91. package/dist/lib/github-api.test.js +24 -1
  92. package/dist/lib/github-api.test.js.map +1 -1
  93. package/dist/lib/gitlab-api.d.ts +50 -0
  94. package/dist/lib/gitlab-api.d.ts.map +1 -0
  95. package/dist/lib/gitlab-api.js +75 -0
  96. package/dist/lib/gitlab-api.js.map +1 -0
  97. package/dist/lib/gitlab-api.test.d.ts +2 -0
  98. package/dist/lib/gitlab-api.test.d.ts.map +1 -0
  99. package/dist/lib/gitlab-api.test.js +79 -0
  100. package/dist/lib/gitlab-api.test.js.map +1 -0
  101. package/dist/lib/gitlab-e2e.manual.test.d.ts +24 -0
  102. package/dist/lib/gitlab-e2e.manual.test.d.ts.map +1 -0
  103. package/dist/lib/gitlab-e2e.manual.test.js +57 -0
  104. package/dist/lib/gitlab-e2e.manual.test.js.map +1 -0
  105. package/dist/lib/gitlab-token.d.ts +17 -0
  106. package/dist/lib/gitlab-token.d.ts.map +1 -0
  107. package/dist/lib/gitlab-token.js +24 -0
  108. package/dist/lib/gitlab-token.js.map +1 -0
  109. package/dist/lib/gitlab-token.test.d.ts +2 -0
  110. package/dist/lib/gitlab-token.test.d.ts.map +1 -0
  111. package/dist/lib/gitlab-token.test.js +38 -0
  112. package/dist/lib/gitlab-token.test.js.map +1 -0
  113. package/dist/lib/oauth.test.js +0 -1
  114. package/dist/lib/oauth.test.js.map +1 -1
  115. package/dist/lib/pr-postback.d.ts +42 -0
  116. package/dist/lib/pr-postback.d.ts.map +1 -0
  117. package/dist/lib/pr-postback.js +44 -0
  118. package/dist/lib/pr-postback.js.map +1 -0
  119. package/dist/lib/pr-postback.test.d.ts +9 -0
  120. package/dist/lib/pr-postback.test.d.ts.map +1 -0
  121. package/dist/lib/pr-postback.test.js +196 -0
  122. package/dist/lib/pr-postback.test.js.map +1 -0
  123. package/dist/lib/pr-token.d.ts +15 -0
  124. package/dist/lib/pr-token.d.ts.map +1 -0
  125. package/dist/lib/pr-token.js +22 -0
  126. package/dist/lib/pr-token.js.map +1 -0
  127. package/dist/lib/pr-token.test.d.ts +2 -0
  128. package/dist/lib/pr-token.test.d.ts.map +1 -0
  129. package/dist/lib/pr-token.test.js +25 -0
  130. package/dist/lib/pr-token.test.js.map +1 -0
  131. package/dist/lib/providers.d.ts +29 -0
  132. package/dist/lib/providers.d.ts.map +1 -0
  133. package/dist/lib/providers.js +41 -0
  134. package/dist/lib/providers.js.map +1 -0
  135. package/dist/lib/providers.test.d.ts +9 -0
  136. package/dist/lib/providers.test.d.ts.map +1 -0
  137. package/dist/lib/providers.test.js +60 -0
  138. package/dist/lib/providers.test.js.map +1 -0
  139. package/dist/ui/__tests__/format.test.js +2 -2
  140. package/dist/ui/__tests__/format.test.js.map +1 -1
  141. package/dist/ui/__tests__/theme.test.js +3 -2
  142. package/dist/ui/__tests__/theme.test.js.map +1 -1
  143. package/dist/ui/theme.d.ts.map +1 -1
  144. package/dist/ui/theme.js +1 -0
  145. package/dist/ui/theme.js.map +1 -1
  146. package/package.json +18 -18
@@ -8,10 +8,17 @@
8
8
  import { execSync } from 'node:child_process';
9
9
  import { existsSync, readFileSync } from 'node:fs';
10
10
  import { join, resolve } from 'node:path';
11
- import { buildSarif, DEFAULT_SETTINGS, EngramMemoryStorage, initializeDefaultTools, reviewPipeline, SqliteMemoryStorage, toolRegistry, } from 'ghagga-core';
11
+ import { buildSarif, DEFAULT_SETTINGS, EngramMemoryStorage, formatReviewComment, initializeDefaultTools, REVIEW_COMMENT_MARKER, reviewPipeline, SqliteMemoryStorage, toolRegistry, } from 'ghagga-core';
12
+ import { GitHubForgeAdapter, GitLabForgeAdapter, StaticTokenProvider, } from 'ghagga-forge';
13
+ import { createCliGitHubClientPort, resolveGitHubRepoId } from '../lib/cli-github-client-port.js';
14
+ import { createCliGitLabClientPort, resolveGitLabApiBase, resolveGitLabProjectId, } from '../lib/cli-gitlab-client-port.js';
12
15
  import { getConfigDir, getStoredToken } from '../lib/config.js';
16
+ import { composeForgePostback } from '../lib/forge-postback.js';
13
17
  import { getStagedDiff, resolveProjectId } from '../lib/git.js';
14
18
  import { createComment, createIssue, ensureLabel, formatIssueBody, parseGitHubRemote, } from '../lib/github-api.js';
19
+ import { parseGitLabRemote } from '../lib/gitlab-api.js';
20
+ import { resolveMrToken } from '../lib/gitlab-token.js';
21
+ import { resolvePrToken } from '../lib/pr-token.js';
15
22
  import { formatBoxSummary, formatMarkdownResult } from '../ui/format.js';
16
23
  import { resolveStepIcon } from '../ui/theme.js';
17
24
  import * as tui from '../ui/tui.js';
@@ -38,6 +45,14 @@ export async function reviewCommand(targetPath, options) {
38
45
  tui.log.error('❌ --staged and --commit-msg are mutually exclusive. Use one or the other.');
39
46
  process.exit(1);
40
47
  }
48
+ // ── Mutual exclusivity check: --pr (GitHub) and --mr (GitLab) ──
49
+ // Defensive guard at the command layer: the CLI index.ts also blocks this, but
50
+ // reviewCommand() must not silently run GitLab and DROP --pr if a caller (or a
51
+ // future entrypoint) reaches it with both set.
52
+ if (options.pr != null && options.mr != null) {
53
+ tui.log.error('❌ --pr and --mr are mutually exclusive. Use one or the other.');
54
+ process.exit(1);
55
+ }
41
56
  // ── Commit message review path (bypasses file-based pipeline) ──
42
57
  if (options.commitMsg) {
43
58
  const commitMsgFile = resolve(options.commitMsg);
@@ -183,8 +198,27 @@ export async function reviewCommand(targetPath, options) {
183
198
  if (options.issue) {
184
199
  await handleIssueExport(result, options);
185
200
  }
186
- // Step 7: Exit code --exit-on-issues overrides default behavior
187
- const exitCode = resolveExitCode(result, options.exitOnIssues ?? false);
201
+ // Step 6.6: Post the summary back to a GitHub PR (--pr) or GitLab MR (--mr).
202
+ // Composes WITH --issue and --output: all are independent outputs. Both route
203
+ // through the SHARED composeForgePostback helper (BL-CLI-FORGE-COMPOSITION).
204
+ // Returns false when an explicitly-requested post-back FAILED and soft-fail
205
+ // is OFF — that turns into a non-zero exit below (the requested job failed).
206
+ let prPostbackFailed = false;
207
+ if (options.pr != null) {
208
+ const ok = await handleForgePostback(result, options, 'github', options.pr);
209
+ prPostbackFailed = !ok && !(options.prSoftFail ?? false);
210
+ }
211
+ else if (options.mr != null) {
212
+ const ok = await handleForgePostback(result, options, 'gitlab', options.mr);
213
+ prPostbackFailed = !ok && !(options.prSoftFail ?? false);
214
+ }
215
+ // Step 7: Exit code — pick the WORST (most-failing) of:
216
+ // - the review's own exit code (--exit-on-issues / status-based), and
217
+ // - the post-back outcome (non-zero when a required post-back failed).
218
+ // Worst = any non-zero wins; we never mask a review-found-issues code with 0,
219
+ // nor mask a post-back failure with a review PASS.
220
+ const reviewExitCode = resolveExitCode(result, options.exitOnIssues ?? false);
221
+ const exitCode = reviewExitCode !== 0 ? reviewExitCode : prPostbackFailed ? 1 : 0;
188
222
  if (!options.outputFormat) {
189
223
  tui.outro('Review complete');
190
224
  }
@@ -261,6 +295,194 @@ async function handleIssueExport(result, options) {
261
295
  tui.log.warn(`⚠️ Issue export failed: ${msg}`);
262
296
  }
263
297
  }
298
+ /** GitHub `--pr` composition (P3): owner/repo from the remote, GitHub adapter. */
299
+ function githubPostbackConfig() {
300
+ return {
301
+ label: 'PR',
302
+ flag: '--pr',
303
+ forgeName: 'GitHub',
304
+ resolveToken: resolvePrToken,
305
+ tokenHint: 'Set GITHUB_TOKEN (or GH_TOKEN) in your environment, or run `ghagga login`.',
306
+ // The CLI GitHub client targets api.github.com (no GHE base override today);
307
+ // disclose what the client actually hits.
308
+ resolveTargetHost: () => 'api.github.com',
309
+ async buildComposition(token, prNumber) {
310
+ // Resolve owner/repo from the git remote (same source as issue-export).
311
+ const remoteUrl = execSync('git remote get-url origin', { encoding: 'utf-8' }).trim();
312
+ const { owner, repo } = parseGitHubRemote(remoteUrl);
313
+ // StaticTokenProvider satisfies the SAME credential seam the server worker
314
+ // uses (construction-site choice — no mint/refresh for a static token).
315
+ const resolvedToken = await new StaticTokenProvider(token).getToken();
316
+ const adapter = new GitHubForgeAdapter({
317
+ client: createCliGitHubClientPort(),
318
+ token: resolvedToken,
319
+ owner,
320
+ repo,
321
+ });
322
+ // Resolve the numeric repo id for RepoRef.nativeId (the opaque forge-native
323
+ // identity — see packages/forge/src/types.ts). Normally the IMMUTABLE
324
+ // numeric id (a rename changes owner/repo but not the id). Mirrors the
325
+ // GitLab `--mr` flow's resolveGitLabProjectId — ONE GET /repos/{owner}/{repo}
326
+ // → .id before the post. The adapter's wire calls still key on owner/repo
327
+ // from its ctor, so nativeId is identity metadata only (no wire-behavior
328
+ // change). If the resolution fails (network/404), degrade to the
329
+ // path-shaped owner/repo — an OPAQUE-string fallback, honest per the
330
+ // RepoRef.nativeId contract (opaque, may be path-shaped) — so an identity
331
+ // field never crashes the post-back, and warn.
332
+ let nativeId = `${owner}/${repo}`;
333
+ try {
334
+ nativeId = await resolveGitHubRepoId(owner, repo, resolvedToken);
335
+ }
336
+ catch (error) {
337
+ console.warn(`[ghagga] Could not resolve numeric GitHub repo id for ${owner}/${repo} ` +
338
+ `(${error instanceof Error ? error.message : String(error)}); ` +
339
+ 'falling back to the owner/repo path for RepoRef.nativeId.');
340
+ }
341
+ const ref = {
342
+ repo: { kind: 'github', nativeId, path: `${owner}/${repo}` },
343
+ iid: prNumber,
344
+ };
345
+ return { adapter, ref };
346
+ },
347
+ };
348
+ }
349
+ /**
350
+ * GitLab `--mr` composition (P4): resolve the NUMERIC project id from the remote
351
+ * path (R-GITLAB — path is mutable, id is canonical), build the GitLab adapter.
352
+ */
353
+ function gitlabPostbackConfig() {
354
+ return {
355
+ label: 'MR',
356
+ flag: '--mr',
357
+ forgeName: 'GitLab',
358
+ resolveToken: resolveMrToken,
359
+ tokenHint: 'Set GITLAB_TOKEN (or GL_TOKEN) in your environment, or run `ghagga login`.',
360
+ // Disclose the REAL resolved API host (remote host + GITLAB_HOST /
361
+ // GITLAB_API_BASE overrides) — the ACTUAL host the GITLAB_TOKEN is sent to.
362
+ // A poisoned `origin` (or override) therefore surfaces BEFORE the post.
363
+ resolveTargetHost: () => {
364
+ const remoteUrl = execSync('git remote get-url origin', { encoding: 'utf-8' }).trim();
365
+ const { host } = parseGitLabRemote(remoteUrl);
366
+ return gitlabApiBaseHost(resolveGitLabApiBase(host));
367
+ },
368
+ async buildComposition(token, mrIid) {
369
+ const remoteUrl = execSync('git remote get-url origin', { encoding: 'utf-8' }).trim();
370
+ // Self-hosted GitLab: derive the API base from the REMOTE host (with a
371
+ // GITLAB_HOST / GITLAB_API_BASE env override) so a self-managed instance
372
+ // works, not just gitlab.com.
373
+ const { host, projectPath } = parseGitLabRemote(remoteUrl);
374
+ const apiBase = resolveGitLabApiBase(host);
375
+ const resolvedToken = await new StaticTokenProvider(token).getToken();
376
+ // R-GITLAB: nativeId MUST be the numeric project id (GET /projects/:path).
377
+ const projectId = await resolveGitLabProjectId(projectPath, resolvedToken, apiBase);
378
+ const adapter = new GitLabForgeAdapter({
379
+ client: createCliGitLabClientPort(apiBase),
380
+ token: resolvedToken,
381
+ projectId,
382
+ });
383
+ const ref = {
384
+ repo: { kind: 'gitlab', nativeId: projectId, path: projectPath },
385
+ iid: mrIid,
386
+ };
387
+ return { adapter, ref };
388
+ },
389
+ };
390
+ }
391
+ /**
392
+ * Extract the bare host from a resolved GitLab API base (`https://<host>/api/v4`
393
+ * or a verbatim `GITLAB_API_BASE`). Used ONLY for the human-readable pre-POST
394
+ * disclosure line — falls back to the raw base if it cannot be URL-parsed (e.g. a
395
+ * malformed override) so the user still sees SOMETHING about the destination.
396
+ */
397
+ function gitlabApiBaseHost(apiBase) {
398
+ try {
399
+ return new URL(apiBase).host;
400
+ }
401
+ catch {
402
+ return apiBase;
403
+ }
404
+ }
405
+ /**
406
+ * Handle `--pr` (GitHub) / `--mr` (GitLab): post (idempotently upsert) the review
407
+ * summary as a comment on the change request, routed through the SHARED
408
+ * {@link composeForgePostback} pipeline (BL-CLI-FORGE-COMPOSITION). The
409
+ * forge-specific glue (token resolver, remote parse, adapter, ref identity) is
410
+ * supplied by the per-forge {@link ForgePostbackConfig}; the find-stale→delete→
411
+ * repost idempotency lives inside the adapter + the forge-neutral
412
+ * {@link postSummaryComment}.
413
+ *
414
+ * Token resolution is env-first (CI/Jenkins) with stored-login fallback. Missing
415
+ * token is a hard, actionable error (unlike issue-export's soft-skip) because the
416
+ * flag is an explicit post-back request. A 401 with a static token is fatal —
417
+ * there is nothing to re-mint, so NO invalidate-retry is attempted.
418
+ *
419
+ * BLOCKING by default: the flag is an explicitly-requested side-effect, so
420
+ * failing to perform it (thrown error OR missing token) is a JOB failure. The
421
+ * review output is already emitted; we only signal the failure via the RETURN
422
+ * value so the caller folds it into the worst exit code. `--pr-soft-fail` flips
423
+ * this to the non-blocking behavior (warn + keep exit 0).
424
+ *
425
+ * @returns true when the summary was posted (or soft-fail-skipped), false when an
426
+ * explicitly-requested post-back FAILED (token missing or error thrown).
427
+ */
428
+ async function handleForgePostback(result, options, forge, changeRequestNumber) {
429
+ const softFail = options.prSoftFail ?? false;
430
+ const config = forge === 'github' ? githubPostbackConfig() : gitlabPostbackConfig();
431
+ // Render the body via core's formatter (PARITY with the server PR comment).
432
+ const body = formatReviewComment(result, { fileList: result.metadata.fileList });
433
+ const marker = { html: REVIEW_COMMENT_MARKER };
434
+ try {
435
+ // SECURITY HYGIENE: disclose the DESTINATION HOST on stderr BEFORE the POST
436
+ // fires, so the user sees where their token is going even if the post then
437
+ // fails/hangs. For GitLab the host is the REAL resolved API host (derived
438
+ // from the git remote + env overrides) — a poisoned `origin` that would
439
+ // exfiltrate the token is therefore visible. stderr ONLY (never stdout /
440
+ // SARIF): console.error regardless of --output, one line per post.
441
+ const targetHost = config.resolveTargetHost();
442
+ console.error(`→ Posting ${config.label} #${changeRequestNumber} review to ${targetHost}`);
443
+ const outcome = await composeForgePostback({
444
+ changeRequestNumber,
445
+ resolveToken: config.resolveToken,
446
+ buildComposition: config.buildComposition,
447
+ body,
448
+ marker,
449
+ });
450
+ if (outcome.kind === 'missing-token') {
451
+ const errMsg = `❌ ${config.flag} requires a ${config.forgeName} token. ${config.tokenHint}`;
452
+ if (softFail) {
453
+ if (options.outputFormat)
454
+ console.error(errMsg);
455
+ else
456
+ tui.log.warn(errMsg);
457
+ return true;
458
+ }
459
+ if (options.outputFormat)
460
+ console.error(errMsg);
461
+ else
462
+ tui.log.error(errMsg);
463
+ return false;
464
+ }
465
+ const { createdNativeId, deletedNativeIds } = outcome.result;
466
+ const stale = deletedNativeIds.length > 0 ? ` (replaced ${deletedNativeIds.length} stale)` : '';
467
+ issueLog(options, `✅ ${config.label} #${changeRequestNumber} summary posted (comment ${createdNativeId})${stale}`);
468
+ return true;
469
+ }
470
+ catch (error) {
471
+ const msg = error instanceof Error ? error.message : String(error);
472
+ if (softFail) {
473
+ issueLog(options, `⚠️ ${config.label} post-back failed (soft-fail, ignoring): ${msg}`);
474
+ return true;
475
+ }
476
+ // BLOCKING: surface the failure so the caller exits non-zero. The review
477
+ // output itself is already printed and is unaffected.
478
+ const failMsg = `❌ ${config.label} post-back failed: ${msg}`;
479
+ if (options.outputFormat)
480
+ console.error(failMsg);
481
+ else
482
+ tui.log.error(failMsg);
483
+ return false;
484
+ }
485
+ }
264
486
  /**
265
487
  * Print issue URL to stderr when --output is set (stdout reserved for format),
266
488
  * otherwise use tui.log.success().
@@ -377,6 +599,17 @@ function mergeSettings(options, fileConfig) {
377
599
  for (const tool of disabledTools) {
378
600
  enabledTools.delete(tool);
379
601
  }
602
+ // Resolve lens configuration: CLI --lenses flag > .ghagga.json lenses > undefined (defaults)
603
+ const lenses = options.lenses
604
+ ? options.lenses
605
+ .split(',')
606
+ .map((s) => s.trim())
607
+ .filter(Boolean)
608
+ : fileConfig.lenses;
609
+ // Resolve lens directory: CLI --lens-dir > default .ghagga/lenses/
610
+ // The lensDir is resolved to an absolute path relative to the repo root later,
611
+ // but we set the default convention here.
612
+ const lensDir = options.lensDir ?? join(resolve('.'), '.ghagga', 'lenses');
380
613
  return {
381
614
  enableSemgrep: options.semgrep ?? fileConfig.enableSemgrep ?? DEFAULT_SETTINGS.enableSemgrep,
382
615
  enableTrivy: options.trivy ?? fileConfig.enableTrivy ?? DEFAULT_SETTINGS.enableTrivy,
@@ -387,6 +620,8 @@ function mergeSettings(options, fileConfig) {
387
620
  reviewLevel: fileConfig.reviewLevel ?? DEFAULT_SETTINGS.reviewLevel,
388
621
  disabledTools: Array.from(disabledTools),
389
622
  enabledTools: Array.from(enabledTools),
623
+ lenses,
624
+ lensDir,
390
625
  };
391
626
  }
392
627
  // ─── Tool List ──────────────────────────────────────────────────
@@ -537,6 +772,7 @@ function getExitCode(status) {
537
772
  return 0;
538
773
  case 'FAILED':
539
774
  case 'NEEDS_HUMAN_REVIEW':
775
+ case 'PARTIAL':
540
776
  return 1;
541
777
  default: {
542
778
  const _exhaustive = status;
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * P4 — `ghagga review --mr N` (GitLab MR) post-back routes through the SHARED
3
+ * composition helper (composeForgePostback → postSummaryComment) and honors the
4
+ * SAME blocking-by-default exit semantics as `--pr` (FIX 3). `--pr-soft-fail`
5
+ * (shared) opts out.
6
+ *
7
+ * We mock the seams reviewCommand composes (pipeline, git, gitlab-token,
8
+ * gitlab-api, gitlab client port, post-back, core formatters) so these tests are
9
+ * deterministic + offline, and assert the resolved process exit code + that the
10
+ * GitLab adapter is the one constructed (shared helper routes --mr to GitLab).
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=review.mr-exit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.mr-exit.test.d.ts","sourceRoot":"","sources":["../../src/commands/review.mr-exit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * P4 — `ghagga review --mr N` (GitLab MR) post-back routes through the SHARED
3
+ * composition helper (composeForgePostback → postSummaryComment) and honors the
4
+ * SAME blocking-by-default exit semantics as `--pr` (FIX 3). `--pr-soft-fail`
5
+ * (shared) opts out.
6
+ *
7
+ * We mock the seams reviewCommand composes (pipeline, git, gitlab-token,
8
+ * gitlab-api, gitlab client port, post-back, core formatters) so these tests are
9
+ * deterministic + offline, and assert the resolved process exit code + that the
10
+ * GitLab adapter is the one constructed (shared helper routes --mr to GitLab).
11
+ */
12
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
13
+ vi.mock('ghagga-core', () => ({
14
+ reviewPipeline: vi.fn(),
15
+ buildSarif: vi.fn().mockReturnValue({ version: '2.1.0', runs: [] }),
16
+ formatReviewComment: vi.fn().mockReturnValue('<!-- ghagga-review -->\nbody'),
17
+ formatBoxSummary: vi.fn().mockReturnValue([]),
18
+ REVIEW_COMMENT_MARKER: '<!-- ghagga-review -->',
19
+ DEFAULT_SETTINGS: {
20
+ enableSemgrep: true,
21
+ enableTrivy: true,
22
+ enableCpd: true,
23
+ enableMemory: true,
24
+ customRules: [],
25
+ ignorePatterns: [],
26
+ reviewLevel: 'normal',
27
+ enabledTools: [],
28
+ disabledTools: [],
29
+ },
30
+ DEFAULT_MODELS: { gateway: 'auto', 'cli-bridge': 'auto', ollama: 'llama3' },
31
+ initializeDefaultTools: vi.fn(),
32
+ toolRegistry: { getAll: vi.fn().mockReturnValue([]) },
33
+ EngramMemoryStorage: { create: vi.fn() },
34
+ SqliteMemoryStorage: { create: vi.fn() },
35
+ formatReviewResult: vi.fn(),
36
+ }));
37
+ vi.mock('node:child_process', () => ({ execSync: vi.fn() }));
38
+ vi.mock('node:fs', () => ({ readFileSync: vi.fn(), existsSync: vi.fn().mockReturnValue(false) }));
39
+ vi.mock('../lib/gitlab-token.js', () => ({ resolveMrToken: vi.fn() }));
40
+ vi.mock('../lib/pr-postback.js', () => ({ postSummaryComment: vi.fn() }));
41
+ vi.mock('../lib/gitlab-api.js', () => ({
42
+ parseGitLabRemote: vi.fn().mockReturnValue({ host: 'gitlab.com', projectPath: 'acme/widgets' }),
43
+ GitLabApiError: class extends Error {
44
+ },
45
+ }));
46
+ vi.mock('../lib/cli-gitlab-client-port.js', () => ({
47
+ createCliGitLabClientPort: vi.fn(),
48
+ resolveGitLabApiBase: vi.fn().mockReturnValue('https://gitlab.com/api/v4'),
49
+ resolveGitLabProjectId: vi.fn().mockResolvedValue('12345'),
50
+ }));
51
+ // Track which adapter the shared helper constructs (routing proof).
52
+ const gitlabCtor = vi.fn();
53
+ const githubCtor = vi.fn();
54
+ vi.mock('ghagga-forge', () => ({
55
+ GitHubForgeAdapter: class {
56
+ constructor(deps) {
57
+ githubCtor(deps);
58
+ }
59
+ },
60
+ GitLabForgeAdapter: class {
61
+ constructor(deps) {
62
+ gitlabCtor(deps);
63
+ }
64
+ },
65
+ StaticTokenProvider: class {
66
+ async getToken() {
67
+ return 'glpat';
68
+ }
69
+ },
70
+ }));
71
+ vi.mock('../lib/cli-github-client-port.js', () => ({ createCliGitHubClientPort: vi.fn() }));
72
+ import { execSync } from 'node:child_process';
73
+ import { reviewPipeline } from 'ghagga-core';
74
+ import { resolveGitLabProjectId } from '../lib/cli-gitlab-client-port.js';
75
+ import { resolveMrToken } from '../lib/gitlab-token.js';
76
+ import { postSummaryComment } from '../lib/pr-postback.js';
77
+ const mockExecSync = vi.mocked(execSync);
78
+ const mockReviewPipeline = vi.mocked(reviewPipeline);
79
+ const mockResolveMrToken = vi.mocked(resolveMrToken);
80
+ const mockPostSummaryComment = vi.mocked(postSummaryComment);
81
+ const mockResolveProjectId = vi.mocked(resolveGitLabProjectId);
82
+ function defaultOptions(overrides = {}) {
83
+ return {
84
+ mode: 'simple',
85
+ provider: 'gateway',
86
+ model: 'm',
87
+ apiKey: 'k',
88
+ semgrep: true,
89
+ trivy: true,
90
+ cpd: true,
91
+ memory: false,
92
+ verbose: false,
93
+ disableTools: [],
94
+ enableTools: [],
95
+ ...overrides,
96
+ };
97
+ }
98
+ function passedResult() {
99
+ return {
100
+ status: 'PASSED',
101
+ summary: 'ok',
102
+ findings: [],
103
+ staticAnalysis: {
104
+ semgrep: { status: 'skipped', findings: [], executionTimeMs: 0 },
105
+ trivy: { status: 'skipped', findings: [], executionTimeMs: 0 },
106
+ cpd: { status: 'skipped', findings: [], executionTimeMs: 0 },
107
+ },
108
+ memoryContext: null,
109
+ metadata: {
110
+ mode: 'simple',
111
+ provider: 'gateway',
112
+ model: 'm',
113
+ tokensUsed: 1,
114
+ executionTimeMs: 1,
115
+ toolsRun: [],
116
+ toolsSkipped: [],
117
+ fileList: [],
118
+ },
119
+ };
120
+ }
121
+ describe('reviewCommand — --mr post-back (P4, shared composition helper)', () => {
122
+ // biome-ignore lint/suspicious/noExplicitAny: spy
123
+ let exitSpy;
124
+ // biome-ignore lint/suspicious/noExplicitAny: spy
125
+ let errorSpy;
126
+ beforeEach(() => {
127
+ vi.clearAllMocks();
128
+ exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => { }));
129
+ errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
130
+ vi.spyOn(console, 'log').mockImplementation(() => { });
131
+ mockExecSync.mockReturnValue('git@gitlab.com:acme/widgets.git');
132
+ mockReviewPipeline.mockResolvedValue(passedResult());
133
+ });
134
+ afterEach(() => {
135
+ vi.restoreAllMocks();
136
+ });
137
+ it('--mr success → posts via the GitLab adapter through the SHARED helper, exit 0', async () => {
138
+ mockResolveMrToken.mockReturnValue('glpat');
139
+ mockPostSummaryComment.mockResolvedValue({ createdNativeId: 77, deletedNativeIds: [] });
140
+ const { reviewCommand } = await import('./review.js');
141
+ await reviewCommand('.', defaultOptions({ mr: 7, outputFormat: 'sarif' }));
142
+ // Routing proof: GitLab adapter constructed, NOT GitHub; ref via numeric id.
143
+ expect(gitlabCtor).toHaveBeenCalledOnce();
144
+ expect(githubCtor).not.toHaveBeenCalled();
145
+ expect(gitlabCtor).toHaveBeenCalledWith(expect.objectContaining({ projectId: '12345' }));
146
+ expect(mockResolveProjectId).toHaveBeenCalledWith('acme/widgets', 'glpat', 'https://gitlab.com/api/v4');
147
+ // Post routed through the shared forge-neutral postSummaryComment.
148
+ expect(mockPostSummaryComment).toHaveBeenCalledOnce();
149
+ expect(exitSpy).toHaveBeenCalledWith(0);
150
+ });
151
+ it('--mr + post-back throws → exit NON-ZERO (1) even when review PASSED', async () => {
152
+ mockResolveMrToken.mockReturnValue('glpat');
153
+ mockPostSummaryComment.mockRejectedValue(new Error('GitLab 500'));
154
+ const { reviewCommand } = await import('./review.js');
155
+ await reviewCommand('.', defaultOptions({ mr: 7, outputFormat: 'sarif' }));
156
+ expect(exitSpy).toHaveBeenCalledWith(1);
157
+ });
158
+ it('--mr + missing token → exit NON-ZERO (1) with a GitLab-specific message', async () => {
159
+ mockResolveMrToken.mockReturnValue(null);
160
+ const { reviewCommand } = await import('./review.js');
161
+ await reviewCommand('.', defaultOptions({ mr: 7, outputFormat: 'sarif' }));
162
+ expect(exitSpy).toHaveBeenCalledWith(1);
163
+ expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('--mr requires a GitLab token'));
164
+ });
165
+ it('--mr + --pr-soft-fail + throws → WARNS and exits 0', async () => {
166
+ mockResolveMrToken.mockReturnValue('glpat');
167
+ mockPostSummaryComment.mockRejectedValue(new Error('GitLab 500'));
168
+ const { reviewCommand } = await import('./review.js');
169
+ await reviewCommand('.', defaultOptions({ mr: 7, prSoftFail: true, outputFormat: 'sarif' }));
170
+ expect(exitSpy).toHaveBeenCalledWith(0);
171
+ });
172
+ it('both --pr AND --mr → defensive guard exits 1 BEFORE the pipeline runs (FIX D)', async () => {
173
+ mockResolveMrToken.mockReturnValue('glpat');
174
+ const { reviewCommand } = await import('./review.js');
175
+ await reviewCommand('.', defaultOptions({ pr: 3, mr: 7, outputFormat: 'sarif' }));
176
+ // The guard fires FIRST: the first recorded exit is the guard's non-zero exit
177
+ // (in production process.exit terminates here; the test mock lets it fall
178
+ // through, so we assert on the FIRST exit call specifically).
179
+ expect(exitSpy.mock.calls[0]?.[0]).toBe(1);
180
+ });
181
+ it('does NOT mask a review-found-issues exit: --mr success + FAILED review → exit 1', async () => {
182
+ mockReviewPipeline.mockResolvedValue({ ...passedResult(), status: 'FAILED' });
183
+ mockResolveMrToken.mockReturnValue('glpat');
184
+ mockPostSummaryComment.mockResolvedValue({ createdNativeId: 77, deletedNativeIds: [] });
185
+ const { reviewCommand } = await import('./review.js');
186
+ await reviewCommand('.', defaultOptions({ mr: 7, outputFormat: 'sarif' }));
187
+ expect(exitSpy).toHaveBeenCalledWith(1);
188
+ });
189
+ });
190
+ //# sourceMappingURL=review.mr-exit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.mr-exit.test.js","sourceRoot":"","sources":["../../src/commands/review.mr-exit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SECURITY HYGIENE — before the CLI posts a review back to a forge (`--pr` GitHub
3
+ * PR / `--mr` GitLab MR), it discloses the DESTINATION HOST on stderr so the user
4
+ * sees where their token is going BEFORE the network POST fires.
5
+ *
6
+ * Rationale: the GitLab API base is derived from the git remote host, so a
7
+ * poisoned `origin` could exfiltrate GITLAB_TOKEN. Disclosing the REAL resolved
8
+ * host makes that visible.
9
+ *
10
+ * These tests assert:
11
+ * - the disclosure line is emitted to STDERR (console.error), NOT stdout
12
+ * (stdout is reserved for SARIF / JSON / markdown output)
13
+ * - the host is correct for --pr (api.github.com) and --mr (gitlab.com)
14
+ * - a self-hosted GitLab remote discloses THAT host (real resolution, not a
15
+ * mock) — this is the poisoned-origin-visible case
16
+ *
17
+ * For the GitLab path we deliberately use the REAL parseGitLabRemote +
18
+ * resolveGitLabApiBase (only the network seams are mocked) so the host shown is
19
+ * the genuinely-resolved destination.
20
+ */
21
+ export {};
22
+ //# sourceMappingURL=review.postback-disclosure.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.postback-disclosure.test.d.ts","sourceRoot":"","sources":["../../src/commands/review.postback-disclosure.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}