github-issue-tower-defence-management 1.123.1 → 1.123.3
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.
- package/CHANGELOG.md +14 -0
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js +15 -1
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js.map +1 -1
- package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +29 -2
- package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +135 -0
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +22 -4
- package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +190 -0
- package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +40 -10
- package/types/adapter/repositories/TranscriptSessionSubAgentActivityRepository.d.ts.map +1 -1
- package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [1.123.3](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.123.2...v1.123.3) (2026-07-17)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **revert-review-queue:** contain archived project item update failures so an archived item does not abort the schedule cycle ([#1193](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1193)) ([6034127](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/6034127c4aeff0cebfc8a4a914eff36781e878f4))
|
|
7
|
+
|
|
8
|
+
## [1.123.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.123.1...v1.123.2) (2026-07-17)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **silent-monitor:** treat a pending nested Agent/Task tool_use tail as waiting on an external process ([#1190](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1190)) ([feaf6c0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/feaf6c0b63920f4d36cfa85e4c9a5c88cd131ec2))
|
|
14
|
+
|
|
1
15
|
## [1.123.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.123.0...v1.123.1) (2026-07-17)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -65,6 +65,13 @@ const readContentBlocks = (message) => {
|
|
|
65
65
|
// tool_result is recorded, the sub-agent has delivered its output and is
|
|
66
66
|
// genuinely complete even though the transcript tail is a user entry.
|
|
67
67
|
const COMPLETION_TOOL_NAMES = new Set(['StructuredOutput']);
|
|
68
|
+
// Tools that delegate work to a nested child sub-agent. A parent whose
|
|
69
|
+
// transcript tail is a pending tool_use of one of these tools is waiting for
|
|
70
|
+
// the child to run (possibly queued), produces no transcript writes of its
|
|
71
|
+
// own, and therefore looks "silent" by mtime alone. Such a parent is treated
|
|
72
|
+
// as waiting on an external process so it is excluded from both the
|
|
73
|
+
// sub-agent-idle and sub-agent-long-running selections.
|
|
74
|
+
const DELEGATION_TOOL_NAMES = new Set(['Agent', 'Task']);
|
|
68
75
|
const entryToolUseNames = (message) => readContentBlocks(message)
|
|
69
76
|
.filter((block) => readString(block, 'type') === 'tool_use')
|
|
70
77
|
.map((block) => readString(block, 'name'))
|
|
@@ -138,6 +145,7 @@ const parseTranscript = (content) => {
|
|
|
138
145
|
let firstEntryEpochSeconds = null;
|
|
139
146
|
let lastEntryIndicatesCompletion = false;
|
|
140
147
|
let pendingToolCommands = [];
|
|
148
|
+
let pendingDelegationToolUse = false;
|
|
141
149
|
let precedingAssistantToolUseNames = [];
|
|
142
150
|
for (const line of content.split('\n')) {
|
|
143
151
|
const trimmed = line.trim();
|
|
@@ -163,6 +171,10 @@ const parseTranscript = (content) => {
|
|
|
163
171
|
pendingToolCommands = entryPendingToolCommands(parsed);
|
|
164
172
|
if (readString(parsed, 'type') === 'assistant') {
|
|
165
173
|
precedingAssistantToolUseNames = entryToolUseNames(parsed.message);
|
|
174
|
+
pendingDelegationToolUse = precedingAssistantToolUseNames.some((name) => DELEGATION_TOOL_NAMES.has(name));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
pendingDelegationToolUse = false;
|
|
166
178
|
}
|
|
167
179
|
}
|
|
168
180
|
}
|
|
@@ -170,6 +182,7 @@ const parseTranscript = (content) => {
|
|
|
170
182
|
firstEntryEpochSeconds,
|
|
171
183
|
lastEntryIndicatesCompletion,
|
|
172
184
|
pendingToolCommands,
|
|
185
|
+
pendingDelegationToolUse,
|
|
173
186
|
};
|
|
174
187
|
};
|
|
175
188
|
const clampToZero = (value) => (value > 0 ? value : 0);
|
|
@@ -246,7 +259,8 @@ class TranscriptSessionSubAgentActivityRepository {
|
|
|
246
259
|
label: fileName.replace(/\.jsonl$/, ''),
|
|
247
260
|
silentSeconds,
|
|
248
261
|
runningSeconds,
|
|
249
|
-
waitingOnExternalProcess:
|
|
262
|
+
waitingOnExternalProcess: transcript.pendingDelegationToolUse ||
|
|
263
|
+
(await this.hasLiveMatchingProcess(transcript.pendingToolCommands, loadNormalizedProcessCommandLines)),
|
|
250
264
|
};
|
|
251
265
|
};
|
|
252
266
|
this.hasLiveMatchingProcess = async (pendingToolCommands, loadNormalizedProcessCommandLines) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAM7B,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAE9C,MAAM,UAAU,GAAG,CACjB,KAA8B,EAC9B,GAAW,EACI,EAAE;IACjB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,SAAwB,EAAiB,EAAE;IACpE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,oCAAoC,GAAG,EAAE,CAAC;AAEzC,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAU,EAAE,CAClE,OAAO;KACJ,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;KACpB,IAAI,EAAE;KACN,KAAK,CAAC,CAAC,EAAE,oCAAoC,CAAC,CAAC;AAJvC,QAAA,wBAAwB,4BAIe;
|
|
1
|
+
{"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,15 @@ exports.RevertNotReadyReviewQueueIssueUseCase = void 0;
|
|
|
4
4
|
const IssueRejectionEvaluator_1 = require("./IssueRejectionEvaluator");
|
|
5
5
|
const ChangeTargetPullRequestApprover_1 = require("./ChangeTargetPullRequestApprover");
|
|
6
6
|
const WorkflowStatus_1 = require("../entities/WorkflowStatus");
|
|
7
|
+
// GitHub rejects field mutations against archived project items with
|
|
8
|
+
// "The item is archived and cannot be updated". Such a failure is specific to
|
|
9
|
+
// the single item being reverted, so it must not abort the whole schedule
|
|
10
|
+
// cycle (the same containment policy as the transient GraphQL error handling
|
|
11
|
+
// and the findRelatedOpenPRs NOT_FOUND handling).
|
|
12
|
+
const isArchivedProjectItemError = (error) => {
|
|
13
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
14
|
+
return message.toLowerCase().includes('archived');
|
|
15
|
+
};
|
|
7
16
|
const isAuthorAuthorizedForAutoStatusCheck = (author, allowedIssueAuthors) => {
|
|
8
17
|
if (allowedIssueAuthors === null || allowedIssueAuthors === undefined) {
|
|
9
18
|
return false;
|
|
@@ -47,7 +56,16 @@ class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
47
56
|
relatedOpenPrUrls: relatedOpenPrUrlsByIssueUrl.get(issue.url) ?? [],
|
|
48
57
|
});
|
|
49
58
|
if (rejections.length > 0) {
|
|
50
|
-
|
|
59
|
+
try {
|
|
60
|
+
await this.issueRepository.updateStatus(project, issue, awaitingWorkspaceStatusOption.id);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (isArchivedProjectItemError(error)) {
|
|
64
|
+
console.warn(`RevertNotReadyReviewQueueIssueUseCase: project item is archived and cannot be updated, skipping revert. issueUrl: ${issue.url}`);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
51
69
|
await this.issueCommentRepository.createComment(issue, `Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`);
|
|
52
70
|
continue;
|
|
53
71
|
}
|
|
@@ -65,7 +83,16 @@ class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
65
83
|
}
|
|
66
84
|
const { rejections } = await this.issueRejectionEvaluator.evaluate(pullRequest, params.labelsAsLlmAgentName ?? []);
|
|
67
85
|
if (rejections.length > 0) {
|
|
68
|
-
|
|
86
|
+
try {
|
|
87
|
+
await this.issueRepository.updateStatus(project, pullRequest, awaitingWorkspaceStatusOption.id);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (isArchivedProjectItemError(error)) {
|
|
91
|
+
console.warn(`RevertNotReadyReviewQueueIssueUseCase: project item is archived and cannot be updated, skipping revert. prUrl: ${pullRequest.url}`);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
69
96
|
if (projectStory) {
|
|
70
97
|
await this.issueRepository.updateStory({ ...project, story: projectStory }, pullRequest, projectStory.workflowManagementStory.id);
|
|
71
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -770,6 +770,141 @@ describe('TranscriptSessionSubAgentActivityRepository', () => {
|
|
|
770
770
|
]);
|
|
771
771
|
});
|
|
772
772
|
|
|
773
|
+
describe('delegation-wait classification from a pending nested agent tool call', () => {
|
|
774
|
+
const pendingDelegationEntries = (
|
|
775
|
+
startTimestamp: string,
|
|
776
|
+
toolName: string,
|
|
777
|
+
): object[] => [
|
|
778
|
+
{ type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
|
|
779
|
+
{
|
|
780
|
+
type: 'assistant',
|
|
781
|
+
timestamp: startTimestamp,
|
|
782
|
+
message: {
|
|
783
|
+
role: 'assistant',
|
|
784
|
+
stop_reason: 'tool_use',
|
|
785
|
+
content: [
|
|
786
|
+
{
|
|
787
|
+
type: 'tool_use',
|
|
788
|
+
name: toolName,
|
|
789
|
+
input: { prompt: 'do the sub-task', subagent_type: 'impl' },
|
|
790
|
+
},
|
|
791
|
+
],
|
|
792
|
+
},
|
|
793
|
+
},
|
|
794
|
+
];
|
|
795
|
+
|
|
796
|
+
it.each(['Agent', 'Task'])(
|
|
797
|
+
'classifies a parent as waiting when its transcript tail is a pending %s tool call spawning a nested child',
|
|
798
|
+
async (toolName) => {
|
|
799
|
+
const sessionName = 'https_//github_com/owner/repo/issues/9';
|
|
800
|
+
writeAgentTranscript(
|
|
801
|
+
sessionName,
|
|
802
|
+
'delegating',
|
|
803
|
+
pendingDelegationEntries('2026-06-27T11:45:00.000Z', toolName),
|
|
804
|
+
nowEpochSeconds - 600,
|
|
805
|
+
);
|
|
806
|
+
const repository = new TranscriptSessionSubAgentActivityRepository(
|
|
807
|
+
createResolver(),
|
|
808
|
+
emptyProcessLister(),
|
|
809
|
+
now,
|
|
810
|
+
);
|
|
811
|
+
|
|
812
|
+
const result = await repository.listSubAgentActivitiesBySessionName(
|
|
813
|
+
[sessionName],
|
|
814
|
+
transcriptMapFor([sessionName]),
|
|
815
|
+
);
|
|
816
|
+
|
|
817
|
+
expect(result.get(sessionName)).toEqual([
|
|
818
|
+
{
|
|
819
|
+
label: 'agent-delegating',
|
|
820
|
+
silentSeconds: 600,
|
|
821
|
+
runningSeconds: 900,
|
|
822
|
+
waitingOnExternalProcess: true,
|
|
823
|
+
},
|
|
824
|
+
]);
|
|
825
|
+
},
|
|
826
|
+
);
|
|
827
|
+
|
|
828
|
+
it('stops classifying as waiting once the nested agent tool call has returned its tool result', async () => {
|
|
829
|
+
const sessionName = 'https_//github_com/owner/repo/issues/9';
|
|
830
|
+
const startTimestamp = '2026-06-27T11:45:00.000Z';
|
|
831
|
+
writeAgentTranscript(
|
|
832
|
+
sessionName,
|
|
833
|
+
'childdone',
|
|
834
|
+
[
|
|
835
|
+
...pendingDelegationEntries(startTimestamp, 'Agent'),
|
|
836
|
+
{
|
|
837
|
+
type: 'user',
|
|
838
|
+
timestamp: startTimestamp,
|
|
839
|
+
message: {
|
|
840
|
+
role: 'user',
|
|
841
|
+
content: [{ type: 'tool_result', content: 'child finished' }],
|
|
842
|
+
},
|
|
843
|
+
},
|
|
844
|
+
],
|
|
845
|
+
nowEpochSeconds - 600,
|
|
846
|
+
);
|
|
847
|
+
const repository = new TranscriptSessionSubAgentActivityRepository(
|
|
848
|
+
createResolver(),
|
|
849
|
+
emptyProcessLister(),
|
|
850
|
+
now,
|
|
851
|
+
);
|
|
852
|
+
|
|
853
|
+
const result = await repository.listSubAgentActivitiesBySessionName(
|
|
854
|
+
[sessionName],
|
|
855
|
+
transcriptMapFor([sessionName]),
|
|
856
|
+
);
|
|
857
|
+
|
|
858
|
+
expect(result.get(sessionName)?.[0]?.waitingOnExternalProcess).toBe(
|
|
859
|
+
false,
|
|
860
|
+
);
|
|
861
|
+
});
|
|
862
|
+
|
|
863
|
+
it('does not classify as waiting when a later pending Bash call follows an already-consumed nested agent call', async () => {
|
|
864
|
+
const sessionName = 'https_//github_com/owner/repo/issues/9';
|
|
865
|
+
const startTimestamp = '2026-06-27T11:45:00.000Z';
|
|
866
|
+
writeAgentTranscript(
|
|
867
|
+
sessionName,
|
|
868
|
+
'laterpending',
|
|
869
|
+
[
|
|
870
|
+
...pendingDelegationEntries(startTimestamp, 'Agent'),
|
|
871
|
+
{
|
|
872
|
+
type: 'user',
|
|
873
|
+
timestamp: startTimestamp,
|
|
874
|
+
message: {
|
|
875
|
+
role: 'user',
|
|
876
|
+
content: [{ type: 'tool_result', content: 'child finished' }],
|
|
877
|
+
},
|
|
878
|
+
},
|
|
879
|
+
{
|
|
880
|
+
type: 'assistant',
|
|
881
|
+
timestamp: startTimestamp,
|
|
882
|
+
message: {
|
|
883
|
+
role: 'assistant',
|
|
884
|
+
stop_reason: 'tool_use',
|
|
885
|
+
content: [{ type: 'tool_use', name: 'Bash', input: {} }],
|
|
886
|
+
},
|
|
887
|
+
},
|
|
888
|
+
],
|
|
889
|
+
nowEpochSeconds - 600,
|
|
890
|
+
);
|
|
891
|
+
const repository = new TranscriptSessionSubAgentActivityRepository(
|
|
892
|
+
createResolver(),
|
|
893
|
+
emptyProcessLister(),
|
|
894
|
+
now,
|
|
895
|
+
);
|
|
896
|
+
|
|
897
|
+
const result = await repository.listSubAgentActivitiesBySessionName(
|
|
898
|
+
[sessionName],
|
|
899
|
+
transcriptMapFor([sessionName]),
|
|
900
|
+
);
|
|
901
|
+
|
|
902
|
+
expect(result.get(sessionName)?.[0]?.waitingOnExternalProcess).toBe(
|
|
903
|
+
false,
|
|
904
|
+
);
|
|
905
|
+
});
|
|
906
|
+
});
|
|
907
|
+
|
|
773
908
|
describe('external-wait classification from the pending tool command', () => {
|
|
774
909
|
const CI_WATCH_COMMAND =
|
|
775
910
|
'gh pr checks 123 --watch -i 60 -R owner/repo 2>&1 | tail -5';
|
|
@@ -36,6 +36,7 @@ type ParsedTranscript = {
|
|
|
36
36
|
firstEntryEpochSeconds: number | null;
|
|
37
37
|
lastEntryIndicatesCompletion: boolean;
|
|
38
38
|
pendingToolCommands: string[];
|
|
39
|
+
pendingDelegationToolUse: boolean;
|
|
39
40
|
};
|
|
40
41
|
|
|
41
42
|
const readContentBlocks = (
|
|
@@ -53,6 +54,14 @@ const readContentBlocks = (
|
|
|
53
54
|
// genuinely complete even though the transcript tail is a user entry.
|
|
54
55
|
const COMPLETION_TOOL_NAMES = new Set(['StructuredOutput']);
|
|
55
56
|
|
|
57
|
+
// Tools that delegate work to a nested child sub-agent. A parent whose
|
|
58
|
+
// transcript tail is a pending tool_use of one of these tools is waiting for
|
|
59
|
+
// the child to run (possibly queued), produces no transcript writes of its
|
|
60
|
+
// own, and therefore looks "silent" by mtime alone. Such a parent is treated
|
|
61
|
+
// as waiting on an external process so it is excluded from both the
|
|
62
|
+
// sub-agent-idle and sub-agent-long-running selections.
|
|
63
|
+
const DELEGATION_TOOL_NAMES = new Set(['Agent', 'Task']);
|
|
64
|
+
|
|
56
65
|
const entryToolUseNames = (message: Record<string, unknown>): string[] =>
|
|
57
66
|
readContentBlocks(message)
|
|
58
67
|
.filter((block) => readString(block, 'type') === 'tool_use')
|
|
@@ -135,6 +144,7 @@ const parseTranscript = (content: string): ParsedTranscript => {
|
|
|
135
144
|
let firstEntryEpochSeconds: number | null = null;
|
|
136
145
|
let lastEntryIndicatesCompletion = false;
|
|
137
146
|
let pendingToolCommands: string[] = [];
|
|
147
|
+
let pendingDelegationToolUse = false;
|
|
138
148
|
let precedingAssistantToolUseNames: string[] = [];
|
|
139
149
|
for (const line of content.split('\n')) {
|
|
140
150
|
const trimmed = line.trim();
|
|
@@ -162,6 +172,11 @@ const parseTranscript = (content: string): ParsedTranscript => {
|
|
|
162
172
|
pendingToolCommands = entryPendingToolCommands(parsed);
|
|
163
173
|
if (readString(parsed, 'type') === 'assistant') {
|
|
164
174
|
precedingAssistantToolUseNames = entryToolUseNames(parsed.message);
|
|
175
|
+
pendingDelegationToolUse = precedingAssistantToolUseNames.some((name) =>
|
|
176
|
+
DELEGATION_TOOL_NAMES.has(name),
|
|
177
|
+
);
|
|
178
|
+
} else {
|
|
179
|
+
pendingDelegationToolUse = false;
|
|
165
180
|
}
|
|
166
181
|
}
|
|
167
182
|
}
|
|
@@ -169,6 +184,7 @@ const parseTranscript = (content: string): ParsedTranscript => {
|
|
|
169
184
|
firstEntryEpochSeconds,
|
|
170
185
|
lastEntryIndicatesCompletion,
|
|
171
186
|
pendingToolCommands,
|
|
187
|
+
pendingDelegationToolUse,
|
|
172
188
|
};
|
|
173
189
|
};
|
|
174
190
|
|
|
@@ -279,10 +295,12 @@ export class TranscriptSessionSubAgentActivityRepository implements SessionSubAg
|
|
|
279
295
|
label: fileName.replace(/\.jsonl$/, ''),
|
|
280
296
|
silentSeconds,
|
|
281
297
|
runningSeconds,
|
|
282
|
-
waitingOnExternalProcess:
|
|
283
|
-
transcript.
|
|
284
|
-
|
|
285
|
-
|
|
298
|
+
waitingOnExternalProcess:
|
|
299
|
+
transcript.pendingDelegationToolUse ||
|
|
300
|
+
(await this.hasLiveMatchingProcess(
|
|
301
|
+
transcript.pendingToolCommands,
|
|
302
|
+
loadNormalizedProcessCommandLines,
|
|
303
|
+
)),
|
|
286
304
|
};
|
|
287
305
|
};
|
|
288
306
|
|
|
@@ -1507,4 +1507,194 @@ describe('RevertNotReadyReviewQueueIssueUseCase', () => {
|
|
|
1507
1507
|
});
|
|
1508
1508
|
});
|
|
1509
1509
|
});
|
|
1510
|
+
|
|
1511
|
+
describe('archived project item containment', () => {
|
|
1512
|
+
let warnSpy: jest.SpyInstance;
|
|
1513
|
+
|
|
1514
|
+
beforeEach(() => {
|
|
1515
|
+
warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
|
|
1516
|
+
});
|
|
1517
|
+
|
|
1518
|
+
afterEach(() => {
|
|
1519
|
+
warnSpy.mockRestore();
|
|
1520
|
+
});
|
|
1521
|
+
|
|
1522
|
+
it('should skip an archived issue on updateStatus failure and continue with remaining issues', async () => {
|
|
1523
|
+
const archivedIssue = createMockIssue({
|
|
1524
|
+
number: 1,
|
|
1525
|
+
url: 'https://github.com/user/repo/issues/1',
|
|
1526
|
+
itemId: 'archived-item',
|
|
1527
|
+
status: 'Awaiting Quality Check',
|
|
1528
|
+
});
|
|
1529
|
+
const normalIssue = createMockIssue({
|
|
1530
|
+
number: 2,
|
|
1531
|
+
url: 'https://github.com/user/repo/issues/2',
|
|
1532
|
+
itemId: 'normal-item',
|
|
1533
|
+
status: 'Awaiting Quality Check',
|
|
1534
|
+
});
|
|
1535
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
1536
|
+
project: mockProject,
|
|
1537
|
+
issues: [archivedIssue, normalIssue],
|
|
1538
|
+
cacheUsed: false,
|
|
1539
|
+
});
|
|
1540
|
+
mockIssueRepository.updateStatus.mockImplementation(
|
|
1541
|
+
(_project: Project, issue: Issue) =>
|
|
1542
|
+
issue.url === archivedIssue.url
|
|
1543
|
+
? Promise.reject(
|
|
1544
|
+
new Error('The item is archived and cannot be updated'),
|
|
1545
|
+
)
|
|
1546
|
+
: Promise.resolve(undefined),
|
|
1547
|
+
);
|
|
1548
|
+
|
|
1549
|
+
await useCase.run({
|
|
1550
|
+
projectUrl: 'https://github.com/users/user/projects/1',
|
|
1551
|
+
allowedIssueAuthors: ['owner'],
|
|
1552
|
+
});
|
|
1553
|
+
|
|
1554
|
+
expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
|
|
1555
|
+
mockProject,
|
|
1556
|
+
archivedIssue,
|
|
1557
|
+
'awaiting-workspace-id',
|
|
1558
|
+
);
|
|
1559
|
+
expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
|
|
1560
|
+
mockProject,
|
|
1561
|
+
normalIssue,
|
|
1562
|
+
'awaiting-workspace-id',
|
|
1563
|
+
);
|
|
1564
|
+
expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalledWith(
|
|
1565
|
+
archivedIssue,
|
|
1566
|
+
expect.anything(),
|
|
1567
|
+
);
|
|
1568
|
+
expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
|
|
1569
|
+
normalIssue,
|
|
1570
|
+
expect.stringContaining('Auto Status Check: REJECTED'),
|
|
1571
|
+
);
|
|
1572
|
+
expect(warnSpy).toHaveBeenCalledWith(
|
|
1573
|
+
expect.stringContaining(archivedIssue.url),
|
|
1574
|
+
);
|
|
1575
|
+
});
|
|
1576
|
+
|
|
1577
|
+
it('should propagate a non-archived updateStatus error for issues unchanged', async () => {
|
|
1578
|
+
const issue = createMockIssue({
|
|
1579
|
+
status: 'Awaiting Quality Check',
|
|
1580
|
+
});
|
|
1581
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
1582
|
+
project: mockProject,
|
|
1583
|
+
issues: [issue],
|
|
1584
|
+
cacheUsed: false,
|
|
1585
|
+
});
|
|
1586
|
+
mockIssueRepository.updateStatus.mockRejectedValue(
|
|
1587
|
+
new Error('Something went wrong'),
|
|
1588
|
+
);
|
|
1589
|
+
|
|
1590
|
+
await expect(
|
|
1591
|
+
useCase.run({
|
|
1592
|
+
projectUrl: 'https://github.com/users/user/projects/1',
|
|
1593
|
+
allowedIssueAuthors: ['owner'],
|
|
1594
|
+
}),
|
|
1595
|
+
).rejects.toThrow('Something went wrong');
|
|
1596
|
+
|
|
1597
|
+
expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalled();
|
|
1598
|
+
});
|
|
1599
|
+
|
|
1600
|
+
it('should skip an archived Unread pull request on updateStatus failure and continue with remaining pull requests', async () => {
|
|
1601
|
+
const archivedPullRequest = createMockPullRequest({
|
|
1602
|
+
number: 1,
|
|
1603
|
+
url: 'https://github.com/user/repo/pull/1',
|
|
1604
|
+
itemId: 'archived-pr-item',
|
|
1605
|
+
status: 'Unread',
|
|
1606
|
+
});
|
|
1607
|
+
const normalPullRequest = createMockPullRequest({
|
|
1608
|
+
number: 2,
|
|
1609
|
+
url: 'https://github.com/user/repo/pull/2',
|
|
1610
|
+
itemId: 'normal-pr-item',
|
|
1611
|
+
status: 'Unread',
|
|
1612
|
+
});
|
|
1613
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
1614
|
+
project: mockProject,
|
|
1615
|
+
issues: [archivedPullRequest, normalPullRequest],
|
|
1616
|
+
cacheUsed: false,
|
|
1617
|
+
});
|
|
1618
|
+
mockIssueRepository.getOpenPullRequest.mockImplementation(
|
|
1619
|
+
(prUrl: string) =>
|
|
1620
|
+
Promise.resolve({
|
|
1621
|
+
...createReadyPr(prUrl),
|
|
1622
|
+
isConflicted: true,
|
|
1623
|
+
}),
|
|
1624
|
+
);
|
|
1625
|
+
mockIssueRepository.updateStatus.mockImplementation(
|
|
1626
|
+
(_project: Project, issue: Issue) =>
|
|
1627
|
+
issue.url === archivedPullRequest.url
|
|
1628
|
+
? Promise.reject(
|
|
1629
|
+
new Error('The item is archived and cannot be updated'),
|
|
1630
|
+
)
|
|
1631
|
+
: Promise.resolve(undefined),
|
|
1632
|
+
);
|
|
1633
|
+
|
|
1634
|
+
await useCase.run({
|
|
1635
|
+
projectUrl: 'https://github.com/users/user/projects/1',
|
|
1636
|
+
allowedIssueAuthors: ['owner'],
|
|
1637
|
+
});
|
|
1638
|
+
|
|
1639
|
+
expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
|
|
1640
|
+
mockProject,
|
|
1641
|
+
archivedPullRequest,
|
|
1642
|
+
'awaiting-workspace-id',
|
|
1643
|
+
);
|
|
1644
|
+
expect(mockIssueRepository.updateStory).not.toHaveBeenCalledWith(
|
|
1645
|
+
expect.anything(),
|
|
1646
|
+
archivedPullRequest,
|
|
1647
|
+
expect.anything(),
|
|
1648
|
+
);
|
|
1649
|
+
expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalledWith(
|
|
1650
|
+
archivedPullRequest,
|
|
1651
|
+
expect.anything(),
|
|
1652
|
+
);
|
|
1653
|
+
expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
|
|
1654
|
+
mockProject,
|
|
1655
|
+
normalPullRequest,
|
|
1656
|
+
'awaiting-workspace-id',
|
|
1657
|
+
);
|
|
1658
|
+
expect(mockIssueRepository.updateStory).toHaveBeenCalledWith(
|
|
1659
|
+
expect.objectContaining({ id: 'project-1' }),
|
|
1660
|
+
normalPullRequest,
|
|
1661
|
+
'workflow-management-story-id',
|
|
1662
|
+
);
|
|
1663
|
+
expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
|
|
1664
|
+
normalPullRequest,
|
|
1665
|
+
expect.stringContaining('Auto Status Check: REJECTED'),
|
|
1666
|
+
);
|
|
1667
|
+
expect(warnSpy).toHaveBeenCalledWith(
|
|
1668
|
+
expect.stringContaining(archivedPullRequest.url),
|
|
1669
|
+
);
|
|
1670
|
+
});
|
|
1671
|
+
|
|
1672
|
+
it('should propagate a non-archived updateStatus error for Unread pull requests unchanged', async () => {
|
|
1673
|
+
const pullRequest = createMockPullRequest({
|
|
1674
|
+
status: 'Unread',
|
|
1675
|
+
});
|
|
1676
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
1677
|
+
project: mockProject,
|
|
1678
|
+
issues: [pullRequest],
|
|
1679
|
+
cacheUsed: false,
|
|
1680
|
+
});
|
|
1681
|
+
mockIssueRepository.getOpenPullRequest.mockResolvedValue({
|
|
1682
|
+
...createReadyPr(),
|
|
1683
|
+
isConflicted: true,
|
|
1684
|
+
});
|
|
1685
|
+
mockIssueRepository.updateStatus.mockRejectedValue(
|
|
1686
|
+
new Error('Something went wrong'),
|
|
1687
|
+
);
|
|
1688
|
+
|
|
1689
|
+
await expect(
|
|
1690
|
+
useCase.run({
|
|
1691
|
+
projectUrl: 'https://github.com/users/user/projects/1',
|
|
1692
|
+
allowedIssueAuthors: ['owner'],
|
|
1693
|
+
}),
|
|
1694
|
+
).rejects.toThrow('Something went wrong');
|
|
1695
|
+
|
|
1696
|
+
expect(mockIssueRepository.updateStory).not.toHaveBeenCalled();
|
|
1697
|
+
expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalled();
|
|
1698
|
+
});
|
|
1699
|
+
});
|
|
1510
1700
|
});
|
|
@@ -10,6 +10,16 @@ import {
|
|
|
10
10
|
DEFAULT_STATUS_NAME,
|
|
11
11
|
} from '../entities/WorkflowStatus';
|
|
12
12
|
|
|
13
|
+
// GitHub rejects field mutations against archived project items with
|
|
14
|
+
// "The item is archived and cannot be updated". Such a failure is specific to
|
|
15
|
+
// the single item being reverted, so it must not abort the whole schedule
|
|
16
|
+
// cycle (the same containment policy as the transient GraphQL error handling
|
|
17
|
+
// and the findRelatedOpenPRs NOT_FOUND handling).
|
|
18
|
+
const isArchivedProjectItemError = (error: unknown): boolean => {
|
|
19
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
20
|
+
return message.toLowerCase().includes('archived');
|
|
21
|
+
};
|
|
22
|
+
|
|
13
23
|
const isAuthorAuthorizedForAutoStatusCheck = (
|
|
14
24
|
author: string,
|
|
15
25
|
allowedIssueAuthors: string[] | null | undefined,
|
|
@@ -113,11 +123,21 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
113
123
|
},
|
|
114
124
|
);
|
|
115
125
|
if (rejections.length > 0) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
126
|
+
try {
|
|
127
|
+
await this.issueRepository.updateStatus(
|
|
128
|
+
project,
|
|
129
|
+
issue,
|
|
130
|
+
awaitingWorkspaceStatusOption.id,
|
|
131
|
+
);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
if (isArchivedProjectItemError(error)) {
|
|
134
|
+
console.warn(
|
|
135
|
+
`RevertNotReadyReviewQueueIssueUseCase: project item is archived and cannot be updated, skipping revert. issueUrl: ${issue.url}`,
|
|
136
|
+
);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
121
141
|
await this.issueCommentRepository.createComment(
|
|
122
142
|
issue,
|
|
123
143
|
`Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`,
|
|
@@ -159,11 +179,21 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
159
179
|
params.labelsAsLlmAgentName ?? [],
|
|
160
180
|
);
|
|
161
181
|
if (rejections.length > 0) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
182
|
+
try {
|
|
183
|
+
await this.issueRepository.updateStatus(
|
|
184
|
+
project,
|
|
185
|
+
pullRequest,
|
|
186
|
+
awaitingWorkspaceStatusOption.id,
|
|
187
|
+
);
|
|
188
|
+
} catch (error) {
|
|
189
|
+
if (isArchivedProjectItemError(error)) {
|
|
190
|
+
console.warn(
|
|
191
|
+
`RevertNotReadyReviewQueueIssueUseCase: project item is archived and cannot be updated, skipping revert. prUrl: ${pullRequest.url}`,
|
|
192
|
+
);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
167
197
|
if (projectStory) {
|
|
168
198
|
await this.issueRepository.updateStory(
|
|
169
199
|
{ ...project, story: projectStory },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptSessionSubAgentActivityRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4EAA4E,CAAC;AAC/H,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAC;AACvG,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AAuBnI,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,MAIR,CAAC;
|
|
1
|
+
{"version":3,"file":"TranscriptSessionSubAgentActivityRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4EAA4E,CAAC;AAC/H,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAC;AACvG,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AAuBnI,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,MAIR,CAAC;AAgKpD,qBAAa,2CAA4C,YAAW,iCAAiC;IAEjG,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,iBAAiB,EAAE,mCAAmC,EACtD,aAAa,EAAE,qBAAqB,EACpC,GAAG,EAAE,IAAI;IAG5B,mCAAmC,GACjC,cAAc,MAAM,EAAE,EACtB,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAiCzC;IAEF,OAAO,CAAC,iBAAiB,CA6BvB;IAEF,OAAO,CAAC,UAAU,CAoChB;IAEF,OAAO,CAAC,sBAAsB,CAiB5B;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAgCrF,qBAAa,qCAAqC;IAK9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAWhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAnBzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAkC;gBAG/D,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,GAChC,oBAAoB,GACpB,iCAAiC,CACpC,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,eAAe,CAChB;IAQH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACvC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QACxD,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACvC,KAAG,OAAO,CAAC,IAAI,CAAC,CA0If;IAQF,OAAO,CAAC,gCAAgC,CAsBtC;CACH"}
|