@vypdev/copilot 3.5.0 → 3.5.2

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.
@@ -44015,7 +44015,7 @@ exports.ENGLISH_MERGE_QUEUE_MESSAGES = Object.freeze({
44015
44015
  'mergeQueue.decision.queueNotExposed': 'The target does not expose a required merge queue.',
44016
44016
  'mergeQueue.decision.autoMergeConfigured': 'Native auto-merge was explicitly configured.',
44017
44017
  'mergeQueue.decision.autoMergeDisabled': 'Native auto-merge is disabled for this repository.',
44018
- 'mergeQueue.decision.immediatelyMergeable': 'GitHub reports the pull request ready; native auto-merge preserves branch protection.',
44018
+ 'mergeQueue.decision.immediatelyMergeable': 'GitHub reports the pull request ready; merge its verified head with branch protection enforced.',
44019
44019
  'mergeQueue.decision.autoMergeAvailable': 'GitHub will merge after checks and reviews complete.',
44020
44020
  'mergeQueue.decision.createOnlyRequired': 'Repository auto-merge is unavailable; maintainer merge is required.',
44021
44021
  });
@@ -44040,7 +44040,7 @@ exports.SPANISH_MERGE_QUEUE_MESSAGES = Object.freeze({
44040
44040
  'mergeQueue.decision.queueNotExposed': 'El destino no expone una merge queue obligatoria.',
44041
44041
  'mergeQueue.decision.autoMergeConfigured': 'El auto-merge nativo se ha configurado explícitamente.',
44042
44042
  'mergeQueue.decision.autoMergeDisabled': 'El auto-merge nativo está deshabilitado en este repositorio.',
44043
- 'mergeQueue.decision.immediatelyMergeable': 'GitHub indica que la pull request está lista; el auto-merge nativo preserva la protección de rama.',
44043
+ 'mergeQueue.decision.immediatelyMergeable': 'GitHub indica que la pull request está lista; fusionar su head verificado respetando la protección de rama.',
44044
44044
  'mergeQueue.decision.autoMergeAvailable': 'GitHub hará merge cuando terminen los checks y las revisiones.',
44045
44045
  'mergeQueue.decision.createOnlyRequired': 'El auto-merge del repositorio no está disponible; se requiere el merge de una persona mantenedora.',
44046
44046
  });
@@ -52014,7 +52014,7 @@ class DeploymentOrchestrationRuntime {
52014
52014
  }
52015
52015
  async applyAutoMerge(context, operation, pullRequest, capabilities) {
52016
52016
  if (operation.prMode === "auto" && capabilities.immediatelyMergeable) {
52017
- await this.dependencies.pullRequests.mergePullRequest(pullRequest.number);
52017
+ await this.dependencies.pullRequests.mergePullRequest(pullRequest.number, pullRequest.headSha);
52018
52018
  return;
52019
52019
  }
52020
52020
  if (!pullRequest.autoMergeEnabled) {
@@ -79383,12 +79383,13 @@ class GithubManagedPullRequestRepository {
79383
79383
  throw new Error("GitHub did not confirm that the pull request entered the merge queue.");
79384
79384
  }
79385
79385
  }
79386
- async mergePullRequest(owner, repository, pullRequest, token) {
79386
+ async mergePullRequest(owner, repository, pullRequest, expectedHeadSha, token) {
79387
79387
  const { data } = await this.clientProvider.getClient(token).rest.pulls.merge({
79388
79388
  owner,
79389
79389
  repo: repository,
79390
79390
  pull_number: pullRequest,
79391
79391
  merge_method: "merge",
79392
+ sha: expectedHeadSha,
79392
79393
  });
79393
79394
  if (!data.merged || !data.sha)
79394
79395
  throw new Error(data.message ?? `Pull request #${pullRequest} was not merged.`);
@@ -79413,6 +79414,43 @@ function mapPullRequest(value, owner, repository) {
79413
79414
  }
79414
79415
 
79415
79416
 
79417
+ /***/ }),
79418
+
79419
+ /***/ 33371:
79420
+ /***/ ((__unused_webpack_module, exports) => {
79421
+
79422
+ "use strict";
79423
+
79424
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
79425
+ exports.observePullRequestReadiness = observePullRequestReadiness;
79426
+ async function observePullRequestReadiness(client, owner, repository, pullRequest) {
79427
+ try {
79428
+ const response = await client.graphql(`query DeploymentPullRequestReadiness($owner: String!, $repository: String!, $pullRequest: Int!) {
79429
+ repository(owner: $owner, name: $repository) {
79430
+ pullRequest(number: $pullRequest) { headRefOid mergeable mergeStateStatus isDraft }
79431
+ }
79432
+ }`, { owner, repository, pullRequest });
79433
+ const state = response?.repository?.pullRequest;
79434
+ if (!state || typeof state.headRefOid !== "string" || !/^[a-f0-9]{40}$/i.test(state.headRefOid)
79435
+ || typeof state.mergeable !== "string" || !["MERGEABLE", "CONFLICTING", "UNKNOWN"].includes(state.mergeable)
79436
+ || typeof state.mergeStateStatus !== "string" || state.mergeStateStatus.length === 0
79437
+ || typeof state.isDraft !== "boolean") {
79438
+ return { problem: { area: "workflow-contract", message: "GitHub returned incomplete pull-request merge readiness." } };
79439
+ }
79440
+ return {
79441
+ value: {
79442
+ headSha: state.headRefOid,
79443
+ immediatelyMergeable: !state.isDraft && state.mergeable === "MERGEABLE"
79444
+ && ["CLEAN", "UNSTABLE"].includes(state.mergeStateStatus),
79445
+ },
79446
+ };
79447
+ }
79448
+ catch {
79449
+ return { problem: { area: "workflow-contract", message: "GitHub pull-request merge readiness could not be inspected." } };
79450
+ }
79451
+ }
79452
+
79453
+
79416
79454
  /***/ }),
79417
79455
 
79418
79456
  /***/ 55527:
@@ -79456,6 +79494,7 @@ var __importStar = (this && this.__importStar) || (function () {
79456
79494
  Object.defineProperty(exports, "__esModule", ({ value: true }));
79457
79495
  exports.GithubTargetMergeCapabilitiesInspector = void 0;
79458
79496
  const yaml = __importStar(__nccwpck_require__(783));
79497
+ const github_pull_request_readiness_query_1 = __nccwpck_require__(33371);
79459
79498
  class GithubTargetMergeCapabilitiesInspector {
79460
79499
  constructor(clientProvider) {
79461
79500
  this.clientProvider = clientProvider;
@@ -79468,8 +79507,8 @@ class GithubTargetMergeCapabilitiesInspector {
79468
79507
  observeEffectiveRules(client, owner, repository, targetBranch),
79469
79508
  observeBranchMergeQueue(client, owner, repository, targetBranch),
79470
79509
  options.pullRequest === undefined
79471
- ? Promise.resolve(undefined)
79472
- : client.rest.pulls.get({ owner, repo: repository, pull_number: options.pullRequest }).then(({ data }) => data),
79510
+ ? Promise.resolve({ value: undefined, problem: undefined })
79511
+ : (0, github_pull_request_readiness_query_1.observePullRequestReadiness)(client, owner, repository, options.pullRequest),
79473
79512
  ]);
79474
79513
  const candidateProblem = options.candidateHeadSha !== undefined && !/^[a-f0-9]{40}$/i.test(options.candidateHeadSha)
79475
79514
  ? {
@@ -79479,25 +79518,26 @@ class GithubTargetMergeCapabilitiesInspector {
79479
79518
  : undefined;
79480
79519
  const candidateHeadChangedProblem = options.candidateHeadSha !== undefined
79481
79520
  && candidateProblem === undefined
79482
- && pullRequestState !== undefined
79483
- && pullRequestState.head.sha !== options.candidateHeadSha
79521
+ && pullRequestState.value !== undefined
79522
+ && pullRequestState.value.headSha !== options.candidateHeadSha
79484
79523
  ? {
79485
79524
  area: "workflow-contract",
79486
79525
  message: "The pull request head changed during readiness inspection, so the observed workflow contract is stale.",
79487
79526
  }
79488
79527
  : undefined;
79489
79528
  const effective = normalizeEffectiveRules(classic.value, rulesets.value);
79490
- const problems = [classic.problem, rulesets.problem, queue.problem, candidateProblem, candidateHeadChangedProblem, ...effective.problems]
79529
+ const problems = [classic.problem, rulesets.problem, queue.problem, pullRequestState.problem,
79530
+ candidateProblem, candidateHeadChangedProblem, ...effective.problems]
79491
79531
  .filter((problem) => problem !== undefined);
79492
79532
  const mergeQueueRequired = queue.value === true || effective.mergeQueueRequired;
79493
- const candidateHeadSha = options.candidateHeadSha ?? pullRequestState?.head.sha;
79533
+ const candidateHeadSha = options.candidateHeadSha ?? pullRequestState.value?.headSha;
79494
79534
  const producerInspection = mergeQueueRequired
79495
79535
  ? await inspectMergeQueueProducers(client, owner, repository, repositoryData.id, targetBranch, candidateHeadSha, effective.requiredChecks, effective.requiredWorkflows)
79496
79536
  : { producers: [], problems: [] };
79497
79537
  return {
79498
79538
  autoMergeAllowed: repositoryData.allow_auto_merge === true,
79499
79539
  mergeQueueRequired,
79500
- immediatelyMergeable: pullRequestState?.mergeable === true && pullRequestState.mergeable_state === "clean",
79540
+ immediatelyMergeable: problems.length === 0 && pullRequestState.value?.immediatelyMergeable === true,
79501
79541
  requiresStrictStatusChecks: effective.requiresStrictStatusChecks,
79502
79542
  mergeQueueProducers: producerInspection.producers,
79503
79543
  mergeQueueObservationProblems: [...problems, ...producerInspection.problems],
@@ -92399,7 +92439,7 @@ function bindManagedPullRequests(port, binding) {
92399
92439
  enableAutoMerge: (pullRequestNodeId) => port.enableAutoMerge(binding.owner, binding.repository, pullRequestNodeId, binding.token),
92400
92440
  isPullRequestQueued: (pullRequestNodeId) => port.isPullRequestQueued(binding.owner, binding.repository, pullRequestNodeId, binding.token),
92401
92441
  enqueuePullRequest: (pullRequestNodeId, expectedHeadSha) => port.enqueuePullRequest(binding.owner, binding.repository, pullRequestNodeId, expectedHeadSha, binding.token),
92402
- mergePullRequest: (pullRequest) => port.mergePullRequest(binding.owner, binding.repository, pullRequest, binding.token),
92442
+ mergePullRequest: (pullRequest, expectedHeadSha) => port.mergePullRequest(binding.owner, binding.repository, pullRequest, expectedHeadSha, binding.token),
92403
92443
  });
92404
92444
  }
92405
92445
  function bindDeploymentTargetRules(port, binding) {
@@ -45553,7 +45553,7 @@ exports.ENGLISH_MERGE_QUEUE_MESSAGES = Object.freeze({
45553
45553
  'mergeQueue.decision.queueNotExposed': 'The target does not expose a required merge queue.',
45554
45554
  'mergeQueue.decision.autoMergeConfigured': 'Native auto-merge was explicitly configured.',
45555
45555
  'mergeQueue.decision.autoMergeDisabled': 'Native auto-merge is disabled for this repository.',
45556
- 'mergeQueue.decision.immediatelyMergeable': 'GitHub reports the pull request ready; native auto-merge preserves branch protection.',
45556
+ 'mergeQueue.decision.immediatelyMergeable': 'GitHub reports the pull request ready; merge its verified head with branch protection enforced.',
45557
45557
  'mergeQueue.decision.autoMergeAvailable': 'GitHub will merge after checks and reviews complete.',
45558
45558
  'mergeQueue.decision.createOnlyRequired': 'Repository auto-merge is unavailable; maintainer merge is required.',
45559
45559
  });
@@ -45578,7 +45578,7 @@ exports.SPANISH_MERGE_QUEUE_MESSAGES = Object.freeze({
45578
45578
  'mergeQueue.decision.queueNotExposed': 'El destino no expone una merge queue obligatoria.',
45579
45579
  'mergeQueue.decision.autoMergeConfigured': 'El auto-merge nativo se ha configurado explícitamente.',
45580
45580
  'mergeQueue.decision.autoMergeDisabled': 'El auto-merge nativo está deshabilitado en este repositorio.',
45581
- 'mergeQueue.decision.immediatelyMergeable': 'GitHub indica que la pull request está lista; el auto-merge nativo preserva la protección de rama.',
45581
+ 'mergeQueue.decision.immediatelyMergeable': 'GitHub indica que la pull request está lista; fusionar su head verificado respetando la protección de rama.',
45582
45582
  'mergeQueue.decision.autoMergeAvailable': 'GitHub hará merge cuando terminen los checks y las revisiones.',
45583
45583
  'mergeQueue.decision.createOnlyRequired': 'El auto-merge del repositorio no está disponible; se requiere el merge de una persona mantenedora.',
45584
45584
  });
@@ -50328,7 +50328,7 @@ class DeploymentOrchestrationRuntime {
50328
50328
  }
50329
50329
  async applyAutoMerge(context, operation, pullRequest, capabilities) {
50330
50330
  if (operation.prMode === "auto" && capabilities.immediatelyMergeable) {
50331
- await this.dependencies.pullRequests.mergePullRequest(pullRequest.number);
50331
+ await this.dependencies.pullRequests.mergePullRequest(pullRequest.number, pullRequest.headSha);
50332
50332
  return;
50333
50333
  }
50334
50334
  if (!pullRequest.autoMergeEnabled) {
@@ -71651,12 +71651,13 @@ class GithubManagedPullRequestRepository {
71651
71651
  throw new Error("GitHub did not confirm that the pull request entered the merge queue.");
71652
71652
  }
71653
71653
  }
71654
- async mergePullRequest(owner, repository, pullRequest, token) {
71654
+ async mergePullRequest(owner, repository, pullRequest, expectedHeadSha, token) {
71655
71655
  const { data } = await this.clientProvider.getClient(token).rest.pulls.merge({
71656
71656
  owner,
71657
71657
  repo: repository,
71658
71658
  pull_number: pullRequest,
71659
71659
  merge_method: "merge",
71660
+ sha: expectedHeadSha,
71660
71661
  });
71661
71662
  if (!data.merged || !data.sha)
71662
71663
  throw new Error(data.message ?? `Pull request #${pullRequest} was not merged.`);
@@ -71681,6 +71682,43 @@ function mapPullRequest(value, owner, repository) {
71681
71682
  }
71682
71683
 
71683
71684
 
71685
+ /***/ }),
71686
+
71687
+ /***/ 33371:
71688
+ /***/ ((__unused_webpack_module, exports) => {
71689
+
71690
+ "use strict";
71691
+
71692
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
71693
+ exports.observePullRequestReadiness = observePullRequestReadiness;
71694
+ async function observePullRequestReadiness(client, owner, repository, pullRequest) {
71695
+ try {
71696
+ const response = await client.graphql(`query DeploymentPullRequestReadiness($owner: String!, $repository: String!, $pullRequest: Int!) {
71697
+ repository(owner: $owner, name: $repository) {
71698
+ pullRequest(number: $pullRequest) { headRefOid mergeable mergeStateStatus isDraft }
71699
+ }
71700
+ }`, { owner, repository, pullRequest });
71701
+ const state = response?.repository?.pullRequest;
71702
+ if (!state || typeof state.headRefOid !== "string" || !/^[a-f0-9]{40}$/i.test(state.headRefOid)
71703
+ || typeof state.mergeable !== "string" || !["MERGEABLE", "CONFLICTING", "UNKNOWN"].includes(state.mergeable)
71704
+ || typeof state.mergeStateStatus !== "string" || state.mergeStateStatus.length === 0
71705
+ || typeof state.isDraft !== "boolean") {
71706
+ return { problem: { area: "workflow-contract", message: "GitHub returned incomplete pull-request merge readiness." } };
71707
+ }
71708
+ return {
71709
+ value: {
71710
+ headSha: state.headRefOid,
71711
+ immediatelyMergeable: !state.isDraft && state.mergeable === "MERGEABLE"
71712
+ && ["CLEAN", "UNSTABLE"].includes(state.mergeStateStatus),
71713
+ },
71714
+ };
71715
+ }
71716
+ catch {
71717
+ return { problem: { area: "workflow-contract", message: "GitHub pull-request merge readiness could not be inspected." } };
71718
+ }
71719
+ }
71720
+
71721
+
71684
71722
  /***/ }),
71685
71723
 
71686
71724
  /***/ 55527:
@@ -71724,6 +71762,7 @@ var __importStar = (this && this.__importStar) || (function () {
71724
71762
  Object.defineProperty(exports, "__esModule", ({ value: true }));
71725
71763
  exports.GithubTargetMergeCapabilitiesInspector = void 0;
71726
71764
  const yaml = __importStar(__nccwpck_require__(783));
71765
+ const github_pull_request_readiness_query_1 = __nccwpck_require__(33371);
71727
71766
  class GithubTargetMergeCapabilitiesInspector {
71728
71767
  constructor(clientProvider) {
71729
71768
  this.clientProvider = clientProvider;
@@ -71736,8 +71775,8 @@ class GithubTargetMergeCapabilitiesInspector {
71736
71775
  observeEffectiveRules(client, owner, repository, targetBranch),
71737
71776
  observeBranchMergeQueue(client, owner, repository, targetBranch),
71738
71777
  options.pullRequest === undefined
71739
- ? Promise.resolve(undefined)
71740
- : client.rest.pulls.get({ owner, repo: repository, pull_number: options.pullRequest }).then(({ data }) => data),
71778
+ ? Promise.resolve({ value: undefined, problem: undefined })
71779
+ : (0, github_pull_request_readiness_query_1.observePullRequestReadiness)(client, owner, repository, options.pullRequest),
71741
71780
  ]);
71742
71781
  const candidateProblem = options.candidateHeadSha !== undefined && !/^[a-f0-9]{40}$/i.test(options.candidateHeadSha)
71743
71782
  ? {
@@ -71747,25 +71786,26 @@ class GithubTargetMergeCapabilitiesInspector {
71747
71786
  : undefined;
71748
71787
  const candidateHeadChangedProblem = options.candidateHeadSha !== undefined
71749
71788
  && candidateProblem === undefined
71750
- && pullRequestState !== undefined
71751
- && pullRequestState.head.sha !== options.candidateHeadSha
71789
+ && pullRequestState.value !== undefined
71790
+ && pullRequestState.value.headSha !== options.candidateHeadSha
71752
71791
  ? {
71753
71792
  area: "workflow-contract",
71754
71793
  message: "The pull request head changed during readiness inspection, so the observed workflow contract is stale.",
71755
71794
  }
71756
71795
  : undefined;
71757
71796
  const effective = normalizeEffectiveRules(classic.value, rulesets.value);
71758
- const problems = [classic.problem, rulesets.problem, queue.problem, candidateProblem, candidateHeadChangedProblem, ...effective.problems]
71797
+ const problems = [classic.problem, rulesets.problem, queue.problem, pullRequestState.problem,
71798
+ candidateProblem, candidateHeadChangedProblem, ...effective.problems]
71759
71799
  .filter((problem) => problem !== undefined);
71760
71800
  const mergeQueueRequired = queue.value === true || effective.mergeQueueRequired;
71761
- const candidateHeadSha = options.candidateHeadSha ?? pullRequestState?.head.sha;
71801
+ const candidateHeadSha = options.candidateHeadSha ?? pullRequestState.value?.headSha;
71762
71802
  const producerInspection = mergeQueueRequired
71763
71803
  ? await inspectMergeQueueProducers(client, owner, repository, repositoryData.id, targetBranch, candidateHeadSha, effective.requiredChecks, effective.requiredWorkflows)
71764
71804
  : { producers: [], problems: [] };
71765
71805
  return {
71766
71806
  autoMergeAllowed: repositoryData.allow_auto_merge === true,
71767
71807
  mergeQueueRequired,
71768
- immediatelyMergeable: pullRequestState?.mergeable === true && pullRequestState.mergeable_state === "clean",
71808
+ immediatelyMergeable: problems.length === 0 && pullRequestState.value?.immediatelyMergeable === true,
71769
71809
  requiresStrictStatusChecks: effective.requiresStrictStatusChecks,
71770
71810
  mergeQueueProducers: producerInspection.producers,
71771
71811
  mergeQueueObservationProblems: [...problems, ...producerInspection.problems],
@@ -84833,7 +84873,7 @@ function bindManagedPullRequests(port, binding) {
84833
84873
  enableAutoMerge: (pullRequestNodeId) => port.enableAutoMerge(binding.owner, binding.repository, pullRequestNodeId, binding.token),
84834
84874
  isPullRequestQueued: (pullRequestNodeId) => port.isPullRequestQueued(binding.owner, binding.repository, pullRequestNodeId, binding.token),
84835
84875
  enqueuePullRequest: (pullRequestNodeId, expectedHeadSha) => port.enqueuePullRequest(binding.owner, binding.repository, pullRequestNodeId, expectedHeadSha, binding.token),
84836
- mergePullRequest: (pullRequest) => port.mergePullRequest(binding.owner, binding.repository, pullRequest, binding.token),
84876
+ mergePullRequest: (pullRequest, expectedHeadSha) => port.mergePullRequest(binding.owner, binding.repository, pullRequest, expectedHeadSha, binding.token),
84837
84877
  });
84838
84878
  }
84839
84879
  function bindDeploymentTargetRules(port, binding) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vypdev/copilot",
3
- "version": "3.5.0",
3
+ "version": "3.5.2",
4
4
  "packageManager": "pnpm@10.12.4",
5
5
  "pnpm": {
6
6
  "overrides": {