github-issue-tower-defence-management 2.65.1 → 2.67.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 (42) hide show
  1. package/README.md +3 -0
  2. package/bin/adapter/entry-points/cli/index.js +7 -0
  3. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  4. package/bin/adapter/entry-points/cli/projectConfig.js +2 -0
  5. package/bin/adapter/entry-points/cli/projectConfig.js.map +1 -1
  6. package/bin/adapter/repositories/GitHubIssueCommentRepository.js +9 -2
  7. package/bin/adapter/repositories/GitHubIssueCommentRepository.js.map +1 -1
  8. package/bin/adapter/repositories/NodeTmuxSessionRepository.js +72 -0
  9. package/bin/adapter/repositories/NodeTmuxSessionRepository.js.map +1 -1
  10. package/bin/adapter/repositories/githubRestClient.js +87 -2
  11. package/bin/adapter/repositories/githubRestClient.js.map +1 -1
  12. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +89 -59
  13. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  14. package/bin/adapter/repositories/issue/githubRateLimitRetry.js +8 -2
  15. package/bin/adapter/repositories/issue/githubRateLimitRetry.js.map +1 -1
  16. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +2 -0
  17. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
  18. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +3 -1
  19. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
  20. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js +2 -0
  21. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js.map +1 -1
  22. package/bin/domain/usecases/resolveNextStepAgentDispatchRepetition.js +31 -1
  23. package/bin/domain/usecases/resolveNextStepAgentDispatchRepetition.js.map +1 -1
  24. package/package.json +1 -1
  25. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  26. package/types/adapter/entry-points/cli/projectConfig.d.ts +1 -0
  27. package/types/adapter/entry-points/cli/projectConfig.d.ts.map +1 -1
  28. package/types/adapter/repositories/GitHubIssueCommentRepository.d.ts.map +1 -1
  29. package/types/adapter/repositories/NodeTmuxSessionRepository.d.ts +1 -0
  30. package/types/adapter/repositories/NodeTmuxSessionRepository.d.ts.map +1 -1
  31. package/types/adapter/repositories/githubRestClient.d.ts +6 -0
  32. package/types/adapter/repositories/githubRestClient.d.ts.map +1 -1
  33. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  34. package/types/adapter/repositories/issue/githubRateLimitRetry.d.ts +5 -1
  35. package/types/adapter/repositories/issue/githubRateLimitRetry.d.ts.map +1 -1
  36. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts +1 -0
  37. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
  38. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
  39. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts +1 -0
  40. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts.map +1 -1
  41. package/types/domain/usecases/resolveNextStepAgentDispatchRepetition.d.ts +2 -0
  42. package/types/domain/usecases/resolveNextStepAgentDispatchRepetition.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logGithubRestRateLimit = void 0;
3
+ exports.logGithubRestRateLimit = exports.captureRestCallSite = exports.extractRestCallSite = exports.sanitizeRestPath = void 0;
4
4
  const parseNonNegativeIntegerHeader = (value) => {
5
5
  if (value === null) {
6
6
  return null;
@@ -12,6 +12,91 @@ const parseNonNegativeIntegerHeader = (value) => {
12
12
  const parsed = Number.parseInt(trimmed, 10);
13
13
  return Number.isFinite(parsed) ? parsed : null;
14
14
  };
15
+ const sanitizeRestPath = (url) => {
16
+ try {
17
+ return new URL(url).pathname;
18
+ }
19
+ catch {
20
+ const questionMark = url.indexOf('?');
21
+ return questionMark === -1 ? url : url.slice(0, questionMark);
22
+ }
23
+ };
24
+ exports.sanitizeRestPath = sanitizeRestPath;
25
+ const REST_CALL_SITE_FRAME_COUNT = 3;
26
+ const REST_CALL_SITE_SEPARATOR = '<-';
27
+ const UNKNOWN_REST_CALL_SITE = 'unknown';
28
+ const REST_INFRASTRUCTURE_MODULES = new Set([
29
+ 'githubRestClient',
30
+ 'githubRateLimitRetry',
31
+ ]);
32
+ const FRAME_LOCATION_PATTERN = /\(?([^()\s]+):\d+:\d+\)?$/;
33
+ const MODULE_FILE_EXTENSION_PATTERN = /\.(?:[cm]?[jt]sx?)$/;
34
+ const TEST_MODULE_SUFFIX_PATTERN = /\.(?:test|spec)$/;
35
+ const NODE_MODULES_SEGMENT = '/node_modules/';
36
+ const ownPackagePathPrefix = (modulePath) => {
37
+ const segmentIndex = modulePath.lastIndexOf(NODE_MODULES_SEGMENT);
38
+ if (segmentIndex === -1) {
39
+ return null;
40
+ }
41
+ const packageRootIndex = segmentIndex + NODE_MODULES_SEGMENT.length;
42
+ const segments = modulePath.slice(packageRootIndex).split('/');
43
+ const nameSegmentCount = segments[0].startsWith('@') ? 2 : 1;
44
+ if (segments.length <= nameSegmentCount) {
45
+ return null;
46
+ }
47
+ return modulePath.slice(0, packageRootIndex + segments.slice(0, nameSegmentCount).join('/').length + 1);
48
+ };
49
+ const isInsideOwnPackage = (location, ownPackagePrefix) => {
50
+ if (ownPackagePrefix === null || !location.startsWith(ownPackagePrefix)) {
51
+ return false;
52
+ }
53
+ const pathBelowPackageRoot = `/${location.slice(ownPackagePrefix.length)}`;
54
+ return !pathBelowPackageRoot.includes(NODE_MODULES_SEGMENT);
55
+ };
56
+ const frameModuleName = (frame, ownPackagePrefix) => {
57
+ const match = frame.match(FRAME_LOCATION_PATTERN);
58
+ if (!match) {
59
+ return null;
60
+ }
61
+ const location = match[1];
62
+ if (location.startsWith('node:')) {
63
+ return null;
64
+ }
65
+ if (location.includes(NODE_MODULES_SEGMENT) &&
66
+ !isInsideOwnPackage(location, ownPackagePrefix)) {
67
+ return null;
68
+ }
69
+ const fileName = location.split('/').slice(-1)[0];
70
+ const moduleName = fileName
71
+ .replace(MODULE_FILE_EXTENSION_PATTERN, '')
72
+ .replace(TEST_MODULE_SUFFIX_PATTERN, '');
73
+ if (moduleName.length === 0 || REST_INFRASTRUCTURE_MODULES.has(moduleName)) {
74
+ return null;
75
+ }
76
+ return moduleName;
77
+ };
78
+ const extractRestCallSite = (stack, modulePath = __filename) => {
79
+ if (!stack) {
80
+ return UNKNOWN_REST_CALL_SITE;
81
+ }
82
+ const ownPackagePrefix = ownPackagePathPrefix(modulePath);
83
+ const moduleNames = stack
84
+ .split('\n')
85
+ .map((line) => line.trim())
86
+ .filter((line) => line.startsWith('at '))
87
+ .map((frame) => frameModuleName(frame, ownPackagePrefix))
88
+ .filter((moduleName) => moduleName !== null)
89
+ .filter((moduleName, index, allModuleNames) => allModuleNames[index - 1] !== moduleName);
90
+ if (moduleNames.length === 0) {
91
+ return UNKNOWN_REST_CALL_SITE;
92
+ }
93
+ return moduleNames
94
+ .slice(0, REST_CALL_SITE_FRAME_COUNT)
95
+ .join(REST_CALL_SITE_SEPARATOR);
96
+ };
97
+ exports.extractRestCallSite = extractRestCallSite;
98
+ const captureRestCallSite = () => (0, exports.extractRestCallSite)(new Error().stack);
99
+ exports.captureRestCallSite = captureRestCallSite;
15
100
  const logGithubRestRateLimit = (params) => {
16
101
  const remaining = parseNonNegativeIntegerHeader(params.headers.get('x-ratelimit-remaining'));
17
102
  if (remaining === null) {
@@ -25,7 +110,7 @@ const logGithubRestRateLimit = (params) => {
25
110
  const resetIso = resetEpochSeconds !== null
26
111
  ? new Date(resetEpochSeconds * 1000).toISOString()
27
112
  : null;
28
- console.log(`${now().toISOString()} githubRestClient: resource=${resource} used=${used} remaining=${remaining} limit=${limit} reset=${resetIso}`);
113
+ console.log(`${now().toISOString()} githubRestClient: method=${params.method} path=${params.path} resource=${resource} used=${used} remaining=${remaining} limit=${limit} reset=${resetIso} caller=${params.caller}`);
29
114
  };
30
115
  exports.logGithubRestRateLimit = logGithubRestRateLimit;
31
116
  //# sourceMappingURL=githubRestClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"githubRestClient.js","sourceRoot":"","sources":["../../../src/adapter/repositories/githubRestClient.ts"],"names":[],"mappings":";;;AAAA,MAAM,6BAA6B,GAAG,CAAC,KAAoB,EAAiB,EAAE;IAC5E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AAEK,MAAM,sBAAsB,GAAG,CAAC,MAGtC,EAAQ,EAAE;IACT,MAAM,SAAS,GAAG,6BAA6B,CAC7C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAC5C,CAAC;IACF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,6BAA6B,CACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CACvC,CAAC;IACF,MAAM,KAAK,GAAG,6BAA6B,CACzC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CACxC,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,6BAA6B,CACrD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CACxC,CAAC;IACF,MAAM,QAAQ,GACZ,iBAAiB,KAAK,IAAI;QACxB,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;QAClD,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,CAAC,GAAG,CACT,GAAG,GAAG,EAAE,CAAC,WAAW,EAAE,+BAA+B,QAAQ,SAAS,IAAI,cAAc,SAAS,UAAU,KAAK,UAAU,QAAQ,EAAE,CACrI,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,sBAAsB,0BA4BjC"}
1
+ {"version":3,"file":"githubRestClient.js","sourceRoot":"","sources":["../../../src/adapter/repositories/githubRestClient.ts"],"names":[],"mappings":"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"}