github-issue-tower-defence-management 1.46.0 → 1.47.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # [1.47.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.46.0...v1.47.0) (2026-05-17)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **core:** remove startDaemon situation write with empty issue list ([fddc899](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/fddc899523fbd86b67002557c7bef0802a274352))
7
+
8
+
9
+ ### Features
10
+
11
+ * **core:** replace runtimeConfig dump with per-project situation JSON ([29ebdb5](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/29ebdb5401eb187142cb3653d336bf8e9748ddde))
12
+
1
13
  # [1.46.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.45.0...v1.46.0) (2026-05-17)
2
14
 
3
15
 
package/README.md CHANGED
@@ -232,6 +232,70 @@ For `startDaemon`, `schedule`, and `notifyFinishedIssuePreparation`, the GitHub
232
232
  - files:write
233
233
  - files:read
234
234
 
235
+ ## Per-Project Situation Snapshot
236
+
237
+ After each schedule cycle, TDPM writes a per-project situation snapshot to:
238
+
239
+ ```
240
+ ./tmp/cache/{projectName}/situation-{projectId}.json
241
+ ```
242
+
243
+ This file is written atomically (written to a `.tmp` file then renamed) so external readers never see a partial write.
244
+
245
+ ### JSON Shape
246
+
247
+ ```json
248
+ {
249
+ "capturedAt": "2025-01-01T00:00:00.000Z",
250
+ "config": {
251
+ "maximumPreparingIssuesCount": 6,
252
+ "utilizationPercentageThreshold": 90,
253
+ "allowIssueCacheMinutes": 0,
254
+ "thresholdForAutoReject": 3
255
+ },
256
+ "status": {
257
+ "awaitingQualityCheckImmediatelyActionable": 2,
258
+ "preparation": 4,
259
+ "awaitingWorkspaceImmediatelyActionable": 3,
260
+ "awaitingWorkspaceBlockedByDependency": 1
261
+ },
262
+ "processes": {
263
+ "runningPreparation": 4
264
+ },
265
+ "system": {
266
+ "memory": {
267
+ "usedPercent": 45.2,
268
+ "usedGib": 7.25,
269
+ "totalGib": 16.0
270
+ },
271
+ "swap": {
272
+ "usedPercent": 25.0,
273
+ "usedGib": 1.0,
274
+ "totalGib": 4.0
275
+ }
276
+ }
277
+ }
278
+ ```
279
+
280
+ ### Field Descriptions
281
+
282
+ - `capturedAt`: ISO 8601 timestamp when the snapshot was captured.
283
+ - `config.maximumPreparingIssuesCount`: Resolved maximum number of issues allowed in preparation status (`null` if unconfigured).
284
+ - `config.utilizationPercentageThreshold`: Resolved Claude utilization threshold percentage.
285
+ - `config.allowIssueCacheMinutes`: Resolved issue cache duration in minutes.
286
+ - `config.thresholdForAutoReject`: Resolved consecutive rejection count before auto-escalation.
287
+ - `status.awaitingQualityCheckImmediatelyActionable`: Count of issues in the awaiting quality check status with no dependency URL, next action date, or next action hour set.
288
+ - `status.preparation`: Count of issues currently in preparation status.
289
+ - `status.awaitingWorkspaceImmediatelyActionable`: Count of issues in awaiting workspace status with no dependency URL, next action date, or next action hour set.
290
+ - `status.awaitingWorkspaceBlockedByDependency`: Count of issues in awaiting workspace status that have a dependency URL set.
291
+ - `processes.runningPreparation`: Count of spawned preparation processes confirmed running via `preparationProcessCheckCommand`. `null` if `preparationProcessCheckCommand` is not configured.
292
+ - `system.memory.usedPercent`: Host memory usage as a percentage (MemTotal - MemAvailable / MemTotal × 100).
293
+ - `system.memory.usedGib` / `system.memory.totalGib`: Used and total host memory in GiB.
294
+ - `system.swap.usedPercent`: Host swap usage as a percentage.
295
+ - `system.swap.usedGib` / `system.swap.totalGib`: Used and total host swap in GiB.
296
+
297
+ System metrics are read from `/proc/meminfo` at snapshot write time.
298
+
235
299
  ## Contributing
236
300
 
237
301
  See [CONTRIBUTING.md](./CONTRIBUTING.md)
@@ -1,41 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
3
  Object.defineProperty(exports, "__esModule", { value: true });
37
4
  exports.program = exports.fetchProjectReadme = exports.mergeConfigs = exports.parseProjectReadmeConfig = exports.loadConfigFile = void 0;
38
- const fs = __importStar(require("fs"));
39
5
  const commander_1 = require("commander");
40
6
  const HandleScheduledEventUseCaseHandler_1 = require("../handlers/HandleScheduledEventUseCaseHandler");
41
7
  var projectConfig_1 = require("./projectConfig");
@@ -228,21 +194,6 @@ exports.program
228
194
  codexHomeCandidates,
229
195
  allowIssueCacheMinutes,
230
196
  });
231
- const projectId = await projectRepository.findProjectIdByUrl(projectUrl);
232
- if (projectId) {
233
- const runtimeConfig = {
234
- resolvedAt: new Date().toISOString(),
235
- maximumPreparingIssuesCount: maximumPreparingIssuesCount,
236
- utilizationPercentageThreshold: config.utilizationPercentageThreshold ?? 90,
237
- allowIssueCacheMinutes: allowIssueCacheMinutes,
238
- thresholdForAutoReject: config.thresholdForAutoReject ?? 3,
239
- };
240
- const finalPath = `${cachePath}/runtimeConfig-${projectId}.json`;
241
- const tmpPath = `${finalPath}.tmp`;
242
- fs.mkdirSync(cachePath, { recursive: true });
243
- fs.writeFileSync(tmpPath, JSON.stringify(runtimeConfig));
244
- fs.renameSync(tmpPath, finalPath);
245
- }
246
197
  });
247
198
  exports.program
248
199
  .command('notifyFinishedIssuePreparation')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,7 @@ const __typia_transform__validateReport = __importStar(require("typia/lib/intern
41
41
  const yaml_1 = __importDefault(require("yaml"));
42
42
  const typia_1 = __importDefault(require("typia"));
43
43
  const fs_1 = __importDefault(require("fs"));
44
+ const situationFileWriter_1 = require("./situationFileWriter");
44
45
  const projectConfig_1 = require("../cli/projectConfig");
45
46
  const SystemDateRepository_1 = require("../../repositories/SystemDateRepository");
46
47
  const LocalStorageRepository_1 = require("../../repositories/LocalStorageRepository");
@@ -459,19 +460,25 @@ class HandleScheduledEventUseCaseHandler {
459
460
  const handleScheduledEventUseCase = new HandleScheduledEventUseCase_1.HandleScheduledEventUseCase(actionAnnouncement, setWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase, analyzeProblemByIssueUseCase, analyzeStoriesUseCase, clearDependedIssueURLUseCase, createEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase, createNewStoryByLabel, assignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase, startPreparationUseCase, notifyFinishedIssuePreparationUseCase, revertOrphanedPreparationUseCase, systemDateRepository, googleSpreadsheetRepository, projectRepository, issueRepository);
460
461
  const result = await handleScheduledEventUseCase.run(mergedInput);
461
462
  if (result) {
462
- const projectId = result.project.id;
463
- const runtimeConfig = {
464
- resolvedAt: new Date().toISOString(),
465
- maximumPreparingIssuesCount: mergedInput.startPreparation?.maximumPreparingIssuesCount ?? null,
466
- utilizationPercentageThreshold: mergedInput.startPreparation?.utilizationPercentageThreshold ?? 90,
467
- allowIssueCacheMinutes: mergedInput.allowIssueCacheMinutes,
468
- thresholdForAutoReject: mergedInput.notifyFinishedPreparation?.thresholdForAutoReject ?? 3,
469
- };
470
- const finalPath = `${cachePath}/runtimeConfig-${projectId}.json`;
471
- const tmpPath = `${finalPath}.tmp`;
472
- fs_1.default.mkdirSync(cachePath, { recursive: true });
473
- fs_1.default.writeFileSync(tmpPath, JSON.stringify(runtimeConfig));
474
- fs_1.default.renameSync(tmpPath, finalPath);
463
+ await (0, situationFileWriter_1.writeSituationFile)({
464
+ cachePath,
465
+ projectId: result.project.id,
466
+ issues: result.issues,
467
+ statusNames: {
468
+ awaitingQualityCheckStatus: mergedInput.notifyFinishedPreparation?.awaitingQualityCheckStatus ??
469
+ null,
470
+ preparationStatus: mergedInput.startPreparation?.preparationStatus ?? null,
471
+ awaitingWorkspaceStatus: mergedInput.startPreparation?.awaitingWorkspaceStatus ?? null,
472
+ },
473
+ config: {
474
+ maximumPreparingIssuesCount: mergedInput.startPreparation?.maximumPreparingIssuesCount ?? null,
475
+ utilizationPercentageThreshold: mergedInput.startPreparation?.utilizationPercentageThreshold ?? 90,
476
+ allowIssueCacheMinutes: mergedInput.allowIssueCacheMinutes,
477
+ thresholdForAutoReject: mergedInput.notifyFinishedPreparation?.thresholdForAutoReject ?? 3,
478
+ },
479
+ preparationProcessCheckCommand: mergedInput.startPreparation?.preparationProcessCheckCommand ?? null,
480
+ localCommandRunner: nodeLocalCommandRunner,
481
+ });
475
482
  }
476
483
  return result;
477
484
  };
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.writeSituationFile = exports.parseMeminfo = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const parseMeminfo = (meminfo) => {
9
+ const getValue = (key) => {
10
+ const match = meminfo.match(new RegExp(`^${key}:\\s+(\\d+)`, 'm'));
11
+ return match ? parseInt(match[1], 10) : 0;
12
+ };
13
+ return {
14
+ memTotalKb: getValue('MemTotal'),
15
+ memAvailableKb: getValue('MemAvailable'),
16
+ swapTotalKb: getValue('SwapTotal'),
17
+ swapFreeKb: getValue('SwapFree'),
18
+ };
19
+ };
20
+ exports.parseMeminfo = parseMeminfo;
21
+ const kbToGib = (kb) => Math.round((kb / 1024 / 1024) * 100) / 100;
22
+ const toPercent = (used, total) => total > 0 ? Math.round((used / total) * 1000) / 10 : 0;
23
+ const isImmediatelyActionable = (issue) => issue.dependedIssueUrls.length === 0 &&
24
+ issue.nextActionDate === null &&
25
+ issue.nextActionHour === null;
26
+ const countRunningProcesses = async (preparationIssues, commandTemplate, localCommandRunner) => {
27
+ const resolvedTemplate = commandTemplate.replace('{URL}', '$1');
28
+ const checks = await Promise.all(preparationIssues.map(async (issue) => {
29
+ const { exitCode } = await localCommandRunner.runCommand('sh', [
30
+ '-c',
31
+ resolvedTemplate,
32
+ '--',
33
+ issue.url,
34
+ ]);
35
+ return exitCode === 0;
36
+ }));
37
+ return checks.filter(Boolean).length;
38
+ };
39
+ const writeSituationFile = async (params) => {
40
+ const { cachePath, projectId, issues, statusNames, config, preparationProcessCheckCommand, localCommandRunner, } = params;
41
+ const awaitingQualityCheckImmediatelyActionable = statusNames.awaitingQualityCheckStatus !== null
42
+ ? issues.filter((i) => i.status === statusNames.awaitingQualityCheckStatus &&
43
+ isImmediatelyActionable(i)).length
44
+ : 0;
45
+ const preparationIssues = statusNames.preparationStatus !== null
46
+ ? issues.filter((i) => i.status === statusNames.preparationStatus)
47
+ : [];
48
+ const awaitingWorkspaceIssues = statusNames.awaitingWorkspaceStatus !== null
49
+ ? issues.filter((i) => i.status === statusNames.awaitingWorkspaceStatus)
50
+ : [];
51
+ const awaitingWorkspaceImmediatelyActionable = awaitingWorkspaceIssues.filter(isImmediatelyActionable).length;
52
+ const awaitingWorkspaceBlockedByDependency = awaitingWorkspaceIssues.filter((i) => i.dependedIssueUrls.length > 0).length;
53
+ let runningPreparation = null;
54
+ if (preparationProcessCheckCommand &&
55
+ localCommandRunner &&
56
+ preparationIssues.length > 0) {
57
+ runningPreparation = await countRunningProcesses(preparationIssues, preparationProcessCheckCommand, localCommandRunner);
58
+ }
59
+ else if (preparationProcessCheckCommand && localCommandRunner) {
60
+ runningPreparation = 0;
61
+ }
62
+ const meminfo = fs_1.default.readFileSync('/proc/meminfo', 'utf-8');
63
+ const { memTotalKb, memAvailableKb, swapTotalKb, swapFreeKb } = (0, exports.parseMeminfo)(meminfo);
64
+ const memUsedKb = memTotalKb - memAvailableKb;
65
+ const swapUsedKb = swapTotalKb - swapFreeKb;
66
+ const situation = {
67
+ capturedAt: new Date().toISOString(),
68
+ config,
69
+ status: {
70
+ awaitingQualityCheckImmediatelyActionable,
71
+ preparation: preparationIssues.length,
72
+ awaitingWorkspaceImmediatelyActionable,
73
+ awaitingWorkspaceBlockedByDependency,
74
+ },
75
+ processes: {
76
+ runningPreparation,
77
+ },
78
+ system: {
79
+ memory: {
80
+ usedPercent: toPercent(memUsedKb, memTotalKb),
81
+ usedGib: kbToGib(memUsedKb),
82
+ totalGib: kbToGib(memTotalKb),
83
+ },
84
+ swap: {
85
+ usedPercent: toPercent(swapUsedKb, swapTotalKb),
86
+ usedGib: kbToGib(swapUsedKb),
87
+ totalGib: kbToGib(swapTotalKb),
88
+ },
89
+ },
90
+ };
91
+ const finalPath = `${cachePath}/situation-${projectId}.json`;
92
+ const tmpPath = `${finalPath}.tmp`;
93
+ fs_1.default.mkdirSync(cachePath, { recursive: true });
94
+ fs_1.default.writeFileSync(tmpPath, JSON.stringify(situation));
95
+ fs_1.default.renameSync(tmpPath, finalPath);
96
+ };
97
+ exports.writeSituationFile = writeSituationFile;
98
+ //# sourceMappingURL=situationFileWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"situationFileWriter.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/situationFileWriter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.46.0",
3
+ "version": "1.47.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -1068,52 +1068,6 @@ codexHomeCandidates:
1068
1068
  }),
1069
1069
  );
1070
1070
  });
1071
-
1072
- it('should write runtimeConfig-{projectId}.json atomically after useCase run', async () => {
1073
- const configWithNumericValues = {
1074
- ...defaultConfig,
1075
- maximumPreparingIssuesCount: 10,
1076
- utilizationPercentageThreshold: 97,
1077
- allowIssueCacheMinutes: 5,
1078
- thresholdForAutoReject: 30,
1079
- };
1080
- writeConfig(configWithNumericValues);
1081
-
1082
- const mockRun = jest.fn().mockResolvedValue(undefined);
1083
- const MockedStartPreparationUseCase = jest.mocked(
1084
- StartPreparationUseCase,
1085
- );
1086
- MockedStartPreparationUseCase.mockImplementation(function (
1087
- this: StartPreparationUseCase,
1088
- ) {
1089
- this.run = mockRun;
1090
- return this;
1091
- });
1092
-
1093
- await program.parseAsync([
1094
- 'node',
1095
- 'test',
1096
- 'startDaemon',
1097
- '--configFilePath',
1098
- configFilePath,
1099
- ]);
1100
-
1101
- const cacheDir = path.join(process.cwd(), 'tmp/cache/test-project');
1102
- const runtimeConfigPath = path.join(
1103
- cacheDir,
1104
- 'runtimeConfig-PVT_kwHOtest456.json',
1105
- );
1106
- expect(fs.existsSync(runtimeConfigPath)).toBe(true);
1107
- const written: unknown = JSON.parse(
1108
- fs.readFileSync(runtimeConfigPath, 'utf-8'),
1109
- );
1110
- expect(written).toMatchObject({
1111
- maximumPreparingIssuesCount: 10,
1112
- utilizationPercentageThreshold: 97,
1113
- allowIssueCacheMinutes: 5,
1114
- thresholdForAutoReject: 30,
1115
- });
1116
- });
1117
1071
  });
1118
1072
 
1119
1073
  describe('notifyFinishedIssuePreparation', () => {
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import * as fs from 'fs';
3
2
  import { Command } from 'commander';
4
3
  import { HandleScheduledEventUseCaseHandler } from '../handlers/HandleScheduledEventUseCaseHandler';
5
4
  export {
@@ -342,23 +341,6 @@ program
342
341
  codexHomeCandidates,
343
342
  allowIssueCacheMinutes,
344
343
  });
345
-
346
- const projectId = await projectRepository.findProjectIdByUrl(projectUrl);
347
- if (projectId) {
348
- const runtimeConfig = {
349
- resolvedAt: new Date().toISOString(),
350
- maximumPreparingIssuesCount: maximumPreparingIssuesCount,
351
- utilizationPercentageThreshold:
352
- config.utilizationPercentageThreshold ?? 90,
353
- allowIssueCacheMinutes: allowIssueCacheMinutes,
354
- thresholdForAutoReject: config.thresholdForAutoReject ?? 3,
355
- };
356
- const finalPath = `${cachePath}/runtimeConfig-${projectId}.json`;
357
- const tmpPath = `${finalPath}.tmp`;
358
- fs.mkdirSync(cachePath, { recursive: true });
359
- fs.writeFileSync(tmpPath, JSON.stringify(runtimeConfig));
360
- fs.renameSync(tmpPath, finalPath);
361
- }
362
344
  });
363
345
 
364
346
  program
@@ -113,8 +113,12 @@ jest.mock('../../repositories/GitHubIssueCommentRepository', () => ({
113
113
  jest.mock('../../repositories/FetchWebhookRepository', () => ({
114
114
  FetchWebhookRepository: jest.fn().mockImplementation(() => ({})),
115
115
  }));
116
+ jest.mock('./situationFileWriter', () => ({
117
+ writeSituationFile: jest.fn().mockResolvedValue(undefined),
118
+ }));
116
119
 
117
120
  import { HandleScheduledEventUseCaseHandler } from './HandleScheduledEventUseCaseHandler';
121
+ import { writeSituationFile } from './situationFileWriter';
118
122
  import { GraphqlProjectRepository } from '../../repositories/GraphqlProjectRepository';
119
123
  import { ApiV3IssueRepository } from '../../repositories/issue/ApiV3IssueRepository';
120
124
  import { RestIssueRepository } from '../../repositories/issue/RestIssueRepository';
@@ -258,7 +262,7 @@ describe('HandleScheduledEventUseCaseHandler', () => {
258
262
  }
259
263
  });
260
264
 
261
- it('should write runtimeConfig-{projectId}.json atomically after successful run', async () => {
265
+ it('should write situation file after successful run with resolved config values', async () => {
262
266
  const configWithPreparation = {
263
267
  ...validConfig,
264
268
  allowIssueCacheMinutes: 5,
@@ -286,64 +290,38 @@ describe('HandleScheduledEventUseCaseHandler', () => {
286
290
  await handler.handle('config.yml', false);
287
291
 
288
292
  const expectedCachePath = `./tmp/cache/${validConfig.projectName}`;
289
- const expectedFinalPath = `${expectedCachePath}/runtimeConfig-PVT_kwHOtest123.json`;
290
- const expectedTmpPath = `${expectedFinalPath}.tmp`;
291
-
292
- expect(jest.mocked(fs.mkdirSync)).toHaveBeenCalledWith(expectedCachePath, {
293
- recursive: true,
294
- });
295
- expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
296
- expectedTmpPath,
297
- expect.stringContaining('"maximumPreparingIssuesCount":10'),
298
- );
299
- expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
300
- expectedTmpPath,
301
- expect.stringContaining('"utilizationPercentageThreshold":97'),
302
- );
303
- expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
304
- expectedTmpPath,
305
- expect.stringContaining('"allowIssueCacheMinutes":5'),
306
- );
307
- expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
308
- expectedTmpPath,
309
- expect.stringContaining('"thresholdForAutoReject":30'),
310
- );
311
- expect(jest.mocked(fs.renameSync)).toHaveBeenCalledWith(
312
- expectedTmpPath,
313
- expectedFinalPath,
293
+ const firstCallArg = jest.mocked(writeSituationFile).mock.calls[0][0];
294
+ expect(firstCallArg.cachePath).toBe(expectedCachePath);
295
+ expect(firstCallArg.projectId).toBe('PVT_kwHOtest123');
296
+ expect(firstCallArg.config.maximumPreparingIssuesCount).toBe(10);
297
+ expect(firstCallArg.config.utilizationPercentageThreshold).toBe(97);
298
+ expect(firstCallArg.config.allowIssueCacheMinutes).toBe(5);
299
+ expect(firstCallArg.config.thresholdForAutoReject).toBe(30);
300
+ expect(firstCallArg.statusNames.awaitingQualityCheckStatus).toBe(
301
+ 'Awaiting QC',
314
302
  );
303
+ expect(firstCallArg.statusNames.preparationStatus).toBe('Preparing');
304
+ expect(firstCallArg.statusNames.awaitingWorkspaceStatus).toBe('Awaiting');
315
305
  });
316
306
 
317
- it('should write runtimeConfig with numeric defaults when optional fields are absent', async () => {
307
+ it('should write situation file with numeric defaults when optional fields are absent', async () => {
318
308
  const handler = new HandleScheduledEventUseCaseHandler();
319
309
  await handler.handle('config.yml', false);
320
310
 
321
- const expectedCachePath = `./tmp/cache/${validConfig.projectName}`;
322
- const expectedTmpPath = `${expectedCachePath}/runtimeConfig-PVT_kwHOtest123.json.tmp`;
323
-
324
- expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
325
- expectedTmpPath,
326
- expect.stringContaining('"utilizationPercentageThreshold":90'),
327
- );
328
- expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
329
- expectedTmpPath,
330
- expect.stringContaining('"thresholdForAutoReject":3'),
331
- );
332
- expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
333
- expectedTmpPath,
334
- expect.stringContaining('"maximumPreparingIssuesCount":null'),
335
- );
311
+ const firstCallArg = jest.mocked(writeSituationFile).mock.calls[0][0];
312
+ expect(firstCallArg.config.utilizationPercentageThreshold).toBe(90);
313
+ expect(firstCallArg.config.thresholdForAutoReject).toBe(3);
314
+ expect(firstCallArg.config.maximumPreparingIssuesCount).toBeNull();
336
315
  });
337
316
 
338
- it('should not write runtimeConfig when run returns null', async () => {
317
+ it('should not write situation file when run returns null', async () => {
339
318
  mockRun.mockResolvedValueOnce(null);
340
319
  jest.mocked(fs.readFileSync).mockReturnValue(YAML.stringify(validConfig));
341
320
 
342
321
  const handler = new HandleScheduledEventUseCaseHandler();
343
322
  await handler.handle('config.yml', false);
344
323
 
345
- expect(jest.mocked(fs.writeFileSync)).not.toHaveBeenCalled();
346
- expect(jest.mocked(fs.renameSync)).not.toHaveBeenCalled();
324
+ expect(jest.mocked(writeSituationFile)).not.toHaveBeenCalled();
347
325
  });
348
326
 
349
327
  describe('README config overrides', () => {
@@ -1,6 +1,7 @@
1
1
  import YAML from 'yaml';
2
2
  import TYPIA from 'typia';
3
3
  import fs from 'fs';
4
+ import { writeSituationFile } from './situationFileWriter';
4
5
  import {
5
6
  fetchProjectReadme,
6
7
  parseProjectReadmeConfig,
@@ -291,22 +292,32 @@ export class HandleScheduledEventUseCaseHandler {
291
292
 
292
293
  const result = await handleScheduledEventUseCase.run(mergedInput);
293
294
  if (result) {
294
- const projectId = result.project.id;
295
- const runtimeConfig = {
296
- resolvedAt: new Date().toISOString(),
297
- maximumPreparingIssuesCount:
298
- mergedInput.startPreparation?.maximumPreparingIssuesCount ?? null,
299
- utilizationPercentageThreshold:
300
- mergedInput.startPreparation?.utilizationPercentageThreshold ?? 90,
301
- allowIssueCacheMinutes: mergedInput.allowIssueCacheMinutes,
302
- thresholdForAutoReject:
303
- mergedInput.notifyFinishedPreparation?.thresholdForAutoReject ?? 3,
304
- };
305
- const finalPath = `${cachePath}/runtimeConfig-${projectId}.json`;
306
- const tmpPath = `${finalPath}.tmp`;
307
- fs.mkdirSync(cachePath, { recursive: true });
308
- fs.writeFileSync(tmpPath, JSON.stringify(runtimeConfig));
309
- fs.renameSync(tmpPath, finalPath);
295
+ await writeSituationFile({
296
+ cachePath,
297
+ projectId: result.project.id,
298
+ issues: result.issues,
299
+ statusNames: {
300
+ awaitingQualityCheckStatus:
301
+ mergedInput.notifyFinishedPreparation?.awaitingQualityCheckStatus ??
302
+ null,
303
+ preparationStatus:
304
+ mergedInput.startPreparation?.preparationStatus ?? null,
305
+ awaitingWorkspaceStatus:
306
+ mergedInput.startPreparation?.awaitingWorkspaceStatus ?? null,
307
+ },
308
+ config: {
309
+ maximumPreparingIssuesCount:
310
+ mergedInput.startPreparation?.maximumPreparingIssuesCount ?? null,
311
+ utilizationPercentageThreshold:
312
+ mergedInput.startPreparation?.utilizationPercentageThreshold ?? 90,
313
+ allowIssueCacheMinutes: mergedInput.allowIssueCacheMinutes,
314
+ thresholdForAutoReject:
315
+ mergedInput.notifyFinishedPreparation?.thresholdForAutoReject ?? 3,
316
+ },
317
+ preparationProcessCheckCommand:
318
+ mergedInput.startPreparation?.preparationProcessCheckCommand ?? null,
319
+ localCommandRunner: nodeLocalCommandRunner,
320
+ });
310
321
  }
311
322
  return result;
312
323
  };
@@ -0,0 +1,417 @@
1
+ import fs from 'fs';
2
+ import type { Issue } from '../../../domain/entities/Issue';
3
+ import type { LocalCommandRunner } from '../../../domain/usecases/adapter-interfaces/LocalCommandRunner';
4
+ import { parseMeminfo, writeSituationFile } from './situationFileWriter';
5
+
6
+ jest.mock('fs');
7
+
8
+ const FIXTURE_MEMINFO = `MemTotal: 16384000 kB
9
+ MemFree: 4096000 kB
10
+ MemAvailable: 8192000 kB
11
+ Buffers: 512000 kB
12
+ Cached: 3584000 kB
13
+ SwapTotal: 4096000 kB
14
+ SwapFree: 3072000 kB
15
+ SwapCached: 0 kB
16
+ `;
17
+
18
+ const createIssue = (overrides: Partial<Issue> = {}): Issue => ({
19
+ nameWithOwner: 'owner/repo',
20
+ number: 1,
21
+ title: 'Test Issue',
22
+ state: 'OPEN',
23
+ status: null,
24
+ story: null,
25
+ nextActionDate: null,
26
+ nextActionHour: null,
27
+ estimationMinutes: null,
28
+ dependedIssueUrls: [],
29
+ completionDate50PercentConfidence: null,
30
+ url: 'https://github.com/owner/repo/issues/1',
31
+ assignees: [],
32
+ labels: [],
33
+ org: 'owner',
34
+ repo: 'repo',
35
+ body: '',
36
+ itemId: 'item-1',
37
+ isPr: false,
38
+ isInProgress: false,
39
+ isClosed: false,
40
+ createdAt: new Date('2025-01-01'),
41
+ author: 'user',
42
+ ...overrides,
43
+ });
44
+
45
+ const baseParams = {
46
+ cachePath: './tmp/cache/test-project',
47
+ projectId: 'PVT_kwHOtest999',
48
+ issues: [],
49
+ statusNames: {
50
+ awaitingQualityCheckStatus: 'Awaiting quality check',
51
+ preparationStatus: 'Preparation',
52
+ awaitingWorkspaceStatus: 'Awaiting workspace',
53
+ },
54
+ config: {
55
+ maximumPreparingIssuesCount: 6,
56
+ utilizationPercentageThreshold: 90,
57
+ allowIssueCacheMinutes: 5,
58
+ thresholdForAutoReject: 3,
59
+ },
60
+ };
61
+
62
+ beforeEach(() => {
63
+ jest.clearAllMocks();
64
+ jest.mocked(fs.readFileSync).mockReturnValue(FIXTURE_MEMINFO);
65
+ jest.mocked(fs.mkdirSync).mockReturnValue(undefined);
66
+ jest.mocked(fs.writeFileSync).mockReturnValue(undefined);
67
+ jest.mocked(fs.renameSync).mockReturnValue(undefined);
68
+ });
69
+
70
+ describe('parseMeminfo', () => {
71
+ it('parses MemTotal, MemAvailable, SwapTotal, SwapFree from /proc/meminfo fixture', () => {
72
+ const result = parseMeminfo(FIXTURE_MEMINFO);
73
+ expect(result.memTotalKb).toBe(16384000);
74
+ expect(result.memAvailableKb).toBe(8192000);
75
+ expect(result.swapTotalKb).toBe(4096000);
76
+ expect(result.swapFreeKb).toBe(3072000);
77
+ });
78
+
79
+ it('returns 0 for missing fields', () => {
80
+ const result = parseMeminfo('MemTotal: 8192000 kB\n');
81
+ expect(result.memAvailableKb).toBe(0);
82
+ expect(result.swapTotalKb).toBe(0);
83
+ expect(result.swapFreeKb).toBe(0);
84
+ });
85
+ });
86
+
87
+ describe('writeSituationFile', () => {
88
+ describe('status counts from issue fixtures', () => {
89
+ it('counts awaitingQualityCheckImmediatelyActionable correctly', async () => {
90
+ const issues = [
91
+ createIssue({
92
+ status: 'Awaiting quality check',
93
+ dependedIssueUrls: [],
94
+ nextActionDate: null,
95
+ nextActionHour: null,
96
+ }),
97
+ createIssue({
98
+ status: 'Awaiting quality check',
99
+ dependedIssueUrls: ['https://github.com/owner/repo/issues/2'],
100
+ nextActionDate: null,
101
+ nextActionHour: null,
102
+ }),
103
+ createIssue({
104
+ status: 'Awaiting quality check',
105
+ dependedIssueUrls: [],
106
+ nextActionDate: new Date('2025-06-01'),
107
+ nextActionHour: null,
108
+ }),
109
+ createIssue({ status: 'Awaiting quality check', nextActionHour: 9 }),
110
+ createIssue({ status: 'Preparation' }),
111
+ ];
112
+
113
+ await writeSituationFile({ ...baseParams, issues });
114
+
115
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
116
+ expect.any(String),
117
+ expect.stringContaining(
118
+ '"awaitingQualityCheckImmediatelyActionable":1',
119
+ ),
120
+ );
121
+ });
122
+
123
+ it('counts preparation total correctly', async () => {
124
+ const issues = [
125
+ createIssue({ status: 'Preparation' }),
126
+ createIssue({ status: 'Preparation' }),
127
+ createIssue({ status: 'Awaiting workspace' }),
128
+ ];
129
+
130
+ await writeSituationFile({ ...baseParams, issues });
131
+
132
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
133
+ expect.any(String),
134
+ expect.stringContaining('"preparation":2'),
135
+ );
136
+ });
137
+
138
+ it('counts awaitingWorkspaceImmediatelyActionable correctly', async () => {
139
+ const issues = [
140
+ createIssue({
141
+ status: 'Awaiting workspace',
142
+ dependedIssueUrls: [],
143
+ nextActionDate: null,
144
+ nextActionHour: null,
145
+ }),
146
+ createIssue({
147
+ status: 'Awaiting workspace',
148
+ dependedIssueUrls: [],
149
+ nextActionDate: null,
150
+ nextActionHour: null,
151
+ }),
152
+ createIssue({
153
+ status: 'Awaiting workspace',
154
+ dependedIssueUrls: ['https://github.com/owner/repo/issues/10'],
155
+ }),
156
+ createIssue({
157
+ status: 'Awaiting workspace',
158
+ dependedIssueUrls: [],
159
+ nextActionDate: new Date('2025-06-01'),
160
+ }),
161
+ ];
162
+
163
+ await writeSituationFile({ ...baseParams, issues });
164
+
165
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
166
+ expect.any(String),
167
+ expect.stringContaining('"awaitingWorkspaceImmediatelyActionable":2'),
168
+ );
169
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
170
+ expect.any(String),
171
+ expect.stringContaining('"awaitingWorkspaceBlockedByDependency":1'),
172
+ );
173
+ });
174
+
175
+ it('sets all counts to 0 when statusNames are null', async () => {
176
+ const issues = [
177
+ createIssue({ status: 'Preparation' }),
178
+ createIssue({ status: 'Awaiting workspace' }),
179
+ ];
180
+ const params = {
181
+ ...baseParams,
182
+ statusNames: {
183
+ awaitingQualityCheckStatus: null,
184
+ preparationStatus: null,
185
+ awaitingWorkspaceStatus: null,
186
+ },
187
+ issues,
188
+ };
189
+
190
+ await writeSituationFile(params);
191
+
192
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
193
+ expect.any(String),
194
+ expect.stringContaining(
195
+ '"awaitingQualityCheckImmediatelyActionable":0',
196
+ ),
197
+ );
198
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
199
+ expect.any(String),
200
+ expect.stringContaining('"preparation":0'),
201
+ );
202
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
203
+ expect.any(String),
204
+ expect.stringContaining('"awaitingWorkspaceImmediatelyActionable":0'),
205
+ );
206
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
207
+ expect.any(String),
208
+ expect.stringContaining('"awaitingWorkspaceBlockedByDependency":0'),
209
+ );
210
+ });
211
+ });
212
+
213
+ describe('system metrics from /proc/meminfo fixture', () => {
214
+ it('parses memory usedPercent from fixture', async () => {
215
+ await writeSituationFile(baseParams);
216
+
217
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
218
+ expect.any(String),
219
+ expect.stringContaining('"usedPercent":50'),
220
+ );
221
+ });
222
+
223
+ it('parses swap usedPercent from fixture', async () => {
224
+ await writeSituationFile(baseParams);
225
+
226
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
227
+ expect.any(String),
228
+ expect.stringContaining('"usedPercent":25'),
229
+ );
230
+ });
231
+
232
+ it('includes memory totalGib from fixture', async () => {
233
+ await writeSituationFile(baseParams);
234
+
235
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
236
+ expect.any(String),
237
+ expect.stringContaining('"system"'),
238
+ );
239
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
240
+ expect.any(String),
241
+ expect.stringContaining('"memory"'),
242
+ );
243
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
244
+ expect.any(String),
245
+ expect.stringContaining('"swap"'),
246
+ );
247
+ });
248
+
249
+ it('handles zero swap total without division by zero', async () => {
250
+ jest
251
+ .mocked(fs.readFileSync)
252
+ .mockReturnValue(
253
+ 'MemTotal: 8192000 kB\nMemAvailable: 4096000 kB\nSwapTotal: 0 kB\nSwapFree: 0 kB\n',
254
+ );
255
+
256
+ await writeSituationFile(baseParams);
257
+
258
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
259
+ expect.any(String),
260
+ expect.stringContaining(
261
+ '"swap":{"usedPercent":0,"usedGib":0,"totalGib":0}',
262
+ ),
263
+ );
264
+ });
265
+ });
266
+
267
+ describe('atomic write path', () => {
268
+ it('writes to tmp file then renames to final path', async () => {
269
+ await writeSituationFile(baseParams);
270
+
271
+ const expectedFinalPath = `${baseParams.cachePath}/situation-${baseParams.projectId}.json`;
272
+ const expectedTmpPath = `${expectedFinalPath}.tmp`;
273
+
274
+ expect(jest.mocked(fs.mkdirSync)).toHaveBeenCalledWith(
275
+ baseParams.cachePath,
276
+ { recursive: true },
277
+ );
278
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
279
+ expectedTmpPath,
280
+ expect.any(String),
281
+ );
282
+ expect(jest.mocked(fs.renameSync)).toHaveBeenCalledWith(
283
+ expectedTmpPath,
284
+ expectedFinalPath,
285
+ );
286
+ });
287
+
288
+ it('writes mkdirSync before writeFileSync before renameSync', async () => {
289
+ const callOrder: string[] = [];
290
+ jest.mocked(fs.mkdirSync).mockImplementation((): undefined => {
291
+ callOrder.push('mkdir');
292
+ return undefined;
293
+ });
294
+ jest.mocked(fs.writeFileSync).mockImplementation((): void => {
295
+ callOrder.push('write');
296
+ });
297
+ jest.mocked(fs.renameSync).mockImplementation((): void => {
298
+ callOrder.push('rename');
299
+ });
300
+
301
+ await writeSituationFile(baseParams);
302
+
303
+ expect(callOrder).toEqual(['mkdir', 'write', 'rename']);
304
+ });
305
+
306
+ it('written JSON contains config and capturedAt fields', async () => {
307
+ await writeSituationFile(baseParams);
308
+
309
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
310
+ expect.any(String),
311
+ expect.stringContaining('"capturedAt"'),
312
+ );
313
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
314
+ expect.any(String),
315
+ expect.stringContaining('"maximumPreparingIssuesCount":6'),
316
+ );
317
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
318
+ expect.any(String),
319
+ expect.stringContaining('"utilizationPercentageThreshold":90'),
320
+ );
321
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
322
+ expect.any(String),
323
+ expect.stringContaining('"allowIssueCacheMinutes":5'),
324
+ );
325
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
326
+ expect.any(String),
327
+ expect.stringContaining('"thresholdForAutoReject":3'),
328
+ );
329
+ });
330
+ });
331
+
332
+ describe('running preparation processes', () => {
333
+ it('counts running processes via preparationProcessCheckCommand', async () => {
334
+ const mockRunCommand = jest
335
+ .fn()
336
+ .mockImplementation(async (_program: string, args: string[]) =>
337
+ Promise.resolve({
338
+ stdout: '',
339
+ stderr: '',
340
+ exitCode:
341
+ args[3] === 'https://github.com/owner/repo/issues/1' ? 0 : 1,
342
+ }),
343
+ );
344
+ const mockRunner: LocalCommandRunner = {
345
+ runCommand: mockRunCommand,
346
+ };
347
+ const issues = [
348
+ createIssue({
349
+ status: 'Preparation',
350
+ url: 'https://github.com/owner/repo/issues/1',
351
+ number: 1,
352
+ }),
353
+ createIssue({
354
+ status: 'Preparation',
355
+ url: 'https://github.com/owner/repo/issues/2',
356
+ number: 2,
357
+ }),
358
+ ];
359
+
360
+ await writeSituationFile({
361
+ ...baseParams,
362
+ issues,
363
+ preparationProcessCheckCommand: 'pgrep -fa "{URL}"',
364
+ localCommandRunner: mockRunner,
365
+ });
366
+
367
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
368
+ expect.any(String),
369
+ expect.stringContaining('"runningPreparation":1'),
370
+ );
371
+ });
372
+
373
+ it('sets runningPreparation to 0 when no preparation issues exist', async () => {
374
+ const mockRunCommand = jest.fn();
375
+ const mockRunner: LocalCommandRunner = {
376
+ runCommand: mockRunCommand,
377
+ };
378
+
379
+ await writeSituationFile({
380
+ ...baseParams,
381
+ issues: [],
382
+ preparationProcessCheckCommand: 'pgrep -fa "{URL}"',
383
+ localCommandRunner: mockRunner,
384
+ });
385
+
386
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
387
+ expect.any(String),
388
+ expect.stringContaining('"runningPreparation":0'),
389
+ );
390
+ expect(mockRunCommand).not.toHaveBeenCalled();
391
+ });
392
+
393
+ it('sets runningPreparation to null when no localCommandRunner provided', async () => {
394
+ await writeSituationFile({
395
+ ...baseParams,
396
+ preparationProcessCheckCommand: 'pgrep -fa "{URL}"',
397
+ });
398
+
399
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
400
+ expect.any(String),
401
+ expect.stringContaining('"runningPreparation":null'),
402
+ );
403
+ });
404
+
405
+ it('sets runningPreparation to null when no preparationProcessCheckCommand', async () => {
406
+ await writeSituationFile({
407
+ ...baseParams,
408
+ preparationProcessCheckCommand: null,
409
+ });
410
+
411
+ expect(jest.mocked(fs.writeFileSync)).toHaveBeenCalledWith(
412
+ expect.any(String),
413
+ expect.stringContaining('"runningPreparation":null'),
414
+ );
415
+ });
416
+ });
417
+ });
@@ -0,0 +1,168 @@
1
+ import fs from 'fs';
2
+ import type { Issue } from '../../../domain/entities/Issue';
3
+ import type { LocalCommandRunner } from '../../../domain/usecases/adapter-interfaces/LocalCommandRunner';
4
+
5
+ export type SituationFileParams = {
6
+ cachePath: string;
7
+ projectId: string;
8
+ issues: Issue[];
9
+ statusNames: {
10
+ awaitingQualityCheckStatus: string | null;
11
+ preparationStatus: string | null;
12
+ awaitingWorkspaceStatus: string | null;
13
+ };
14
+ config: {
15
+ maximumPreparingIssuesCount: number | null;
16
+ utilizationPercentageThreshold: number;
17
+ allowIssueCacheMinutes: number;
18
+ thresholdForAutoReject: number;
19
+ };
20
+ preparationProcessCheckCommand?: string | null;
21
+ localCommandRunner?: LocalCommandRunner;
22
+ };
23
+
24
+ type MeminfoValues = {
25
+ memTotalKb: number;
26
+ memAvailableKb: number;
27
+ swapTotalKb: number;
28
+ swapFreeKb: number;
29
+ };
30
+
31
+ export const parseMeminfo = (meminfo: string): MeminfoValues => {
32
+ const getValue = (key: string): number => {
33
+ const match = meminfo.match(new RegExp(`^${key}:\\s+(\\d+)`, 'm'));
34
+ return match ? parseInt(match[1], 10) : 0;
35
+ };
36
+ return {
37
+ memTotalKb: getValue('MemTotal'),
38
+ memAvailableKb: getValue('MemAvailable'),
39
+ swapTotalKb: getValue('SwapTotal'),
40
+ swapFreeKb: getValue('SwapFree'),
41
+ };
42
+ };
43
+
44
+ const kbToGib = (kb: number): number =>
45
+ Math.round((kb / 1024 / 1024) * 100) / 100;
46
+
47
+ const toPercent = (used: number, total: number): number =>
48
+ total > 0 ? Math.round((used / total) * 1000) / 10 : 0;
49
+
50
+ const isImmediatelyActionable = (issue: Issue): boolean =>
51
+ issue.dependedIssueUrls.length === 0 &&
52
+ issue.nextActionDate === null &&
53
+ issue.nextActionHour === null;
54
+
55
+ const countRunningProcesses = async (
56
+ preparationIssues: Issue[],
57
+ commandTemplate: string,
58
+ localCommandRunner: LocalCommandRunner,
59
+ ): Promise<number> => {
60
+ const resolvedTemplate = commandTemplate.replace('{URL}', '$1');
61
+ const checks = await Promise.all(
62
+ preparationIssues.map(async (issue) => {
63
+ const { exitCode } = await localCommandRunner.runCommand('sh', [
64
+ '-c',
65
+ resolvedTemplate,
66
+ '--',
67
+ issue.url,
68
+ ]);
69
+ return exitCode === 0;
70
+ }),
71
+ );
72
+ return checks.filter(Boolean).length;
73
+ };
74
+
75
+ export const writeSituationFile = async (
76
+ params: SituationFileParams,
77
+ ): Promise<void> => {
78
+ const {
79
+ cachePath,
80
+ projectId,
81
+ issues,
82
+ statusNames,
83
+ config,
84
+ preparationProcessCheckCommand,
85
+ localCommandRunner,
86
+ } = params;
87
+
88
+ const awaitingQualityCheckImmediatelyActionable =
89
+ statusNames.awaitingQualityCheckStatus !== null
90
+ ? issues.filter(
91
+ (i) =>
92
+ i.status === statusNames.awaitingQualityCheckStatus &&
93
+ isImmediatelyActionable(i),
94
+ ).length
95
+ : 0;
96
+
97
+ const preparationIssues =
98
+ statusNames.preparationStatus !== null
99
+ ? issues.filter((i) => i.status === statusNames.preparationStatus)
100
+ : [];
101
+
102
+ const awaitingWorkspaceIssues =
103
+ statusNames.awaitingWorkspaceStatus !== null
104
+ ? issues.filter((i) => i.status === statusNames.awaitingWorkspaceStatus)
105
+ : [];
106
+
107
+ const awaitingWorkspaceImmediatelyActionable = awaitingWorkspaceIssues.filter(
108
+ isImmediatelyActionable,
109
+ ).length;
110
+
111
+ const awaitingWorkspaceBlockedByDependency = awaitingWorkspaceIssues.filter(
112
+ (i) => i.dependedIssueUrls.length > 0,
113
+ ).length;
114
+
115
+ let runningPreparation: number | null = null;
116
+ if (
117
+ preparationProcessCheckCommand &&
118
+ localCommandRunner &&
119
+ preparationIssues.length > 0
120
+ ) {
121
+ runningPreparation = await countRunningProcesses(
122
+ preparationIssues,
123
+ preparationProcessCheckCommand,
124
+ localCommandRunner,
125
+ );
126
+ } else if (preparationProcessCheckCommand && localCommandRunner) {
127
+ runningPreparation = 0;
128
+ }
129
+
130
+ const meminfo = fs.readFileSync('/proc/meminfo', 'utf-8');
131
+ const { memTotalKb, memAvailableKb, swapTotalKb, swapFreeKb } =
132
+ parseMeminfo(meminfo);
133
+
134
+ const memUsedKb = memTotalKb - memAvailableKb;
135
+ const swapUsedKb = swapTotalKb - swapFreeKb;
136
+
137
+ const situation = {
138
+ capturedAt: new Date().toISOString(),
139
+ config,
140
+ status: {
141
+ awaitingQualityCheckImmediatelyActionable,
142
+ preparation: preparationIssues.length,
143
+ awaitingWorkspaceImmediatelyActionable,
144
+ awaitingWorkspaceBlockedByDependency,
145
+ },
146
+ processes: {
147
+ runningPreparation,
148
+ },
149
+ system: {
150
+ memory: {
151
+ usedPercent: toPercent(memUsedKb, memTotalKb),
152
+ usedGib: kbToGib(memUsedKb),
153
+ totalGib: kbToGib(memTotalKb),
154
+ },
155
+ swap: {
156
+ usedPercent: toPercent(swapUsedKb, swapTotalKb),
157
+ usedGib: kbToGib(swapUsedKb),
158
+ totalGib: kbToGib(swapTotalKb),
159
+ },
160
+ },
161
+ };
162
+
163
+ const finalPath = `${cachePath}/situation-${projectId}.json`;
164
+ const tmpPath = `${finalPath}.tmp`;
165
+ fs.mkdirSync(cachePath, { recursive: true });
166
+ fs.writeFileSync(tmpPath, JSON.stringify(situation));
167
+ fs.renameSync(tmpPath, finalPath);
168
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAuEzB,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAuEzB,eAAO,MAAM,OAAO,SAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAoB3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAoQP;CACH"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAoB3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CA8QP;CACH"}
@@ -0,0 +1,30 @@
1
+ import type { Issue } from '../../../domain/entities/Issue';
2
+ import type { LocalCommandRunner } from '../../../domain/usecases/adapter-interfaces/LocalCommandRunner';
3
+ export type SituationFileParams = {
4
+ cachePath: string;
5
+ projectId: string;
6
+ issues: Issue[];
7
+ statusNames: {
8
+ awaitingQualityCheckStatus: string | null;
9
+ preparationStatus: string | null;
10
+ awaitingWorkspaceStatus: string | null;
11
+ };
12
+ config: {
13
+ maximumPreparingIssuesCount: number | null;
14
+ utilizationPercentageThreshold: number;
15
+ allowIssueCacheMinutes: number;
16
+ thresholdForAutoReject: number;
17
+ };
18
+ preparationProcessCheckCommand?: string | null;
19
+ localCommandRunner?: LocalCommandRunner;
20
+ };
21
+ type MeminfoValues = {
22
+ memTotalKb: number;
23
+ memAvailableKb: number;
24
+ swapTotalKb: number;
25
+ swapFreeKb: number;
26
+ };
27
+ export declare const parseMeminfo: (meminfo: string) => MeminfoValues;
28
+ export declare const writeSituationFile: (params: SituationFileParams) => Promise<void>;
29
+ export {};
30
+ //# sourceMappingURL=situationFileWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"situationFileWriter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/situationFileWriter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;AAEzG,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE;QACX,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1C,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;KACxC,CAAC;IACF,MAAM,EAAE;QACN,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;QACvC,sBAAsB,EAAE,MAAM,CAAC;QAC/B,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,8BAA8B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,aAW9C,CAAC;AAiCF,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,mBAAmB,KAC1B,OAAO,CAAC,IAAI,CA2Fd,CAAC"}