github-issue-tower-defence-management 2.6.0 → 2.7.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 (96) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +0 -2
  3. package/bin/adapter/entry-points/cli/index.js +0 -5
  4. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  5. package/bin/adapter/entry-points/cli/projectConfig.js +0 -3
  6. package/bin/adapter/entry-points/cli/projectConfig.js.map +1 -1
  7. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +1 -3
  8. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  9. package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js +2 -1
  10. package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js.map +1 -1
  11. package/bin/adapter/repositories/GitHubIssueCheckpointRepository.js +37 -0
  12. package/bin/adapter/repositories/GitHubIssueCheckpointRepository.js.map +1 -0
  13. package/bin/domain/usecases/CheckIssueReviewReadinessUseCase.js +4 -2
  14. package/bin/domain/usecases/CheckIssueReviewReadinessUseCase.js.map +1 -1
  15. package/bin/domain/usecases/HandleScheduledEventUseCase.js +1 -6
  16. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  17. package/bin/domain/usecases/IssueRejectionEvaluator.js +0 -23
  18. package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -1
  19. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +39 -69
  20. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
  21. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +3 -2
  22. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
  23. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js +0 -43
  24. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js.map +1 -1
  25. package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js +10 -2
  26. package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js.map +1 -1
  27. package/bin/domain/usecases/adapter-interfaces/IssueCheckpointRepository.js +3 -0
  28. package/bin/domain/usecases/adapter-interfaces/IssueCheckpointRepository.js.map +1 -0
  29. package/bin/domain/usecases/autoStatusCheckComments.js +1 -11
  30. package/bin/domain/usecases/autoStatusCheckComments.js.map +1 -1
  31. package/bin/domain/usecases/extractNextStepAgentFromComments.js +14 -0
  32. package/bin/domain/usecases/extractNextStepAgentFromComments.js.map +1 -0
  33. package/bin/domain/usecases/triagerAgentName.js +7 -0
  34. package/bin/domain/usecases/triagerAgentName.js.map +1 -0
  35. package/package.json +1 -1
  36. package/src/adapter/entry-points/cli/index.test.ts +0 -2
  37. package/src/adapter/entry-points/cli/index.ts +0 -9
  38. package/src/adapter/entry-points/cli/projectConfig.ts +0 -8
  39. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -7
  40. package/src/adapter/entry-points/handlers/tokenExhaustionHandover.ts +2 -0
  41. package/src/adapter/repositories/GitHubIssueCheckpointRepository.test.ts +51 -0
  42. package/src/adapter/repositories/GitHubIssueCheckpointRepository.ts +47 -0
  43. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.test.ts +26 -4
  44. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.ts +5 -3
  45. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +0 -28
  46. package/src/domain/usecases/HandleScheduledEventUseCase.ts +0 -6
  47. package/src/domain/usecases/IssueRejectionEvaluator.test.ts +0 -119
  48. package/src/domain/usecases/IssueRejectionEvaluator.ts +0 -21
  49. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +185 -327
  50. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +68 -138
  51. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +4 -4
  52. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +11 -5
  53. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +0 -313
  54. package/src/domain/usecases/RevertOrphanedPreparationUseCase.ts +1 -102
  55. package/src/domain/usecases/TokenExhaustionHandoverUseCase.test.ts +87 -3
  56. package/src/domain/usecases/TokenExhaustionHandoverUseCase.ts +14 -1
  57. package/src/domain/usecases/adapter-interfaces/IssueCheckpointRepository.ts +3 -0
  58. package/src/domain/usecases/autoStatusCheckComments.ts +0 -17
  59. package/src/domain/usecases/extractNextStepAgentFromComments.ts +13 -0
  60. package/src/domain/usecases/isHumanComment.test.ts +0 -13
  61. package/src/domain/usecases/triagerAgentName.ts +4 -0
  62. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  63. package/types/adapter/entry-points/cli/projectConfig.d.ts +0 -1
  64. package/types/adapter/entry-points/cli/projectConfig.d.ts.map +1 -1
  65. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  66. package/types/adapter/entry-points/handlers/tokenExhaustionHandover.d.ts.map +1 -1
  67. package/types/adapter/repositories/GitHubIssueCheckpointRepository.d.ts +8 -0
  68. package/types/adapter/repositories/GitHubIssueCheckpointRepository.d.ts.map +1 -0
  69. package/types/domain/usecases/CheckIssueReviewReadinessUseCase.d.ts.map +1 -1
  70. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +1 -3
  71. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  72. package/types/domain/usecases/IssueRejectionEvaluator.d.ts +0 -1
  73. package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -1
  74. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts +0 -1
  75. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
  76. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
  77. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts +0 -1
  78. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts.map +1 -1
  79. package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts +3 -1
  80. package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts.map +1 -1
  81. package/types/domain/usecases/adapter-interfaces/IssueCheckpointRepository.d.ts +4 -0
  82. package/types/domain/usecases/adapter-interfaces/IssueCheckpointRepository.d.ts.map +1 -0
  83. package/types/domain/usecases/autoStatusCheckComments.d.ts +0 -4
  84. package/types/domain/usecases/autoStatusCheckComments.d.ts.map +1 -1
  85. package/types/domain/usecases/extractNextStepAgentFromComments.d.ts +5 -0
  86. package/types/domain/usecases/extractNextStepAgentFromComments.d.ts.map +1 -0
  87. package/types/domain/usecases/triagerAgentName.d.ts +3 -0
  88. package/types/domain/usecases/triagerAgentName.d.ts.map +1 -0
  89. package/src/domain/usecases/TriagerApprovalDispatchUseCase.test.ts +0 -1051
  90. package/src/domain/usecases/TriagerApprovalDispatchUseCase.ts +0 -274
  91. package/src/domain/usecases/awaitingOwnerApprovalMessage.ts +0 -5
  92. package/src/domain/usecases/isPullRequestDeclaredUnnecessary.test.ts +0 -162
  93. package/src/domain/usecases/isPullRequestDeclaredUnnecessary.ts +0 -29
  94. package/src/domain/usecases/isWaitingForOwnerApproval.test.ts +0 -91
  95. package/src/domain/usecases/isWaitingForOwnerApproval.ts +0 -17
  96. package/src/domain/usecases/returnedToAwaitingWorkspaceMessage.ts +0 -5
@@ -11,11 +11,12 @@ exports.TOKEN_EXHAUSTION_SEVEN_DAY_FREE_THRESHOLD = 0.05;
11
11
  exports.TOKEN_EXHAUSTION_FIVE_HOUR_WARNING_FREE_THRESHOLD = 0.25;
12
12
  exports.TOKEN_EXHAUSTION_SEVEN_DAY_WARNING_FREE_THRESHOLD = 0.15;
13
13
  class TokenExhaustionHandoverUseCase {
14
- constructor(handoverSessionRepository, snapshotRepository, tmuxSessionRepository, processSignalRepository) {
14
+ constructor(handoverSessionRepository, snapshotRepository, tmuxSessionRepository, processSignalRepository, issueCheckpointRepository) {
15
15
  this.handoverSessionRepository = handoverSessionRepository;
16
16
  this.snapshotRepository = snapshotRepository;
17
17
  this.tmuxSessionRepository = tmuxSessionRepository;
18
18
  this.processSignalRepository = processSignalRepository;
19
+ this.issueCheckpointRepository = issueCheckpointRepository;
19
20
  this.run = async (input) => {
20
21
  const nowEpochSeconds = Math.floor(input.now.getTime() / 1000);
21
22
  const sessions = this.handoverSessionRepository.listHandoverSessions();
@@ -130,7 +131,13 @@ class TokenExhaustionHandoverUseCase {
130
131
  };
131
132
  this.sendHandover = async (session, input) => {
132
133
  if (session.kind === 'implSubagent') {
133
- this.processSignalRepository.terminateProcess(session.pid);
134
+ if (session.issueUrl !== null) {
135
+ await this.issueCheckpointRepository.postCheckpoint(session.issueUrl);
136
+ }
137
+ else {
138
+ console.log(`Token exhaustion handover: sending SIGTERM to impl subagent pid=${session.pid} (no issue URL, cannot post checkpoint)`);
139
+ this.processSignalRepository.terminateProcess(session.pid);
140
+ }
134
141
  return;
135
142
  }
136
143
  if (session.sessionName === null) {
@@ -143,6 +150,7 @@ class TokenExhaustionHandoverUseCase {
143
150
  };
144
151
  this.forceKill = async (session, entry) => {
145
152
  if (session.kind === 'implSubagent') {
153
+ this.processSignalRepository.terminateProcess(entry.pid);
146
154
  this.processSignalRepository.killProcess(entry.pid);
147
155
  return;
148
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TokenExhaustionHandoverUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TokenExhaustionHandoverUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IssueCheckpointRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IssueCheckpointRepository.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/IssueCheckpointRepository.ts"],"names":[],"mappings":""}
@@ -1,15 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dropTrailingAutoStatusCheckComments = exports.AUTO_STATUS_CHECK_MESSAGE_HEAD = void 0;
3
+ exports.AUTO_STATUS_CHECK_MESSAGE_HEAD = void 0;
4
4
  exports.AUTO_STATUS_CHECK_MESSAGE_HEAD = 'Auto Status Check:';
5
- const dropTrailingAutoStatusCheckComments = (comments, isTrustedAuthor) => {
6
- let endIndex = comments.length;
7
- while (endIndex > 0 &&
8
- isTrustedAuthor(comments[endIndex - 1].author) &&
9
- comments[endIndex - 1].content.startsWith(exports.AUTO_STATUS_CHECK_MESSAGE_HEAD)) {
10
- endIndex -= 1;
11
- }
12
- return comments.slice(0, endIndex);
13
- };
14
- exports.dropTrailingAutoStatusCheckComments = dropTrailingAutoStatusCheckComments;
15
5
  //# sourceMappingURL=autoStatusCheckComments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autoStatusCheckComments.js","sourceRoot":"","sources":["../../../src/domain/usecases/autoStatusCheckComments.ts"],"names":[],"mappings":";;;AAAa,QAAA,8BAA8B,GAAG,oBAAoB,CAAC;AAE5D,MAAM,mCAAmC,GAAG,CAGjD,QAAa,EACb,eAA4C,EACvC,EAAE;IACP,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,OACE,QAAQ,GAAG,CAAC;QACZ,eAAe,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,sCAA8B,CAAC,EACzE,CAAC;QACD,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC,CAAC;AAfW,QAAA,mCAAmC,uCAe9C"}
1
+ {"version":3,"file":"autoStatusCheckComments.js","sourceRoot":"","sources":["../../../src/domain/usecases/autoStatusCheckComments.ts"],"names":[],"mappings":";;;AAAa,QAAA,8BAA8B,GAAG,oBAAoB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractNextStepAgentFromComments = void 0;
4
+ const extractNextStepAgent_1 = require("./extractNextStepAgent");
5
+ const findLastAgentReport_1 = require("./findLastAgentReport");
6
+ const extractNextStepAgentFromComments = (comments, isTrustedAuthor) => {
7
+ const lastAgentReport = (0, findLastAgentReport_1.findLastAgentReport)(comments, isTrustedAuthor);
8
+ if (!lastAgentReport) {
9
+ return null;
10
+ }
11
+ return (0, extractNextStepAgent_1.extractNextStepAgent)(lastAgentReport.content);
12
+ };
13
+ exports.extractNextStepAgentFromComments = extractNextStepAgentFromComments;
14
+ //# sourceMappingURL=extractNextStepAgentFromComments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractNextStepAgentFromComments.js","sourceRoot":"","sources":["../../../src/domain/usecases/extractNextStepAgentFromComments.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAC9D,+DAA4D;AAErD,MAAM,gCAAgC,GAAG,CAC9C,QAA+C,EAC/C,eAA4C,EAC7B,EAAE;IACjB,MAAM,eAAe,GAAG,IAAA,yCAAmB,EAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACvE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,2CAAoB,EAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACvD,CAAC,CAAC;AATW,QAAA,gCAAgC,oCAS3C"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTriagerAgentName = exports.TRIAGER_AGENT_NAME = void 0;
4
+ exports.TRIAGER_AGENT_NAME = 'triager';
5
+ const isTriagerAgentName = (agentName) => agentName !== null && agentName.trim().toLowerCase() === exports.TRIAGER_AGENT_NAME;
6
+ exports.isTriagerAgentName = isTriagerAgentName;
7
+ //# sourceMappingURL=triagerAgentName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triagerAgentName.js","sourceRoot":"","sources":["../../../src/domain/usecases/triagerAgentName.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG,SAAS,CAAC;AAErC,MAAM,kBAAkB,GAAG,CAAC,SAAwB,EAAW,EAAE,CACtE,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,0BAAkB,CAAC;AADjE,QAAA,kBAAkB,sBAC+C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -1527,7 +1527,6 @@ mysteryKey: 'value'
1527
1527
  manager: 'test-manager',
1528
1528
  developerAgentName: null,
1529
1529
  deferPreparation: null,
1530
- ownerApprovalTimeoutCycles: 12,
1531
1530
  });
1532
1531
  });
1533
1532
 
@@ -1572,7 +1571,6 @@ mysteryKey: 'value'
1572
1571
  manager: 'test-manager',
1573
1572
  developerAgentName: null,
1574
1573
  deferPreparation: null,
1575
- ownerApprovalTimeoutCycles: 12,
1576
1574
  });
1577
1575
  });
1578
1576
 
@@ -122,7 +122,6 @@ type NotifyFinishedOptions = {
122
122
  missingAgentName?: string;
123
123
  sessionErrorLine?: string;
124
124
  deferPreparation?: boolean;
125
- ownerApprovalTimeoutCycles?: string;
126
125
  };
127
126
 
128
127
  type CheckIssueReviewReadinessOptions = {
@@ -484,7 +483,6 @@ program
484
483
  labelsAsLlmAgentName: config.labelsAsLlmAgentName ?? null,
485
484
  labelsNotRequiringPullRequest:
486
485
  config.labelsNotRequiringPullRequest ?? null,
487
- ownerApprovalTimeoutCycles: config.ownerApprovalTimeoutCycles ?? 12,
488
486
  });
489
487
  }
490
488
 
@@ -585,10 +583,6 @@ program
585
583
  '--deferPreparation',
586
584
  'Defer the item via the Reactivation Trigger fields (sets nextActionDate to tomorrow) without creating any issue; use for transient upstream failures',
587
585
  )
588
- .option(
589
- '--ownerApprovalTimeoutCycles <count>',
590
- 'Number of owner-approval wait cycles before escalating to Failed Preparation (default: 12)',
591
- )
592
586
  .action(async (options: NotifyFinishedOptions) => {
593
587
  const token = process.env.GH_TOKEN;
594
588
  if (!token) {
@@ -730,9 +724,6 @@ program
730
724
  manager: config.manager ?? null,
731
725
  developerAgentName: config.developerAgentName ?? null,
732
726
  deferPreparation: options.deferPreparation ?? null,
733
- ownerApprovalTimeoutCycles: options.ownerApprovalTimeoutCycles
734
- ? Number(options.ownerApprovalTimeoutCycles)
735
- : (config.ownerApprovalTimeoutCycles ?? 12),
736
727
  });
737
728
  });
738
729
 
@@ -32,7 +32,6 @@ export type ConfigFile = {
32
32
  consoleProjects?: Record<string, string>;
33
33
  consoleGithubTokenFileDir?: string;
34
34
  disks?: DiskConfig[];
35
- ownerApprovalTimeoutCycles?: number;
36
35
  errorReportingRepository?: string;
37
36
  };
38
37
 
@@ -209,10 +208,6 @@ export const loadConfigFile = (configFilePath: string): ConfigFile => {
209
208
  'consoleGithubTokenFileDir',
210
209
  ),
211
210
  disks: getDisksValue(parsed, 'disks'),
212
- ownerApprovalTimeoutCycles: getNumberValue(
213
- parsed,
214
- 'ownerApprovalTimeoutCycles',
215
- ),
216
211
  errorReportingRepository: getStringValue(
217
212
  parsed,
218
213
  'errorReportingRepository',
@@ -410,9 +405,6 @@ export const mergeConfigs = (
410
405
  cliOverrides.consoleGithubTokenFileDir ??
411
406
  configFile.consoleGithubTokenFileDir,
412
407
  disks: cliOverrides.disks ?? configFile.disks,
413
- ownerApprovalTimeoutCycles:
414
- cliOverrides.ownerApprovalTimeoutCycles ??
415
- configFile.ownerApprovalTimeoutCycles,
416
408
  errorReportingRepository:
417
409
  readmeOverrides.errorReportingRepository ??
418
410
  cliOverrides.errorReportingRepository ??
@@ -74,7 +74,6 @@ import { ProxyRateLimitCacheRepository } from '../../repositories/ProxyRateLimit
74
74
  import { UpdateRateLimitCacheUseCase } from '../../../domain/usecases/UpdateRateLimitCacheUseCase';
75
75
  import { RevertOrphanedPreparationUseCase } from '../../../domain/usecases/RevertOrphanedPreparationUseCase';
76
76
  import { RevertNotReadyReviewQueueIssueUseCase } from '../../../domain/usecases/RevertNotReadyReviewQueueIssueUseCase';
77
- import { TriagerApprovalDispatchUseCase } from '../../../domain/usecases/TriagerApprovalDispatchUseCase';
78
77
  import { AgentDesignationLabelAdoptUseCase } from '../../../domain/usecases/AgentDesignationLabelAdoptUseCase';
79
78
  import { GitHubIssueCommentRepository } from '../../repositories/GitHubIssueCommentRepository';
80
79
  import { ProjectRequiredFieldCreateUseCase } from '../../../domain/usecases/ProjectRequiredFieldCreateUseCase';
@@ -528,11 +527,6 @@ export class HandleScheduledEventUseCaseHandler {
528
527
  issueRepository,
529
528
  issueCommentRepository,
530
529
  );
531
- const triagerApprovalDispatchUseCase = new TriagerApprovalDispatchUseCase(
532
- projectRepository,
533
- issueRepository,
534
- issueCommentRepository,
535
- );
536
530
  const agentDesignationLabelAdoptUseCase =
537
531
  new AgentDesignationLabelAdoptUseCase(projectRepository, issueRepository);
538
532
 
@@ -575,7 +569,6 @@ export class HandleScheduledEventUseCaseHandler {
575
569
  revertOrphanedPreparationUseCase,
576
570
  conflictedIssueRevertUseCase,
577
571
  revertNotReadyReviewQueueIssueUseCase,
578
- triagerApprovalDispatchUseCase,
579
572
  agentDesignationLabelAdoptUseCase,
580
573
  updateRateLimitCacheUseCase,
581
574
  dailySecurityScanUseCase,
@@ -5,6 +5,7 @@ import {
5
5
  DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE_BARE_NAME_LEADER,
6
6
  DEFAULT_TOKEN_EXHAUSTION_GRACE_PERIOD_SECONDS,
7
7
  } from '../../../domain/usecases/TokenExhaustionHandoverUseCase';
8
+ import { GitHubIssueCheckpointRepository } from '../../repositories/GitHubIssueCheckpointRepository';
8
9
  import { NodeTmuxSessionRepository } from '../../repositories/NodeTmuxSessionRepository';
9
10
  import { RateLimitSnapshotRepository } from '../../repositories/RateLimitSnapshotRepository';
10
11
  import { ProcClaudeHandoverSessionRepository } from '../../repositories/ProcClaudeHandoverSessionRepository';
@@ -60,6 +61,7 @@ export const handleTokenExhaustionHandover = async (
60
61
  snapshotRepository,
61
62
  new NodeTmuxSessionRepository(localCommandRunner),
62
63
  new NodeProcessSignalRepository(),
64
+ new GitHubIssueCheckpointRepository(process.env.GH_TOKEN ?? ''),
63
65
  );
64
66
 
65
67
  const result = await useCase.run({
@@ -0,0 +1,51 @@
1
+ import { GitHubIssueCheckpointRepository } from './GitHubIssueCheckpointRepository';
2
+
3
+ const VALID_URL = 'https://github.com/owner/repo/issues/42';
4
+ const EXPECTED_API_URL =
5
+ 'https://api.github.com/repos/owner/repo/issues/42/comments';
6
+ const EXPECTED_BODY = JSON.stringify({
7
+ body: 'From: :robot: preparation-daemon (-)\n\n```json\n{"pullRequestRequired": false}\n```\n\nThis implementation session was interrupted by the preparation daemon due to token near exhaustion. The task will be re-dispatched.',
8
+ });
9
+
10
+ describe('GitHubIssueCheckpointRepository', () => {
11
+ let repository: GitHubIssueCheckpointRepository;
12
+
13
+ beforeEach(() => {
14
+ jest.restoreAllMocks();
15
+ repository = new GitHubIssueCheckpointRepository('test-token');
16
+ });
17
+
18
+ it('posts to the correct GitHub API URL with correct headers and body', async () => {
19
+ const fetchSpy = jest
20
+ .spyOn(global, 'fetch')
21
+ .mockResolvedValue(new Response('{}', { status: 201 }));
22
+
23
+ await repository.postCheckpoint(VALID_URL);
24
+
25
+ expect(fetchSpy).toHaveBeenCalledWith(EXPECTED_API_URL, {
26
+ method: 'POST',
27
+ headers: {
28
+ Authorization: 'Bearer test-token',
29
+ Accept: 'application/vnd.github+json',
30
+ 'Content-Type': 'application/json',
31
+ },
32
+ body: EXPECTED_BODY,
33
+ });
34
+ });
35
+
36
+ it('throws when the response is not 2xx', async () => {
37
+ jest
38
+ .spyOn(global, 'fetch')
39
+ .mockResolvedValue(
40
+ new Response('Forbidden', { status: 403, statusText: 'Forbidden' }),
41
+ );
42
+
43
+ await expect(repository.postCheckpoint(VALID_URL)).rejects.toThrow('403');
44
+ });
45
+
46
+ it('throws when the URL does not match the expected GitHub issue pattern', async () => {
47
+ await expect(
48
+ repository.postCheckpoint('https://example.com/not-an-issue'),
49
+ ).rejects.toThrow('Invalid GitHub issue URL');
50
+ });
51
+ });
@@ -0,0 +1,47 @@
1
+ import { IssueCheckpointRepository } from '../../domain/usecases/adapter-interfaces/IssueCheckpointRepository';
2
+
3
+ const CHECKPOINT_COMMENT_BODY =
4
+ 'From: :robot: preparation-daemon (-)\n\n```json\n{"pullRequestRequired": false}\n```\n\nThis implementation session was interrupted by the preparation daemon due to token near exhaustion. The task will be re-dispatched.';
5
+
6
+ export class GitHubIssueCheckpointRepository implements IssueCheckpointRepository {
7
+ constructor(private readonly ghToken: string) {}
8
+
9
+ postCheckpoint = async (issueUrl: string): Promise<void> => {
10
+ const { owner, repo, issueNumber } = this.parseIssueUrl(issueUrl);
11
+
12
+ const response = await fetch(
13
+ `https://api.github.com/repos/${owner}/${repo}/issues/${issueNumber}/comments`,
14
+ {
15
+ method: 'POST',
16
+ headers: {
17
+ Authorization: `Bearer ${this.ghToken}`,
18
+ Accept: 'application/vnd.github+json',
19
+ 'Content-Type': 'application/json',
20
+ },
21
+ body: JSON.stringify({ body: CHECKPOINT_COMMENT_BODY }),
22
+ },
23
+ );
24
+
25
+ if (!response.ok) {
26
+ throw new Error(
27
+ `Failed to post checkpoint comment to ${issueUrl}: ${response.status} ${response.statusText}`,
28
+ );
29
+ }
30
+ };
31
+
32
+ private parseIssueUrl = (
33
+ issueUrl: string,
34
+ ): { owner: string; repo: string; issueNumber: number } => {
35
+ const match = issueUrl.match(
36
+ /github\.com\/([^/]+)\/([^/]+)\/(issues|pull)\/(\d+)/,
37
+ );
38
+ if (!match) {
39
+ throw new Error(`Invalid GitHub issue URL: ${issueUrl}`);
40
+ }
41
+ return {
42
+ owner: match[1],
43
+ repo: match[2],
44
+ issueNumber: parseInt(match[4], 10),
45
+ };
46
+ };
47
+ }
@@ -212,13 +212,13 @@ describe('CheckIssueReviewReadinessUseCase', () => {
212
212
  });
213
213
  });
214
214
 
215
- it('should return reviewReady=true when the last report declares pullRequestRequired as false and no related PR exists', async () => {
215
+ it('should return reviewReady=true when the last report designates the triager and no related PR exists', async () => {
216
216
  const issue = createMockIssue();
217
217
  mockIssueRepository.getIssueByUrl.mockResolvedValue(issue);
218
218
  mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
219
219
  createMockComment({
220
220
  content:
221
- 'From: :robot: Agent report\n```json\n{"pullRequestRequired": false}\n```',
221
+ 'From: :robot: Agent report\n```json\n{"nextStepAgent": "triager"}\n```',
222
222
  }),
223
223
  ]);
224
224
  mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
@@ -232,13 +232,35 @@ describe('CheckIssueReviewReadinessUseCase', () => {
232
232
  expect(result.reviewReady).toBe(true);
233
233
  });
234
234
 
235
- it('should keep every rejection other than PULL_REQUEST_NOT_FOUND when the last report declares pullRequestRequired as false', async () => {
235
+ it('should keep rejecting a missing PR when the last report designates an agent other than the triager', async () => {
236
236
  const issue = createMockIssue();
237
237
  mockIssueRepository.getIssueByUrl.mockResolvedValue(issue);
238
238
  mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
239
239
  createMockComment({
240
240
  content:
241
- 'From: :robot: Agent report\n```json\n{"pullRequestRequired": false}\n```',
241
+ 'From: :robot: Agent report\n```json\n{"nextStepAgent": "developer"}\n```',
242
+ }),
243
+ ]);
244
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
245
+
246
+ const result = await useCase.run({
247
+ issueUrl: 'https://github.com/user/repo/issues/1',
248
+ });
249
+
250
+ expect(result.reviewReady).toBe(false);
251
+ expect(result.rejections).toContainEqual({
252
+ type: 'PULL_REQUEST_NOT_FOUND',
253
+ detail: 'PULL_REQUEST_NOT_FOUND',
254
+ });
255
+ });
256
+
257
+ it('should keep every rejection other than PULL_REQUEST_NOT_FOUND when the last report designates the triager', async () => {
258
+ const issue = createMockIssue();
259
+ mockIssueRepository.getIssueByUrl.mockResolvedValue(issue);
260
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
261
+ createMockComment({
262
+ content:
263
+ 'From: :robot: Agent report\n```json\n{"nextStepAgent": "triager"}\n```',
242
264
  }),
243
265
  ]);
244
266
  mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
@@ -5,10 +5,11 @@ import {
5
5
  PrRejectedReasonType,
6
6
  } from './IssueRejectionEvaluator';
7
7
  import { resolveLabelsNotRequiringPullRequest } from './resolveLabelsNotRequiringPullRequest';
8
- import { isPullRequestDeclaredUnnecessary } from './isPullRequestDeclaredUnnecessary';
9
8
  import { normalizeReportBody } from './normalizeReportBody';
10
9
  import { isAgentReportBody } from './isAgentReportBody';
11
10
  import { isAuthorAuthorizedForAutoStatusCheck } from './isAuthorAuthorizedForAutoStatusCheck';
11
+ import { extractNextStepAgentFromComments } from './extractNextStepAgentFromComments';
12
+ import { isTriagerAgentName } from './triagerAgentName';
12
13
 
13
14
  type RejectedReasonType =
14
15
  | 'ISSUE_NOT_FOUND'
@@ -94,10 +95,11 @@ export class CheckIssueReviewReadinessUseCase {
94
95
  { developerAgentName: params.developerAgentName },
95
96
  );
96
97
 
97
- const requiredPrRejections = isPullRequestDeclaredUnnecessary(
98
+ const nextStepAgent = extractNextStepAgentFromComments(
98
99
  comments,
99
100
  isTrustedAuthor,
100
- )
101
+ );
102
+ const requiredPrRejections = isTriagerAgentName(nextStepAgent)
101
103
  ? prRejections.filter(
102
104
  (rejection) => rejection.type !== 'PULL_REQUEST_NOT_FOUND',
103
105
  )
@@ -25,7 +25,6 @@ import { StartPreparationUseCase } from './StartPreparationUseCase';
25
25
  import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
26
26
  import { ConflictedIssueRevertUseCase } from './ConflictedIssueRevertUseCase';
27
27
  import { RevertNotReadyReviewQueueIssueUseCase } from './RevertNotReadyReviewQueueIssueUseCase';
28
- import { TriagerApprovalDispatchUseCase } from './TriagerApprovalDispatchUseCase';
29
28
  import { AgentDesignationLabelAdoptUseCase } from './AgentDesignationLabelAdoptUseCase';
30
29
  import { ProjectRequiredFieldCreateUseCase } from './ProjectRequiredFieldCreateUseCase';
31
30
  import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
@@ -129,8 +128,6 @@ describe('HandleScheduledEventUseCase', () => {
129
128
  mock<ConflictedIssueRevertUseCase>();
130
129
  const mockRevertNotReadyReviewQueueIssueUseCase =
131
130
  mock<RevertNotReadyReviewQueueIssueUseCase>();
132
- const mockTriagerApprovalDispatchUseCase =
133
- mock<TriagerApprovalDispatchUseCase>();
134
131
  const mockAgentDesignationLabelAdoptUseCase =
135
132
  mock<AgentDesignationLabelAdoptUseCase>();
136
133
  const mockUpdateRateLimitCacheUseCase = mock<UpdateRateLimitCacheUseCase>();
@@ -165,7 +162,6 @@ describe('HandleScheduledEventUseCase', () => {
165
162
  mockRevertOrphanedPreparationUseCase,
166
163
  mockConflictedIssueRevertUseCase,
167
164
  mockRevertNotReadyReviewQueueIssueUseCase,
168
- mockTriagerApprovalDispatchUseCase,
169
165
  mockAgentDesignationLabelAdoptUseCase,
170
166
  mockUpdateRateLimitCacheUseCase,
171
167
  mockDailySecurityScanUseCase,
@@ -282,29 +278,6 @@ describe('HandleScheduledEventUseCase', () => {
282
278
  });
283
279
  });
284
280
 
285
- it('should call TriagerApprovalDispatchUseCase with project URL', async () => {
286
- const input = {
287
- projectName: 'test-project',
288
- org: 'test-org',
289
- projectUrl: 'https://github.com/test-org/test-project',
290
- manager: 'test-manager',
291
- workingReport: {
292
- repo: 'test-repo',
293
- members: ['member1'],
294
- spreadsheetUrl: 'https://docs.google.com/spreadsheets/test',
295
- },
296
- urlOfStoryView: 'https://github.com/test-org/test-project/issues',
297
- disabled: false,
298
- };
299
-
300
- await useCase.run(input);
301
- expect(mockTriagerApprovalDispatchUseCase.run).toHaveBeenCalledWith(
302
- expect.objectContaining({
303
- projectUrl: 'https://github.com/test-org/test-project',
304
- }),
305
- );
306
- });
307
-
308
281
  it('should return null and skip all processing when disabled is true', async () => {
309
282
  const input = {
310
283
  projectName: 'test-project',
@@ -1827,7 +1800,6 @@ describe('HandleScheduledEventUseCase', () => {
1827
1800
  mock<RevertOrphanedPreparationUseCase>(),
1828
1801
  mock<ConflictedIssueRevertUseCase>(),
1829
1802
  mock<RevertNotReadyReviewQueueIssueUseCase>(),
1830
- mock<TriagerApprovalDispatchUseCase>(),
1831
1803
  mock<AgentDesignationLabelAdoptUseCase>(),
1832
1804
  null,
1833
1805
  null,
@@ -28,7 +28,6 @@ import {
28
28
  import { AgentDesignationLabelAdoptUseCase } from './AgentDesignationLabelAdoptUseCase';
29
29
  import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
30
30
  import { RevertNotReadyReviewQueueIssueUseCase } from './RevertNotReadyReviewQueueIssueUseCase';
31
- import { TriagerApprovalDispatchUseCase } from './TriagerApprovalDispatchUseCase';
32
31
  import { isRecord } from './isRecord';
33
32
  import { resolveLabelsAsLlmAgentName } from './resolveLabelsAsLlmAgentName';
34
33
  import { resolveAllowedIssueAuthors } from './resolveAllowedIssueAuthors';
@@ -139,7 +138,6 @@ export class HandleScheduledEventUseCase {
139
138
  readonly revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase,
140
139
  readonly conflictedIssueRevertUseCase: ConflictedIssueRevertUseCase,
141
140
  readonly revertNotReadyReviewQueueIssueUseCase: RevertNotReadyReviewQueueIssueUseCase,
142
- readonly triagerApprovalDispatchUseCase: TriagerApprovalDispatchUseCase,
143
141
  readonly agentDesignationLabelAdoptUseCase: AgentDesignationLabelAdoptUseCase,
144
142
  readonly updateRateLimitCacheUseCase: UpdateRateLimitCacheUseCase | null,
145
143
  readonly dailySecurityScanUseCase: DailySecurityScanUseCase | null,
@@ -452,10 +450,6 @@ ${JSON.stringify(e)}
452
450
  allowedIssueAuthors,
453
451
  developerAgentName: input.developerAgentName,
454
452
  });
455
- await this.triagerApprovalDispatchUseCase.run({
456
- projectUrl: input.projectUrl,
457
- allowedIssueAuthors,
458
- });
459
453
  if (this.dailySecurityScanUseCase !== null && input.dailySecurityScan) {
460
454
  await this.dailySecurityScanUseCase.run({
461
455
  targetDates: targetDateTimes,