github-issue-tower-defence-management 2.183.5 → 2.183.6

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/README.test.ts CHANGED
@@ -2,8 +2,10 @@
2
2
  * @jest-environment node
3
3
  */
4
4
  import fs from 'node:fs';
5
+ import { spawnSync } from 'node:child_process';
5
6
  import os from 'node:os';
6
7
  import path from 'node:path';
8
+ import { createHash } from 'node:crypto';
7
9
  import YAML from 'yaml';
8
10
  import { loadStartPreparationFleetSettings } from './src/adapter/entry-points/cli/fleetConfig';
9
11
 
@@ -135,3 +137,674 @@ test('README.md llmModelNameByAgentName map example is accepted by the fleet rea
135
137
  fs.rmSync(temporaryDirectory, { force: true, recursive: true });
136
138
  }
137
139
  });
140
+
141
+ test('README.md llmModelNameByAgentName map deletion reports the missing label', () => {
142
+ const readmeFilePath = path.join(__dirname, 'README.md');
143
+ const temporaryDirectory = fs.mkdtempSync(
144
+ path.join(os.tmpdir(), 'readme-map-deletion-'),
145
+ );
146
+ const cacheDirectory = fs.mkdtempSync(
147
+ path.join(os.tmpdir(), 'readme-map-deletion-cache-'),
148
+ );
149
+ const originalReadme = fs.readFileSync(readmeFilePath, 'utf8');
150
+ const lines = originalReadme.split('\n');
151
+ const label = 'Example with the map:';
152
+ const labelIndex = lines.findIndex((line) => line === label);
153
+ const openingFenceIndex = lines.findIndex(
154
+ (line, index) => index > labelIndex && line === '```yaml',
155
+ );
156
+ const closingFenceIndex = lines.findIndex(
157
+ (line, index) => index > openingFenceIndex && line === '```',
158
+ );
159
+ const mutatedReadme = [
160
+ ...lines.slice(0, labelIndex),
161
+ ...lines.slice(closingFenceIndex + 1),
162
+ ].join('\n');
163
+
164
+ try {
165
+ fs.writeFileSync(readmeFilePath, mutatedReadme);
166
+ const subprocess = spawnSync(
167
+ 'npm',
168
+ [
169
+ 'run',
170
+ 'test',
171
+ '--',
172
+ '--coverage=false',
173
+ '--reporters=default',
174
+ '--runInBand',
175
+ '--runTestsByPath',
176
+ 'README.test.ts',
177
+ '--testNamePattern',
178
+ '^README\\.md llmModelNameByAgentName map example is accepted by the fleet reader$',
179
+ `--cacheDirectory=${cacheDirectory}`,
180
+ ],
181
+ {
182
+ cwd: __dirname,
183
+ encoding: 'utf8',
184
+ env: { ...process.env, TMPDIR: temporaryDirectory },
185
+ },
186
+ );
187
+ const failureOutput = [subprocess.stdout, subprocess.stderr]
188
+ .filter((output): output is string => typeof output === 'string')
189
+ .join('\n');
190
+ const missingLabel =
191
+ /README\.md label not found: (Example with the map:)/.exec(
192
+ failureOutput,
193
+ )?.[1] ?? null;
194
+
195
+ expect(missingLabel).toBe('Example with the map:');
196
+ expect(
197
+ fs
198
+ .readdirSync(temporaryDirectory)
199
+ .filter((entryName) => entryName !== 'node-compile-cache'),
200
+ ).toEqual([]);
201
+ } finally {
202
+ fs.writeFileSync(readmeFilePath, originalReadme);
203
+ fs.rmSync(temporaryDirectory, { force: true, recursive: true });
204
+ fs.rmSync(cacheDirectory, { force: true, recursive: true });
205
+ }
206
+ });
207
+ const snapshotRepositoryFiles = (): string => {
208
+ const generatedReadmeTestArtifactPattern = /^\.readme-cleanup-sandbox-/;
209
+ const hashRegularFile = (filePath: string): string => {
210
+ const hash = createHash('sha256');
211
+ const fileDescriptor = fs.openSync(filePath, 'r');
212
+ const buffer = Buffer.allocUnsafe(64 * 1024);
213
+
214
+ try {
215
+ let bytesRead = buffer.length;
216
+ while (bytesRead > 0) {
217
+ bytesRead = fs.readSync(fileDescriptor, buffer, 0, buffer.length, null);
218
+ if (bytesRead > 0) {
219
+ hash.update(buffer.subarray(0, bytesRead));
220
+ }
221
+ }
222
+ } finally {
223
+ fs.closeSync(fileDescriptor);
224
+ }
225
+
226
+ return hash.digest('hex');
227
+ };
228
+
229
+ const snapshotHash = createHash('sha256');
230
+ const directoriesToVisit = [__dirname];
231
+ const rootStat = fs.lstatSync(__dirname);
232
+ snapshotHash.update(
233
+ `${JSON.stringify({
234
+ path: '.',
235
+ type: 'directory',
236
+ permissions: (rootStat.mode & 0o7777).toString(8).padStart(4, '0'),
237
+ symlinkTarget: '',
238
+ digest: '',
239
+ })}\n`,
240
+ );
241
+
242
+ while (directoriesToVisit.length > 0) {
243
+ const directoryPath = directoriesToVisit.pop();
244
+ if (directoryPath === undefined) {
245
+ break;
246
+ }
247
+
248
+ const directoryEntries = fs
249
+ .readdirSync(directoryPath, { withFileTypes: true })
250
+ .sort((left, right) => (left.name < right.name ? -1 : 1));
251
+
252
+ for (const directoryEntry of directoryEntries) {
253
+ if (generatedReadmeTestArtifactPattern.test(directoryEntry.name)) {
254
+ continue;
255
+ }
256
+
257
+ const entryPath = path.join(directoryPath, directoryEntry.name);
258
+ const relativePath = path
259
+ .relative(__dirname, entryPath)
260
+ .split(path.sep)
261
+ .join('/');
262
+ if (relativePath === 'reports') {
263
+ continue;
264
+ }
265
+ if (relativePath.split('/').includes('.git')) {
266
+ continue;
267
+ }
268
+ if (relativePath.split('/').includes('node_modules')) {
269
+ continue;
270
+ }
271
+
272
+ const entryStat = fs.lstatSync(entryPath);
273
+ const entryType = entryStat.isDirectory()
274
+ ? 'directory'
275
+ : entryStat.isFile()
276
+ ? 'regular'
277
+ : entryStat.isSymbolicLink()
278
+ ? 'symlink'
279
+ : entryStat.isFIFO()
280
+ ? 'fifo'
281
+ : entryStat.isSocket()
282
+ ? 'socket'
283
+ : entryStat.isBlockDevice()
284
+ ? 'block-device'
285
+ : entryStat.isCharacterDevice()
286
+ ? 'character-device'
287
+ : 'unknown';
288
+
289
+ snapshotHash.update(
290
+ `${JSON.stringify({
291
+ path: relativePath,
292
+ type: entryType,
293
+ permissions: (entryStat.mode & 0o7777).toString(8).padStart(4, '0'),
294
+ symlinkTarget: entryStat.isSymbolicLink()
295
+ ? fs.readlinkSync(entryPath)
296
+ : '',
297
+ digest: entryStat.isFile() ? hashRegularFile(entryPath) : '',
298
+ })}\n`,
299
+ );
300
+
301
+ if (entryStat.isDirectory()) {
302
+ directoriesToVisit.push(entryPath);
303
+ }
304
+ }
305
+ }
306
+
307
+ return snapshotHash.digest('hex');
308
+ };
309
+
310
+ test('README.md llmModelNameByAgentName repository snapshot ignores generated README cleanup artifacts', () => {
311
+ const generatedArtifactDirectory = fs.mkdtempSync(
312
+ path.join(__dirname, '.readme-cleanup-sandbox-'),
313
+ );
314
+
315
+ try {
316
+ const beforeSnapshot = snapshotRepositoryFiles();
317
+ fs.writeFileSync(
318
+ path.join(generatedArtifactDirectory, 'generated-test-artifact.txt'),
319
+ 'generated during the README test run',
320
+ );
321
+
322
+ expect(snapshotRepositoryFiles()).toBe(beforeSnapshot);
323
+ } finally {
324
+ fs.rmSync(generatedArtifactDirectory, { force: true, recursive: true });
325
+ }
326
+ });
327
+
328
+ test('README.md llmModelNameByAgentName repository snapshot ignores generated test reports', () => {
329
+ const reportsDirectory = path.join(__dirname, 'reports');
330
+ const reportsDirectoryExisted = fs.existsSync(reportsDirectory);
331
+ fs.mkdirSync(reportsDirectory, { recursive: true });
332
+ const generatedReportDirectory = fs.mkdtempSync(
333
+ path.join(reportsDirectory, 'readme-snapshot-report-'),
334
+ );
335
+
336
+ try {
337
+ const beforeSnapshot = snapshotRepositoryFiles();
338
+ fs.writeFileSync(
339
+ path.join(generatedReportDirectory, 'generated-report.txt'),
340
+ 'generated during the test run',
341
+ );
342
+
343
+ expect(snapshotRepositoryFiles()).toBe(beforeSnapshot);
344
+ } finally {
345
+ fs.rmSync(generatedReportDirectory, { force: true, recursive: true });
346
+ if (!reportsDirectoryExisted) {
347
+ fs.rmSync(reportsDirectory, { force: true, recursive: true });
348
+ }
349
+ }
350
+ });
351
+
352
+ test('README.md llmModelNameByAgentName repository snapshot detects arbitrary repository file changes', () => {
353
+ const sourceChangeDirectory = fs.mkdtempSync(
354
+ path.join(__dirname, 'readme-snapshot-source-'),
355
+ );
356
+
357
+ try {
358
+ const beforeSnapshot = snapshotRepositoryFiles();
359
+ fs.writeFileSync(
360
+ path.join(sourceChangeDirectory, 'source-change.txt'),
361
+ 'arbitrary repository change',
362
+ );
363
+
364
+ expect(snapshotRepositoryFiles()).not.toBe(beforeSnapshot);
365
+ } finally {
366
+ fs.rmSync(sourceChangeDirectory, { force: true, recursive: true });
367
+ }
368
+ });
369
+
370
+ test('README.md llmModelNameByAgentName test leaves no repository file changes after existing README tests run', () => {
371
+ const temporaryDirectory = fs.mkdtempSync(
372
+ path.join(os.tmpdir(), 'readme-working-tree-test-'),
373
+ );
374
+ const jestCacheDirectory = path.join(temporaryDirectory, 'jest-cache');
375
+ const resultFilePath = path.join(temporaryDirectory, 'result.json');
376
+
377
+ try {
378
+ const beforeSnapshot = snapshotRepositoryFiles();
379
+ const childResult = spawnSync(
380
+ 'npx',
381
+ [
382
+ 'jest',
383
+ 'README.test.ts',
384
+ '--selectProjects',
385
+ 'backend',
386
+ '--coverage=false',
387
+ '--runInBand',
388
+ '--reporters=default',
389
+ '--testNamePattern',
390
+ '^README\\.md llmModelNameByAgentName map example is accepted by the fleet reader$',
391
+ `--cacheDirectory=${jestCacheDirectory}`,
392
+ '--json',
393
+ `--outputFile=${resultFilePath}`,
394
+ ],
395
+ {
396
+ cwd: __dirname,
397
+ encoding: 'utf8',
398
+ env: {
399
+ ...process.env,
400
+ TMPDIR: temporaryDirectory,
401
+ },
402
+ timeout: 60000,
403
+ },
404
+ );
405
+
406
+ if (childResult.error) {
407
+ throw childResult.error;
408
+ }
409
+ if (childResult.status !== 0) {
410
+ throw new Error(childResult.stderr);
411
+ }
412
+
413
+ const afterSnapshot = snapshotRepositoryFiles();
414
+ expect(afterSnapshot).toEqual(beforeSnapshot);
415
+ } finally {
416
+ fs.rmSync(temporaryDirectory, { force: true, recursive: true });
417
+ }
418
+ });
419
+
420
+ test.each([
421
+ { name: 'reader returns', expectedExitCode: 0 },
422
+ { name: 'reader throws', expectedExitCode: 1 },
423
+ ])(
424
+ 'README.md llmModelNameByAgentName map example leaves no temporary files when the $name',
425
+ ({ name, expectedExitCode }) => {
426
+ const sandboxDirectory = fs.mkdtempSync(
427
+ path.join(__dirname, '.readme-cleanup-sandbox-'),
428
+ );
429
+ const temporaryDirectory = fs.mkdtempSync(
430
+ path.join(os.tmpdir(), 'readme-cleanup-temp-'),
431
+ );
432
+ const cacheDirectory = fs.mkdtempSync(
433
+ path.join(os.tmpdir(), 'readme-cleanup-cache-'),
434
+ );
435
+
436
+ try {
437
+ fs.copyFileSync(
438
+ __filename,
439
+ path.join(sandboxDirectory, 'README.test.ts'),
440
+ );
441
+ const sandboxReadmePath = path.join(sandboxDirectory, 'README.md');
442
+ fs.copyFileSync(path.join(__dirname, 'README.md'), sandboxReadmePath);
443
+ fs.symlinkSync(
444
+ path.join(__dirname, 'src'),
445
+ path.join(sandboxDirectory, 'src'),
446
+ 'dir',
447
+ );
448
+
449
+ if (name === 'reader throws') {
450
+ const readmeWithInvalidModelName = fs
451
+ .readFileSync(sandboxReadmePath, 'utf8')
452
+ .replace(" developer: 'gpt-5.6-luna'", " developer: ''");
453
+ fs.writeFileSync(sandboxReadmePath, readmeWithInvalidModelName);
454
+ }
455
+
456
+ const result = spawnSync(
457
+ 'npx',
458
+ [
459
+ 'jest',
460
+ path.join(sandboxDirectory, 'README.test.ts'),
461
+ '--selectProjects',
462
+ 'backend',
463
+ '--coverage=false',
464
+ '--runInBand',
465
+ '--reporters=default',
466
+ '--testNamePattern',
467
+ '^README\\.md llmModelNameByAgentName map example is accepted by the fleet reader$',
468
+ `--cacheDirectory=${cacheDirectory}`,
469
+ ],
470
+ {
471
+ cwd: __dirname,
472
+ encoding: 'utf8',
473
+ env: {
474
+ ...process.env,
475
+ TMPDIR: temporaryDirectory,
476
+ },
477
+ timeout: 120000,
478
+ },
479
+ );
480
+
481
+ expect(result.error).toBeUndefined();
482
+ expect(result.status).toBe(expectedExitCode);
483
+ expect(
484
+ fs
485
+ .readdirSync(temporaryDirectory)
486
+ .filter((entryName) => entryName !== 'node-compile-cache'),
487
+ ).toEqual([]);
488
+ } finally {
489
+ fs.rmSync(sandboxDirectory, { force: true, recursive: true });
490
+ fs.rmSync(temporaryDirectory, { force: true, recursive: true });
491
+ fs.rmSync(cacheDirectory, { force: true, recursive: true });
492
+ }
493
+ },
494
+ );
495
+
496
+ test('README.md llmModelNameByAgentName map example reports its label when the opening fence is deleted', () => {
497
+ const readmeFilePath = path.join(__dirname, 'README.md');
498
+ const temporaryDirectory = fs.mkdtempSync(
499
+ path.join(os.tmpdir(), 'readme-fence-deletion-'),
500
+ );
501
+ const cacheDirectory = fs.mkdtempSync(
502
+ path.join(os.tmpdir(), 'readme-fence-deletion-cache-'),
503
+ );
504
+ const originalReadme = fs.readFileSync(readmeFilePath, 'utf8');
505
+ const lines = originalReadme.split('\n');
506
+ const label = 'Example with the map:';
507
+ const labelIndex = lines.findIndex((line) => line === label);
508
+ const openingFenceIndex = lines.findIndex(
509
+ (line, index) => index > labelIndex && line === '```yaml',
510
+ );
511
+ const mutatedReadme = [
512
+ ...lines.slice(0, openingFenceIndex),
513
+ ...lines.slice(openingFenceIndex + 1),
514
+ ].join('\n');
515
+
516
+ try {
517
+ fs.writeFileSync(readmeFilePath, mutatedReadme);
518
+ const subprocess = spawnSync(
519
+ 'npm',
520
+ [
521
+ 'run',
522
+ 'test',
523
+ '--',
524
+ '--coverage=false',
525
+ '--reporters=default',
526
+ '--runInBand',
527
+ '--runTestsByPath',
528
+ 'README.test.ts',
529
+ '--testNamePattern',
530
+ '^README\\.md llmModelNameByAgentName map example is accepted by the fleet reader$',
531
+ `--cacheDirectory=${cacheDirectory}`,
532
+ ],
533
+ {
534
+ cwd: __dirname,
535
+ encoding: 'utf8',
536
+ env: { ...process.env, TMPDIR: temporaryDirectory },
537
+ },
538
+ );
539
+ const failureOutput = [subprocess.stdout, subprocess.stderr]
540
+ .filter((output): output is string => typeof output === 'string')
541
+ .join('\n');
542
+ const missingLabel =
543
+ /YAML opening fence not found after: (Example with the map:)/.exec(
544
+ failureOutput,
545
+ )?.[1] ?? null;
546
+
547
+ expect(typeof subprocess.status).toBe('number');
548
+ expect(subprocess.status).not.toBe(0);
549
+ expect(missingLabel).toBe('Example with the map:');
550
+ expect(
551
+ fs
552
+ .readdirSync(temporaryDirectory)
553
+ .filter((entryName) => entryName !== 'node-compile-cache'),
554
+ ).toEqual([]);
555
+ } finally {
556
+ fs.writeFileSync(readmeFilePath, originalReadme);
557
+ fs.rmSync(temporaryDirectory, { force: true, recursive: true });
558
+ fs.rmSync(cacheDirectory, { force: true, recursive: true });
559
+ }
560
+ });
561
+
562
+ test('README.md llmModelNameByAgentName added cases pass with only the map example', () => {
563
+ const readmeFilePath = path.join(__dirname, 'README.md');
564
+ const originalReadme = fs.readFileSync(readmeFilePath, 'utf8');
565
+ const lines = originalReadme.split('\n');
566
+ const labelIndex = lines.findIndex(
567
+ (line) => line === 'Example with the map:',
568
+ );
569
+ const openingFenceIndex = lines.findIndex(
570
+ (line, index) => index > labelIndex && line === '```yaml',
571
+ );
572
+ const closingFenceIndex = lines.findIndex(
573
+ (line, index) => index > openingFenceIndex && line === '```',
574
+ );
575
+ const childTemporaryDirectory = fs.mkdtempSync(
576
+ path.join(os.tmpdir(), 'readme-meta-minimal-'),
577
+ );
578
+ const childCacheDirectory = path.join(childTemporaryDirectory, 'jest-cache');
579
+ const resultFilePath = path.join(childTemporaryDirectory, 'result.json');
580
+ const minimalReadme = [
581
+ ...lines.slice(labelIndex, closingFenceIndex + 1),
582
+ ].join('\n');
583
+
584
+ try {
585
+ fs.writeFileSync(readmeFilePath, minimalReadme);
586
+ const result = spawnSync(
587
+ 'npx',
588
+ [
589
+ 'jest',
590
+ 'README.test.ts',
591
+ '--selectProjects',
592
+ 'backend',
593
+ '--coverage=false',
594
+ '--runInBand',
595
+ '--reporters=default',
596
+ '--testNamePattern',
597
+ '^README\\.md llmModelNameByAgentName test leaves no repository file changes after existing README tests run$',
598
+ `--cacheDirectory=${childCacheDirectory}`,
599
+ '--json',
600
+ `--outputFile=${resultFilePath}`,
601
+ ],
602
+ {
603
+ cwd: __dirname,
604
+ encoding: 'utf8',
605
+ env: {
606
+ ...process.env,
607
+ TMPDIR: childTemporaryDirectory,
608
+ },
609
+ timeout: 120000,
610
+ },
611
+ );
612
+
613
+ expect(result.error).toBeUndefined();
614
+ expect(result.status).toBe(0);
615
+ } finally {
616
+ fs.writeFileSync(readmeFilePath, originalReadme);
617
+ fs.rmSync(childTemporaryDirectory, { force: true, recursive: true });
618
+ }
619
+ });
620
+
621
+ test('README.md llmModelNameByAgentName added cases delete temporary files', () => {
622
+ const childTemporaryDirectory = fs.mkdtempSync(
623
+ path.join(os.tmpdir(), 'readme-meta-cleanup-'),
624
+ );
625
+ const resultDirectory = fs.mkdtempSync(
626
+ path.join(os.tmpdir(), 'readme-meta-result-'),
627
+ );
628
+ const childCacheDirectory = fs.mkdtempSync(
629
+ path.join(os.tmpdir(), 'readme-meta-cleanup-cache-'),
630
+ );
631
+ const resultFilePath = path.join(resultDirectory, 'result.json');
632
+
633
+ try {
634
+ const result = spawnSync(
635
+ 'npx',
636
+ [
637
+ 'jest',
638
+ 'README.test.ts',
639
+ '--selectProjects',
640
+ 'backend',
641
+ '--coverage=false',
642
+ '--runInBand',
643
+ '--reporters=default',
644
+ '--testNamePattern',
645
+ 'README\\.md llmModelNameByAgentName (map deletion reports the missing label|map example reports its label when the opening fence is deleted)',
646
+ `--cacheDirectory=${childCacheDirectory}`,
647
+ '--json',
648
+ `--outputFile=${resultFilePath}`,
649
+ ],
650
+ {
651
+ cwd: __dirname,
652
+ encoding: 'utf8',
653
+ env: {
654
+ ...process.env,
655
+ TMPDIR: childTemporaryDirectory,
656
+ },
657
+ timeout: 120000,
658
+ },
659
+ );
660
+
661
+ expect(result.error).toBeUndefined();
662
+ expect(result.status).toBe(0);
663
+ expect(
664
+ fs
665
+ .readdirSync(childTemporaryDirectory)
666
+ .filter((entryName) => entryName !== 'node-compile-cache'),
667
+ ).toEqual([]);
668
+ } finally {
669
+ fs.rmSync(childTemporaryDirectory, { force: true, recursive: true });
670
+ fs.rmSync(resultDirectory, { force: true, recursive: true });
671
+ fs.rmSync(childCacheDirectory, { force: true, recursive: true });
672
+ }
673
+ });
674
+
675
+ test('README.md llmModelNameByAgentName added case titles identify every added case', () => {
676
+ const childTemporaryDirectory = fs.mkdtempSync(
677
+ path.join(os.tmpdir(), 'readme-meta-titles-'),
678
+ );
679
+ const resultFilePath = path.join(childTemporaryDirectory, 'result.json');
680
+
681
+ try {
682
+ const result = spawnSync(
683
+ 'npx',
684
+ [
685
+ 'jest',
686
+ 'README.test.ts',
687
+ '--selectProjects',
688
+ 'backend',
689
+ '--coverage=false',
690
+ '--runInBand',
691
+ '--reporters=default',
692
+ '--testNamePattern',
693
+ '^(?!.*(?:added case(?:s)? (pass with only the map example|delete temporary files|titles identify every added case)|every added case passes with only the map example$)).*',
694
+ '--json',
695
+ `--outputFile=${resultFilePath}`,
696
+ `--cacheDirectory=${path.join(childTemporaryDirectory, 'jest-cache')}`,
697
+ ],
698
+ {
699
+ cwd: __dirname,
700
+ encoding: 'utf8',
701
+ env: {
702
+ ...process.env,
703
+ TMPDIR: childTemporaryDirectory,
704
+ },
705
+ },
706
+ );
707
+
708
+ expect(result.error).toBeUndefined();
709
+ expect(result.status).toBe(0);
710
+ const testResults = JSON.parse(fs.readFileSync(resultFilePath, 'utf8'))
711
+ .testResults as Array<{
712
+ assertionResults: Array<{ title: string; status: string }>;
713
+ }>;
714
+ const allCaseResults = testResults.flatMap(
715
+ ({ assertionResults }) => assertionResults,
716
+ );
717
+ const metaCaseTitlePattern =
718
+ /added case(?:s)? (pass with only the map example|delete temporary files|titles identify every added case)|every added case passes with only the map example/;
719
+ const caseResults = allCaseResults.filter(
720
+ ({ title }) => !metaCaseTitlePattern.test(title),
721
+ );
722
+ const existingCaseResults = caseResults.filter(
723
+ ({ title }) => !title.includes('llmModelNameByAgentName'),
724
+ );
725
+ const addedCaseResults = caseResults.filter(({ title }) =>
726
+ title.includes('llmModelNameByAgentName'),
727
+ );
728
+
729
+ expect(existingCaseResults).toHaveLength(2);
730
+ expect(caseResults).toHaveLength(2 + addedCaseResults.length);
731
+ expect(addedCaseResults.every(({ status }) => status === 'passed')).toBe(
732
+ true,
733
+ );
734
+ } finally {
735
+ fs.rmSync(childTemporaryDirectory, { force: true, recursive: true });
736
+ }
737
+ });
738
+
739
+ test('README.md llmModelNameByAgentName every added case passes with only the map example', () => {
740
+ const readmeFilePath = path.join(__dirname, 'README.md');
741
+ const originalReadme = fs.readFileSync(readmeFilePath, 'utf8');
742
+ const lines = originalReadme.split('\n');
743
+ const labelIndex = lines.findIndex(
744
+ (line) => line === 'Example with the map:',
745
+ );
746
+ const openingFenceIndex = lines.findIndex(
747
+ (line, index) => index > labelIndex && line === '```yaml',
748
+ );
749
+ const closingFenceIndex = lines.findIndex(
750
+ (line, index) => index > openingFenceIndex && line === '```',
751
+ );
752
+ const temporaryDirectory = fs.mkdtempSync(
753
+ path.join(os.tmpdir(), 'readme-all-added-minimal-'),
754
+ );
755
+ const resultFilePath = path.join(temporaryDirectory, 'result.json');
756
+ const minimalReadme = lines
757
+ .slice(labelIndex, closingFenceIndex + 1)
758
+ .join('\n');
759
+
760
+ try {
761
+ fs.writeFileSync(readmeFilePath, minimalReadme);
762
+ const result = spawnSync(
763
+ 'npx',
764
+ [
765
+ 'jest',
766
+ 'README.test.ts',
767
+ '--selectProjects',
768
+ 'backend',
769
+ '--coverage=false',
770
+ '--runInBand',
771
+ '--reporters=default',
772
+ '--testNamePattern',
773
+ '^(?!.*(?:added cases pass with only the map example|added cases delete temporary files|added case titles identify every added case|every added case passes with only the map example)$).*llmModelNameByAgentName',
774
+ '--json',
775
+ `--outputFile=${resultFilePath}`,
776
+ `--cacheDirectory=${path.join(temporaryDirectory, 'jest-cache')}`,
777
+ ],
778
+ {
779
+ cwd: __dirname,
780
+ encoding: 'utf8',
781
+ env: {
782
+ ...process.env,
783
+ TMPDIR: temporaryDirectory,
784
+ },
785
+ timeout: 120000,
786
+ },
787
+ );
788
+
789
+ expect(result.error).toBeUndefined();
790
+ expect(result.status).toBe(0);
791
+ const testResults = JSON.parse(fs.readFileSync(resultFilePath, 'utf8'))
792
+ .testResults as Array<{
793
+ assertionResults: Array<{ title: string; status: string }>;
794
+ }>;
795
+ const addedCaseResults = testResults
796
+ .flatMap(({ assertionResults }) => assertionResults)
797
+ .filter(
798
+ ({ title, status }) =>
799
+ title.includes('llmModelNameByAgentName') && status !== 'pending',
800
+ );
801
+
802
+ expect(addedCaseResults.length).toBeGreaterThan(0);
803
+ expect(addedCaseResults.every(({ status }) => status === 'passed')).toBe(
804
+ true,
805
+ );
806
+ } finally {
807
+ fs.writeFileSync(readmeFilePath, originalReadme);
808
+ fs.rmSync(temporaryDirectory, { force: true, recursive: true });
809
+ }
810
+ });
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ProcClaudeInteractiveSessionRepository = exports.extractIssueUrl = exports.URGENT_TASKFORCE_LEADER_TITLE_SUFFIX = void 0;
36
+ exports.ProcClaudeInteractiveSessionRepository = exports.extractIssueUrl = void 0;
37
37
  const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
39
  const DEFAULT_PROC_DIRECTORY = '/proc';
@@ -41,22 +41,16 @@ const OAUTH_TOKEN_ENVIRON_KEY = 'CLAUDE_CODE_OAUTH_TOKEN';
41
41
  const SESSION_ID_ENVIRON_KEY = 'CLAUDE_CODE_SESSION_ID';
42
42
  const NAME_ARGUMENT = '--name';
43
43
  const TAKE_OWNERSHIP_MARKER = 'Take ownership';
44
- exports.URGENT_TASKFORCE_LEADER_TITLE_SUFFIX = '/urgent-taskforce-leader';
45
44
  const isIssueUrl = (value) => value.startsWith('http://') || value.startsWith('https://');
46
45
  const parseCommandLineArguments = (cmdline) => cmdline.split('\0').filter((argument) => argument.length > 0);
47
- const stripUrgentTaskforceLeaderTitleSuffix = (value) => {
48
- let strippedValue = value;
49
- while (strippedValue.endsWith(exports.URGENT_TASKFORCE_LEADER_TITLE_SUFFIX)) {
50
- strippedValue = strippedValue.slice(0, strippedValue.length - exports.URGENT_TASKFORCE_LEADER_TITLE_SUFFIX.length);
51
- }
52
- return strippedValue;
53
- };
46
+ const GITHUB_ISSUE_OR_PULL_REQUEST_URL_PATTERN = /^https:\/\/github\.com\/[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+\/(?:issues|pull)\/\d+/;
47
+ const extractLeadingGitHubUrl = (value) => GITHUB_ISSUE_OR_PULL_REQUEST_URL_PATTERN.exec(value)?.[0] ?? value;
54
48
  const extractIssueUrl = (commandArguments) => {
55
49
  for (let index = 0; index < commandArguments.length - 1; index += 1) {
56
50
  if (commandArguments[index] === NAME_ARGUMENT) {
57
51
  const value = commandArguments[index + 1] ?? '';
58
52
  if (isIssueUrl(value)) {
59
- return stripUrgentTaskforceLeaderTitleSuffix(value);
53
+ return extractLeadingGitHubUrl(value);
60
54
  }
61
55
  }
62
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProcClaudeInteractiveSessionRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeInteractiveSessionRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProcClaudeInteractiveSessionRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeInteractiveSessionRepository.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": "2.183.5",
3
+ "version": "2.183.6",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -1,5 +1,4 @@
1
1
  import { ClaudeInteractiveSession, ClaudeInteractiveSessionRepository } from '../../domain/usecases/adapter-interfaces/ClaudeInteractiveSessionRepository';
2
- export declare const URGENT_TASKFORCE_LEADER_TITLE_SUFFIX = "/urgent-taskforce-leader";
3
2
  export declare const extractIssueUrl: (commandArguments: string[]) => string | null;
4
3
  export declare class ProcClaudeInteractiveSessionRepository implements ClaudeInteractiveSessionRepository {
5
4
  private readonly procDirectory;
@@ -1 +1 @@
1
- {"version":3,"file":"ProcClaudeInteractiveSessionRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeInteractiveSessionRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,kCAAkC,EACnC,MAAM,6EAA6E,CAAC;AAOrF,eAAO,MAAM,oCAAoC,6BAA6B,CAAC;AAmB/E,eAAO,MAAM,eAAe,GAAI,kBAAkB,MAAM,EAAE,KAAG,MAAM,GAAG,IAUrE,CAAC;AAKF,qBAAa,sCAAuC,YAAW,kCAAkC;IAE7F,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,GAAE,MAA+B;IAGjE,uBAAuB,QAAO,wBAAwB,EAAE,CAStD;IAEF,OAAO,CAAC,wBAAwB,CAQ9B;IAEF,OAAO,CAAC,sBAAsB,CA6B5B;IAEF,OAAO,CAAC,oBAAoB,CAe1B;IAEF,OAAO,CAAC,WAAW,CA4BjB;CACH"}
1
+ {"version":3,"file":"ProcClaudeInteractiveSessionRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeInteractiveSessionRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,kCAAkC,EACnC,MAAM,6EAA6E,CAAC;AAmBrF,eAAO,MAAM,eAAe,GAAI,kBAAkB,MAAM,EAAE,KAAG,MAAM,GAAG,IAUrE,CAAC;AAKF,qBAAa,sCAAuC,YAAW,kCAAkC;IAE7F,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,GAAE,MAA+B;IAGjE,uBAAuB,QAAO,wBAAwB,EAAE,CAStD;IAEF,OAAO,CAAC,wBAAwB,CAQ9B;IAEF,OAAO,CAAC,sBAAsB,CA6B5B;IAEF,OAAO,CAAC,oBAAoB,CAe1B;IAEF,OAAO,CAAC,WAAW,CA4BjB;CACH"}