@trevonistrevon/pi-loop 0.5.6 → 0.5.8
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/coverage/coverage-final.json +27 -27
- package/coverage/index.html +39 -39
- package/coverage/src/commands/index.html +1 -1
- package/coverage/src/commands/loop-command.ts.html +3 -3
- package/coverage/src/commands/tasks-command.ts.html +3 -3
- package/coverage/src/coordinator.ts.html +20 -20
- package/coverage/src/goal-coordinator.ts.html +1 -1
- package/coverage/src/goal-reducer.ts.html +1 -1
- package/coverage/src/goal-store.ts.html +1 -1
- package/coverage/src/goal-verifier.ts.html +1 -1
- package/coverage/src/index.html +33 -33
- package/coverage/src/index.ts.html +71 -71
- package/coverage/src/loop-parse.ts.html +62 -62
- package/coverage/src/loop-reducer.ts.html +28 -28
- package/coverage/src/monitor-completion-coordinator.ts.html +3 -3
- package/coverage/src/monitor-manager.ts.html +76 -70
- package/coverage/src/monitor-reducer.ts.html +28 -28
- package/coverage/src/notification-reducer.ts.html +15 -15
- package/coverage/src/reducer-backed-store.ts.html +54 -54
- package/coverage/src/runtime/index.html +53 -53
- package/coverage/src/runtime/monitor-ondone-runtime.ts.html +39 -39
- package/coverage/src/runtime/notification-runtime.ts.html +42 -42
- package/coverage/src/runtime/scope.ts.html +34 -34
- package/coverage/src/runtime/session-runtime.ts.html +141 -51
- package/coverage/src/runtime/task-backlog-runtime.ts.html +48 -48
- package/coverage/src/runtime/task-rpc.ts.html +81 -81
- package/coverage/src/scheduler.ts.html +41 -41
- package/coverage/src/store.ts.html +26 -26
- package/coverage/src/task-backlog-coordinator.ts.html +8 -8
- package/coverage/src/task-reducer.ts.html +39 -39
- package/coverage/src/task-store.ts.html +55 -55
- package/coverage/src/tools/index.html +43 -43
- package/coverage/src/tools/loop-tools.ts.html +93 -93
- package/coverage/src/tools/monitor-tools.ts.html +53 -53
- package/coverage/src/tools/native-task-tools.ts.html +66 -66
- package/coverage/src/trigger-system.ts.html +11 -11
- package/coverage/src/ui/index.html +1 -1
- package/coverage/src/ui/widget.ts.html +22 -22
- package/dist/commands/tasks-command.js +12 -9
- package/dist/monitor-manager.js +3 -1
- package/dist/runtime/session-runtime.js +29 -0
- package/dist/runtime/task-events.d.ts +15 -0
- package/dist/runtime/task-events.js +13 -0
- package/dist/runtime/task-rpc.js +2 -0
- package/dist/tools/native-task-tools.js +20 -9
- package/package.json +1 -1
- package/src/commands/tasks-command.ts +9 -9
- package/src/monitor-manager.ts +3 -1
- package/src/runtime/session-runtime.ts +30 -0
- package/src/runtime/task-events.ts +41 -0
- package/src/runtime/task-rpc.ts +2 -0
- package/src/tools/native-task-tools.ts +16 -9
- package/vitest.config.ts +7 -7
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">83.87% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>78/93</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">80.2% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>77/96</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>8/8</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">85.36% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>70/82</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -417,36 +417,36 @@
|
|
|
417
417
|
<span class="cline-any cline-neutral"> </span>
|
|
418
418
|
<span class="cline-any cline-neutral"> </span>
|
|
419
419
|
<span class="cline-any cline-neutral"> </span>
|
|
420
|
-
<span class="cline-any cline-yes">
|
|
420
|
+
<span class="cline-any cline-yes">55x</span>
|
|
421
421
|
<span class="cline-any cline-neutral"> </span>
|
|
422
422
|
<span class="cline-any cline-neutral"> </span>
|
|
423
423
|
<span class="cline-any cline-neutral"> </span>
|
|
424
|
-
<span class="cline-any cline-yes">
|
|
425
|
-
<span class="cline-any cline-yes">
|
|
426
|
-
<span class="cline-any cline-yes">
|
|
424
|
+
<span class="cline-any cline-yes">28x</span>
|
|
425
|
+
<span class="cline-any cline-yes">13x</span>
|
|
426
|
+
<span class="cline-any cline-yes">13x</span>
|
|
427
427
|
<span class="cline-any cline-no"> </span>
|
|
428
428
|
<span class="cline-any cline-neutral"> </span>
|
|
429
|
-
<span class="cline-any cline-yes">
|
|
430
|
-
<span class="cline-any cline-yes">
|
|
431
|
-
<span class="cline-any cline-
|
|
429
|
+
<span class="cline-any cline-yes">15x</span>
|
|
430
|
+
<span class="cline-any cline-yes">14x</span>
|
|
431
|
+
<span class="cline-any cline-yes">1x</span>
|
|
432
432
|
<span class="cline-any cline-neutral"> </span>
|
|
433
|
-
<span class="cline-any cline-
|
|
434
|
-
<span class="cline-any cline-
|
|
435
|
-
<span class="cline-any cline-
|
|
433
|
+
<span class="cline-any cline-yes">1x</span>
|
|
434
|
+
<span class="cline-any cline-yes">1x</span>
|
|
435
|
+
<span class="cline-any cline-yes">1x</span>
|
|
436
436
|
<span class="cline-any cline-no"> </span>
|
|
437
437
|
<span class="cline-any cline-neutral"> </span>
|
|
438
|
-
<span class="cline-any cline-
|
|
438
|
+
<span class="cline-any cline-yes">1x</span>
|
|
439
439
|
<span class="cline-any cline-no"> </span>
|
|
440
440
|
<span class="cline-any cline-neutral"> </span>
|
|
441
441
|
<span class="cline-any cline-neutral"> </span>
|
|
442
|
-
<span class="cline-any cline-yes">
|
|
442
|
+
<span class="cline-any cline-yes">27x</span>
|
|
443
443
|
<span class="cline-any cline-neutral"> </span>
|
|
444
444
|
<span class="cline-any cline-neutral"> </span>
|
|
445
445
|
<span class="cline-any cline-neutral"> </span>
|
|
446
|
-
<span class="cline-any cline-
|
|
447
|
-
<span class="cline-any cline-
|
|
448
|
-
<span class="cline-any cline-
|
|
449
|
-
<span class="cline-any cline-
|
|
446
|
+
<span class="cline-any cline-yes">3x</span>
|
|
447
|
+
<span class="cline-any cline-yes">3x</span>
|
|
448
|
+
<span class="cline-any cline-yes">2x</span>
|
|
449
|
+
<span class="cline-any cline-yes">1x</span>
|
|
450
450
|
<span class="cline-any cline-neutral"> </span>
|
|
451
451
|
<span class="cline-any cline-neutral"> </span>
|
|
452
452
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -465,9 +465,9 @@
|
|
|
465
465
|
<span class="cline-any cline-neutral"> </span>
|
|
466
466
|
<span class="cline-any cline-neutral"> </span>
|
|
467
467
|
<span class="cline-any cline-neutral"> </span>
|
|
468
|
-
<span class="cline-any cline-yes">
|
|
468
|
+
<span class="cline-any cline-yes">74x</span>
|
|
469
469
|
<span class="cline-any cline-neutral"> </span>
|
|
470
|
-
<span class="cline-any cline-yes">
|
|
470
|
+
<span class="cline-any cline-yes">74x</span>
|
|
471
471
|
<span class="cline-any cline-neutral"> </span>
|
|
472
472
|
<span class="cline-any cline-neutral"> </span>
|
|
473
473
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -535,21 +535,21 @@
|
|
|
535
535
|
<span class="cline-any cline-neutral"> </span>
|
|
536
536
|
<span class="cline-any cline-neutral"> </span>
|
|
537
537
|
<span class="cline-any cline-neutral"> </span>
|
|
538
|
-
<span class="cline-any cline-yes">
|
|
538
|
+
<span class="cline-any cline-yes">28x</span>
|
|
539
539
|
<span class="cline-any cline-neutral"> </span>
|
|
540
540
|
<span class="cline-any cline-neutral"> </span>
|
|
541
|
-
<span class="cline-any cline-yes">
|
|
541
|
+
<span class="cline-any cline-yes">28x</span>
|
|
542
542
|
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-yes">28x</span>
|
|
544
|
+
<span class="cline-any cline-yes">13x</span>
|
|
545
|
+
<span class="cline-any cline-yes">13x</span>
|
|
543
546
|
<span class="cline-any cline-yes">15x</span>
|
|
544
|
-
<span class="cline-any cline-yes">
|
|
545
|
-
<span class="cline-any cline-yes">4x</span>
|
|
546
|
-
<span class="cline-any cline-yes">11x</span>
|
|
547
|
-
<span class="cline-any cline-yes">11x</span>
|
|
547
|
+
<span class="cline-any cline-yes">14x</span>
|
|
548
548
|
<span class="cline-any cline-neutral"> </span>
|
|
549
|
-
<span class="cline-any cline-
|
|
550
|
-
<span class="cline-any cline-
|
|
551
|
-
<span class="cline-any cline-
|
|
552
|
-
<span class="cline-any cline-
|
|
549
|
+
<span class="cline-any cline-yes">1x</span>
|
|
550
|
+
<span class="cline-any cline-yes">1x</span>
|
|
551
|
+
<span class="cline-any cline-yes">1x</span>
|
|
552
|
+
<span class="cline-any cline-yes">1x</span>
|
|
553
553
|
<span class="cline-any cline-neutral"> </span>
|
|
554
554
|
<span class="cline-any cline-neutral"> </span>
|
|
555
555
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -557,10 +557,10 @@
|
|
|
557
557
|
<span class="cline-any cline-neutral"> </span>
|
|
558
558
|
<span class="cline-any cline-neutral"> </span>
|
|
559
559
|
<span class="cline-any cline-neutral"> </span>
|
|
560
|
-
<span class="cline-any cline-yes">
|
|
561
|
-
<span class="cline-any cline-yes">
|
|
560
|
+
<span class="cline-any cline-yes">28x</span>
|
|
561
|
+
<span class="cline-any cline-yes">28x</span>
|
|
562
562
|
<span class="cline-any cline-neutral"> </span>
|
|
563
|
-
<span class="cline-any cline-yes">
|
|
563
|
+
<span class="cline-any cline-yes">27x</span>
|
|
564
564
|
<span class="cline-any cline-neutral"> </span>
|
|
565
565
|
<span class="cline-any cline-neutral"> </span>
|
|
566
566
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -568,9 +568,9 @@
|
|
|
568
568
|
<span class="cline-any cline-neutral"> </span>
|
|
569
569
|
<span class="cline-any cline-neutral"> </span>
|
|
570
570
|
<span class="cline-any cline-neutral"> </span>
|
|
571
|
-
<span class="cline-any cline-yes">
|
|
571
|
+
<span class="cline-any cline-yes">28x</span>
|
|
572
572
|
<span class="cline-any cline-neutral"> </span>
|
|
573
|
-
<span class="cline-any cline-yes">
|
|
573
|
+
<span class="cline-any cline-yes">28x</span>
|
|
574
574
|
<span class="cline-any cline-no"> </span>
|
|
575
575
|
<span class="cline-any cline-no"> </span>
|
|
576
576
|
<span class="cline-any cline-no"> </span>
|
|
@@ -586,16 +586,16 @@
|
|
|
586
586
|
<span class="cline-any cline-neutral"> </span>
|
|
587
587
|
<span class="cline-any cline-neutral"> </span>
|
|
588
588
|
<span class="cline-any cline-neutral"> </span>
|
|
589
|
-
<span class="cline-any cline-yes">
|
|
590
|
-
<span class="cline-any cline-yes">
|
|
589
|
+
<span class="cline-any cline-yes">27x</span>
|
|
590
|
+
<span class="cline-any cline-yes">27x</span>
|
|
591
591
|
<span class="cline-any cline-neutral"> </span>
|
|
592
|
-
<span class="cline-any cline-yes">
|
|
592
|
+
<span class="cline-any cline-yes">27x</span>
|
|
593
593
|
<span class="cline-any cline-neutral"> </span>
|
|
594
594
|
<span class="cline-any cline-neutral"> </span>
|
|
595
595
|
<span class="cline-any cline-neutral"> </span>
|
|
596
596
|
<span class="cline-any cline-neutral"> </span>
|
|
597
597
|
<span class="cline-any cline-neutral"> </span>
|
|
598
|
-
<span class="cline-any cline-yes">
|
|
598
|
+
<span class="cline-any cline-yes">28x</span>
|
|
599
599
|
<span class="cline-any cline-neutral"> </span>
|
|
600
600
|
<span class="cline-any cline-neutral"> </span>
|
|
601
601
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -608,7 +608,7 @@
|
|
|
608
608
|
<span class="cline-any cline-neutral"> </span>
|
|
609
609
|
<span class="cline-any cline-neutral"> </span>
|
|
610
610
|
<span class="cline-any cline-neutral"> </span>
|
|
611
|
-
<span class="cline-any cline-yes">
|
|
611
|
+
<span class="cline-any cline-yes">74x</span>
|
|
612
612
|
<span class="cline-any cline-neutral"> </span>
|
|
613
613
|
<span class="cline-any cline-neutral"> </span>
|
|
614
614
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -616,35 +616,35 @@
|
|
|
616
616
|
<span class="cline-any cline-neutral"> </span>
|
|
617
617
|
<span class="cline-any cline-neutral"> </span>
|
|
618
618
|
<span class="cline-any cline-neutral"> </span>
|
|
619
|
-
<span class="cline-any cline-yes">
|
|
620
|
-
<span class="cline-any cline-yes">
|
|
619
|
+
<span class="cline-any cline-yes">18x</span>
|
|
620
|
+
<span class="cline-any cline-yes">18x</span>
|
|
621
621
|
<span class="cline-any cline-neutral"> </span>
|
|
622
|
-
<span class="cline-any cline-yes">
|
|
623
|
-
<span class="cline-any cline-yes">
|
|
624
|
-
<span class="cline-any cline-yes">
|
|
622
|
+
<span class="cline-any cline-yes">9x</span>
|
|
623
|
+
<span class="cline-any cline-yes">9x</span>
|
|
624
|
+
<span class="cline-any cline-yes">9x</span>
|
|
625
625
|
<span class="cline-any cline-neutral"> </span>
|
|
626
626
|
<span class="cline-any cline-neutral"> </span>
|
|
627
627
|
<span class="cline-any cline-neutral"> </span>
|
|
628
628
|
<span class="cline-any cline-neutral"> </span>
|
|
629
629
|
<span class="cline-any cline-neutral"> </span>
|
|
630
|
-
<span class="cline-any cline-yes">
|
|
631
|
-
<span class="cline-any cline-yes">
|
|
632
|
-
<span class="cline-any cline-yes">
|
|
633
|
-
<span class="cline-any cline-yes">
|
|
634
|
-
<span class="cline-any cline-yes">
|
|
630
|
+
<span class="cline-any cline-yes">9x</span>
|
|
631
|
+
<span class="cline-any cline-yes">9x</span>
|
|
632
|
+
<span class="cline-any cline-yes">9x</span>
|
|
633
|
+
<span class="cline-any cline-yes">9x</span>
|
|
634
|
+
<span class="cline-any cline-yes">9x</span>
|
|
635
635
|
<span class="cline-any cline-yes">4x</span>
|
|
636
636
|
<span class="cline-any cline-yes">4x</span>
|
|
637
637
|
<span class="cline-any cline-neutral"> </span>
|
|
638
|
-
<span class="cline-any cline-yes">
|
|
639
|
-
<span class="cline-any cline-yes">
|
|
640
|
-
<span class="cline-any cline-yes">
|
|
638
|
+
<span class="cline-any cline-yes">9x</span>
|
|
639
|
+
<span class="cline-any cline-yes">9x</span>
|
|
640
|
+
<span class="cline-any cline-yes">9x</span>
|
|
641
641
|
<span class="cline-any cline-neutral"> </span>
|
|
642
642
|
<span class="cline-any cline-neutral"> </span>
|
|
643
|
-
<span class="cline-any cline-yes">
|
|
643
|
+
<span class="cline-any cline-yes">9x</span>
|
|
644
644
|
<span class="cline-any cline-neutral"> </span>
|
|
645
645
|
<span class="cline-any cline-neutral"> </span>
|
|
646
646
|
<span class="cline-any cline-neutral"> </span>
|
|
647
|
-
<span class="cline-any cline-yes">
|
|
647
|
+
<span class="cline-any cline-yes">74x</span>
|
|
648
648
|
<span class="cline-any cline-neutral"> </span>
|
|
649
649
|
<span class="cline-any cline-neutral"> </span>
|
|
650
650
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -655,21 +655,21 @@
|
|
|
655
655
|
<span class="cline-any cline-neutral"> </span>
|
|
656
656
|
<span class="cline-any cline-neutral"> </span>
|
|
657
657
|
<span class="cline-any cline-neutral"> </span>
|
|
658
|
-
<span class="cline-any cline-yes">
|
|
658
|
+
<span class="cline-any cline-yes">9x</span>
|
|
659
659
|
<span class="cline-any cline-neutral"> </span>
|
|
660
|
-
<span class="cline-any cline-yes">
|
|
660
|
+
<span class="cline-any cline-yes">9x</span>
|
|
661
|
+
<span class="cline-any cline-yes">3x</span>
|
|
662
|
+
<span class="cline-any cline-yes">3x</span>
|
|
663
|
+
<span class="cline-any cline-yes">2x</span>
|
|
661
664
|
<span class="cline-any cline-yes">2x</span>
|
|
662
665
|
<span class="cline-any cline-yes">2x</span>
|
|
663
|
-
<span class="cline-any cline-yes">1x</span>
|
|
664
|
-
<span class="cline-any cline-yes">1x</span>
|
|
665
|
-
<span class="cline-any cline-yes">1x</span>
|
|
666
666
|
<span class="cline-any cline-neutral"> </span>
|
|
667
667
|
<span class="cline-any cline-neutral"> </span>
|
|
668
|
-
<span class="cline-any cline-yes">
|
|
669
|
-
<span class="cline-any cline-yes">
|
|
670
|
-
<span class="cline-any cline-yes">
|
|
671
|
-
<span class="cline-any cline-yes">
|
|
672
|
-
<span class="cline-any cline-yes">
|
|
668
|
+
<span class="cline-any cline-yes">6x</span>
|
|
669
|
+
<span class="cline-any cline-yes">6x</span>
|
|
670
|
+
<span class="cline-any cline-yes">6x</span>
|
|
671
|
+
<span class="cline-any cline-yes">6x</span>
|
|
672
|
+
<span class="cline-any cline-yes">2x</span>
|
|
673
673
|
<span class="cline-any cline-neutral"> </span>
|
|
674
674
|
<span class="cline-any cline-neutral"> </span>
|
|
675
675
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -732,26 +732,26 @@ function validateTrigger(trigger: Trigger): string | null {
|
|
|
732
732
|
<span class="cstat-no" title="statement not covered" > return `Invalid cron trigger. Expected 5 fields, got ${parts.length}: "${trigger.schedule}". Use formats like "5m", "1h", "0 9 * * 1-5", or set triggerType to "event" for event sources.`;</span>
|
|
733
733
|
}
|
|
734
734
|
} else if (trigger.type === "event") {
|
|
735
|
-
|
|
736
|
-
|
|
735
|
+
if (!trigger.source || trigger.source.trim().length === 0) {
|
|
736
|
+
return "Invalid event trigger. Event source must be non-empty (e.g., \"tool_execution_start\").";
|
|
737
737
|
}
|
|
738
|
-
} else <span class="
|
|
739
|
-
const cronParts =
|
|
740
|
-
<span class="
|
|
738
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>if (trigger.type === "hybrid") {
|
|
739
|
+
const cronParts = trigger.cron.trim().split(/\s+/);
|
|
740
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (cronParts.length !== 5) {
|
|
741
741
|
<span class="cstat-no" title="statement not covered" > return `Invalid hybrid trigger. Cron part must have 5 fields, got ${cronParts.length}: "${trigger.cron}".`;</span>
|
|
742
742
|
}
|
|
743
|
-
<span class="
|
|
743
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!trigger.event.source || trigger.event.source.trim().length === 0) {
|
|
744
744
|
<span class="cstat-no" title="statement not covered" > return "Invalid hybrid trigger. Event source must be non-empty (e.g., \"tool_execution_start\").";</span>
|
|
745
745
|
}
|
|
746
746
|
}
|
|
747
747
|
return null;
|
|
748
748
|
}
|
|
749
749
|
|
|
750
|
-
function
|
|
751
|
-
<span class="
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
750
|
+
function inferTriggerType(input: string): "cron" | "event" | "hybrid" {
|
|
751
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (input.includes("hybrid") || (input.includes("cron") && <span class="branch-2 cbranch-no" title="branch not covered" >input.includes("event"))) <span class="cstat-no" title="statement not covered" >r</span>eturn "hybrid";</span>
|
|
752
|
+
if (/^\d+\s*[smhd]$/i.test(input.trim())) return "cron";
|
|
753
|
+
if (/^(\*|\d+)/.test(input.trim()) && input.trim().split(/\s+/).length === 5) return "cron";
|
|
754
|
+
return "event";
|
|
755
755
|
}
|
|
756
756
|
|
|
757
757
|
function formatRemaining(ms: number): string {
|
|
@@ -843,18 +843,18 @@ Skip this tool when the task is a one-off check (just do it directly) or when th
|
|
|
843
843
|
const { trigger: triggerInput, prompt, recurring, autoTask, taskBacklog, triggerType, debounceMs, readOnly, maxFires } = params;
|
|
844
844
|
|
|
845
845
|
let trigger: Trigger;
|
|
846
|
-
const inferred = triggerType ??
|
|
846
|
+
const inferred = triggerType ?? inferTriggerType(triggerInput);
|
|
847
847
|
|
|
848
848
|
if (inferred === "cron") {
|
|
849
849
|
const parsed = parseInterval(triggerInput);
|
|
850
850
|
trigger = { type: "cron", schedule: parsed.cron };
|
|
851
851
|
} else if (inferred === "event") {
|
|
852
852
|
trigger = { type: "event", source: triggerInput };
|
|
853
|
-
} else
|
|
854
|
-
const cronPart =
|
|
855
|
-
const eventPart =
|
|
856
|
-
const
|
|
857
|
-
|
|
853
|
+
} else {
|
|
854
|
+
const cronPart = triggerInput.match(/cron:?\s*(\S+)/)?.[1] || triggerInput;
|
|
855
|
+
const eventPart = triggerInput.match(/event:?\s*(\S+)/)?.[1];
|
|
856
|
+
const parsed = parseInterval(cronPart);
|
|
857
|
+
trigger = {
|
|
858
858
|
type: "hybrid",
|
|
859
859
|
cron: parsed.cron,
|
|
860
860
|
event: { source: eventPart || "tool_execution_start" },
|
|
@@ -863,7 +863,7 @@ Skip this tool when the task is a one-off check (just do it directly) or when th
|
|
|
863
863
|
}
|
|
864
864
|
|
|
865
865
|
const validationError = validateTrigger(trigger);
|
|
866
|
-
|
|
866
|
+
if (validationError) return Promise.resolve(textResult(validationError));
|
|
867
867
|
|
|
868
868
|
const entry = getStore().create(trigger, prompt, {
|
|
869
869
|
recurring: recurring ?? (inferred !== "event"),
|
|
@@ -898,7 +898,7 @@ Skip this tool when the task is a one-off check (just do it directly) or when th
|
|
|
898
898
|
? `schedule: ${trigger.schedule}`
|
|
899
899
|
: trigger.type === "event"
|
|
900
900
|
? `event: ${trigger.source}`
|
|
901
|
-
:
|
|
901
|
+
: `hybrid: cron ${trigger.cron} + event ${trigger.event.source}`;
|
|
902
902
|
|
|
903
903
|
return Promise.resolve(textResult(
|
|
904
904
|
`Loop #${entry.id} created: ${entry.prompt.slice(0, 60)}\n` +
|
|
@@ -927,7 +927,7 @@ Use this before creating new loops to avoid duplicates, or to find IDs for LoopD
|
|
|
927
927
|
const lines: string[] = [];
|
|
928
928
|
for (const entry of loops) {
|
|
929
929
|
const triggerDesc = entry.trigger.type === "cron"
|
|
930
|
-
?
|
|
930
|
+
? `cron: ${entry.trigger.schedule}`
|
|
931
931
|
: entry.trigger.type === "event"
|
|
932
932
|
? `event: ${entry.trigger.source}`
|
|
933
933
|
: `hybrid: ${entry.trigger.cron} + ${entry.trigger.event.source}`;
|
|
@@ -985,7 +985,7 @@ Use "pause" to temporarily stop a loop without removing it. Use "delete" to perm
|
|
|
985
985
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
986
986
|
Code coverage generated by
|
|
987
987
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
988
|
-
at 2026-06-
|
|
988
|
+
at 2026-06-19T00:56:38.236Z
|
|
989
989
|
</div>
|
|
990
990
|
<script src="../../prettify.js"></script>
|
|
991
991
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">93.18% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>41/44</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">83.33% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>20/24</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>7/7</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">94.73% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>36/38</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -246,19 +246,19 @@
|
|
|
246
246
|
<span class="cline-any cline-neutral"> </span>
|
|
247
247
|
<span class="cline-any cline-neutral"> </span>
|
|
248
248
|
<span class="cline-any cline-neutral"> </span>
|
|
249
|
-
<span class="cline-any cline-yes">
|
|
249
|
+
<span class="cline-any cline-yes">25x</span>
|
|
250
250
|
<span class="cline-any cline-neutral"> </span>
|
|
251
251
|
<span class="cline-any cline-neutral"> </span>
|
|
252
252
|
<span class="cline-any cline-neutral"> </span>
|
|
253
|
-
<span class="cline-any cline-yes">
|
|
253
|
+
<span class="cline-any cline-yes">4x</span>
|
|
254
254
|
<span class="cline-any cline-no"> </span>
|
|
255
255
|
<span class="cline-any cline-no"> </span>
|
|
256
256
|
<span class="cline-any cline-neutral"> </span>
|
|
257
257
|
<span class="cline-any cline-neutral"> </span>
|
|
258
258
|
<span class="cline-any cline-neutral"> </span>
|
|
259
|
-
<span class="cline-any cline-yes">
|
|
259
|
+
<span class="cline-any cline-yes">68x</span>
|
|
260
260
|
<span class="cline-any cline-neutral"> </span>
|
|
261
|
-
<span class="cline-any cline-yes">
|
|
261
|
+
<span class="cline-any cline-yes">68x</span>
|
|
262
262
|
<span class="cline-any cline-neutral"> </span>
|
|
263
263
|
<span class="cline-any cline-neutral"> </span>
|
|
264
264
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -292,15 +292,15 @@
|
|
|
292
292
|
<span class="cline-any cline-neutral"> </span>
|
|
293
293
|
<span class="cline-any cline-neutral"> </span>
|
|
294
294
|
<span class="cline-any cline-neutral"> </span>
|
|
295
|
-
<span class="cline-any cline-yes">
|
|
296
|
-
<span class="cline-any cline-
|
|
295
|
+
<span class="cline-any cline-yes">25x</span>
|
|
296
|
+
<span class="cline-any cline-yes">1x</span>
|
|
297
297
|
<span class="cline-any cline-neutral"> </span>
|
|
298
298
|
<span class="cline-any cline-neutral"> </span>
|
|
299
|
-
<span class="cline-any cline-yes">
|
|
300
|
-
<span class="cline-any cline-yes">
|
|
299
|
+
<span class="cline-any cline-yes">13x</span>
|
|
300
|
+
<span class="cline-any cline-yes">13x</span>
|
|
301
301
|
<span class="cline-any cline-neutral"> </span>
|
|
302
|
-
<span class="cline-any cline-yes">
|
|
303
|
-
<span class="cline-any cline-yes">
|
|
302
|
+
<span class="cline-any cline-yes">13x</span>
|
|
303
|
+
<span class="cline-any cline-yes">13x</span>
|
|
304
304
|
<span class="cline-any cline-neutral"> </span>
|
|
305
305
|
<span class="cline-any cline-neutral"> </span>
|
|
306
306
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -310,13 +310,13 @@
|
|
|
310
310
|
<span class="cline-any cline-neutral"> </span>
|
|
311
311
|
<span class="cline-any cline-neutral"> </span>
|
|
312
312
|
<span class="cline-any cline-neutral"> </span>
|
|
313
|
-
<span class="cline-any cline-yes">
|
|
314
|
-
<span class="cline-any cline-yes">
|
|
315
|
-
<span class="cline-any cline-yes">
|
|
316
|
-
<span class="cline-any cline-yes">
|
|
313
|
+
<span class="cline-any cline-yes">8x</span>
|
|
314
|
+
<span class="cline-any cline-yes">8x</span>
|
|
315
|
+
<span class="cline-any cline-yes">8x</span>
|
|
316
|
+
<span class="cline-any cline-yes">8x</span>
|
|
317
317
|
<span class="cline-any cline-neutral"> </span>
|
|
318
318
|
<span class="cline-any cline-neutral"> </span>
|
|
319
|
-
<span class="cline-any cline-yes">
|
|
319
|
+
<span class="cline-any cline-yes">13x</span>
|
|
320
320
|
<span class="cline-any cline-neutral"> </span>
|
|
321
321
|
<span class="cline-any cline-neutral"> </span>
|
|
322
322
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -324,37 +324,37 @@
|
|
|
324
324
|
<span class="cline-any cline-neutral"> </span>
|
|
325
325
|
<span class="cline-any cline-neutral"> </span>
|
|
326
326
|
<span class="cline-any cline-neutral"> </span>
|
|
327
|
-
<span class="cline-any cline-yes">
|
|
327
|
+
<span class="cline-any cline-yes">68x</span>
|
|
328
328
|
<span class="cline-any cline-neutral"> </span>
|
|
329
329
|
<span class="cline-any cline-neutral"> </span>
|
|
330
330
|
<span class="cline-any cline-neutral"> </span>
|
|
331
331
|
<span class="cline-any cline-neutral"> </span>
|
|
332
332
|
<span class="cline-any cline-neutral"> </span>
|
|
333
|
+
<span class="cline-any cline-yes">6x</span>
|
|
334
|
+
<span class="cline-any cline-yes">6x</span>
|
|
335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
336
|
+
<span class="cline-any cline-yes">4x</span>
|
|
337
|
+
<span class="cline-any cline-yes">4x</span>
|
|
338
|
+
<span class="cline-any cline-yes">4x</span>
|
|
339
|
+
<span class="cline-any cline-yes">4x</span>
|
|
340
|
+
<span class="cline-any cline-yes">4x</span>
|
|
341
|
+
<span class="cline-any cline-yes">4x</span>
|
|
333
342
|
<span class="cline-any cline-yes">4x</span>
|
|
334
343
|
<span class="cline-any cline-yes">4x</span>
|
|
335
344
|
<span class="cline-any cline-neutral"> </span>
|
|
336
|
-
<span class="cline-any cline-yes">
|
|
337
|
-
<span class="cline-any cline-yes">
|
|
338
|
-
<span class="cline-any cline-yes">
|
|
339
|
-
<span class="cline-any cline-yes">
|
|
340
|
-
<span class="cline-any cline-yes">3x</span>
|
|
341
|
-
<span class="cline-any cline-yes">3x</span>
|
|
342
|
-
<span class="cline-any cline-yes">3x</span>
|
|
343
|
-
<span class="cline-any cline-yes">3x</span>
|
|
344
|
-
<span class="cline-any cline-neutral"> </span>
|
|
345
|
-
<span class="cline-any cline-yes">3x</span>
|
|
346
|
-
<span class="cline-any cline-no"> </span>
|
|
347
|
-
<span class="cline-any cline-no"> </span>
|
|
348
|
-
<span class="cline-any cline-no"> </span>
|
|
345
|
+
<span class="cline-any cline-yes">4x</span>
|
|
346
|
+
<span class="cline-any cline-yes">1x</span>
|
|
347
|
+
<span class="cline-any cline-yes">1x</span>
|
|
348
|
+
<span class="cline-any cline-yes">2x</span>
|
|
349
349
|
<span class="cline-any cline-neutral"> </span>
|
|
350
350
|
<span class="cline-any cline-neutral"> </span>
|
|
351
351
|
<span class="cline-any cline-neutral"> </span>
|
|
352
352
|
<span class="cline-any cline-neutral"> </span>
|
|
353
|
-
<span class="cline-any cline-yes">
|
|
353
|
+
<span class="cline-any cline-yes">4x</span>
|
|
354
354
|
<span class="cline-any cline-neutral"> </span>
|
|
355
355
|
<span class="cline-any cline-neutral"> </span>
|
|
356
356
|
<span class="cline-any cline-neutral"> </span>
|
|
357
|
-
<span class="cline-any cline-yes">
|
|
357
|
+
<span class="cline-any cline-yes">68x</span>
|
|
358
358
|
<span class="cline-any cline-neutral"> </span>
|
|
359
359
|
<span class="cline-any cline-neutral"> </span>
|
|
360
360
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -364,10 +364,10 @@
|
|
|
364
364
|
<span class="cline-any cline-neutral"> </span>
|
|
365
365
|
<span class="cline-any cline-neutral"> </span>
|
|
366
366
|
<span class="cline-any cline-neutral"> </span>
|
|
367
|
-
<span class="cline-any cline-yes">
|
|
368
|
-
<span class="cline-any cline-yes">
|
|
369
|
-
<span class="cline-any cline-yes">
|
|
370
|
-
<span class="cline-any cline-yes">
|
|
367
|
+
<span class="cline-any cline-yes">5x</span>
|
|
368
|
+
<span class="cline-any cline-yes">5x</span>
|
|
369
|
+
<span class="cline-any cline-yes">5x</span>
|
|
370
|
+
<span class="cline-any cline-yes">2x</span>
|
|
371
371
|
<span class="cline-any cline-neutral"> </span>
|
|
372
372
|
<span class="cline-any cline-neutral"> </span>
|
|
373
373
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -446,8 +446,8 @@ Pass onDone with a prompt and the monitor auto-creates a one-shot loop that fire
|
|
|
446
446
|
onDone: Type.Optional(Type.String({ description: "Prompt to run when the monitor completes. Auto-creates a one-shot completion wake — no need for a separate LoopCreate." })),
|
|
447
447
|
}),
|
|
448
448
|
execute(_toolCallId, params) {
|
|
449
|
-
|
|
450
|
-
|
|
449
|
+
if (getMonitorManager().list().filter((m) => m.status === "running").length >= 25) {
|
|
450
|
+
return Promise.resolve(textResult("Maximum of 25 running monitors reached. Stop some before creating new ones."));
|
|
451
451
|
}
|
|
452
452
|
|
|
453
453
|
const entry = getMonitorManager().create(params.command, params.description, params.timeout);
|
|
@@ -489,17 +489,17 @@ Pass onDone with a prompt and the monitor auto-creates a one-shot loop that fire
|
|
|
489
489
|
|
|
490
490
|
const lines: string[] = [];
|
|
491
491
|
for (const m of monitors) {
|
|
492
|
-
const icon = m.status === "running" ? ">" : m.status === "completed" ?
|
|
492
|
+
const icon = m.status === "running" ? ">" : m.status === "completed" ? "ok" : "x";
|
|
493
493
|
const age = Date.now() - m.startedAt;
|
|
494
494
|
const ageStr = formatRemaining(age);
|
|
495
495
|
let line = `${icon} #${m.id} [${m.status}] ${m.command.slice(0, 60)} — ${m.outputLines} lines (${ageStr})`;
|
|
496
|
-
|
|
496
|
+
if (m.exitCode !== undefined) line += ` exit=${m.exitCode}`;
|
|
497
497
|
lines.push(line);
|
|
498
498
|
|
|
499
|
-
|
|
500
|
-
const tail =
|
|
501
|
-
|
|
502
|
-
|
|
499
|
+
if (m.status !== "running" && m.outputBuffer.length > 0) {
|
|
500
|
+
const tail = m.outputBuffer.slice(-5);
|
|
501
|
+
for (const out of tail) {
|
|
502
|
+
lines.push(` | ${out.slice(0, 100)}`);
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
505
|
}
|
|
@@ -532,7 +532,7 @@ Use MonitorList to find the monitor ID, then stop it with this tool.`,
|
|
|
532
532
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
533
533
|
Code coverage generated by
|
|
534
534
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
535
|
-
at 2026-06-
|
|
535
|
+
at 2026-06-19T00:56:38.236Z
|
|
536
536
|
</div>
|
|
537
537
|
<script src="../../prettify.js"></script>
|
|
538
538
|
<script>
|