@trevonistrevon/pi-loop 0.5.7 → 0.5.9

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 (61) hide show
  1. package/.release-please-manifest.json +3 -0
  2. package/Dockerfile +17 -0
  3. package/coverage/coverage-final.json +28 -27
  4. package/coverage/index.html +47 -47
  5. package/coverage/src/commands/index.html +15 -15
  6. package/coverage/src/commands/loop-command.ts.html +3 -3
  7. package/coverage/src/commands/tasks-command.ts.html +23 -23
  8. package/coverage/src/coordinator.ts.html +20 -20
  9. package/coverage/src/goal-coordinator.ts.html +1 -1
  10. package/coverage/src/goal-reducer.ts.html +1 -1
  11. package/coverage/src/goal-store.ts.html +1 -1
  12. package/coverage/src/goal-verifier.ts.html +1 -1
  13. package/coverage/src/index.html +42 -42
  14. package/coverage/src/index.ts.html +122 -74
  15. package/coverage/src/loop-parse.ts.html +61 -61
  16. package/coverage/src/loop-reducer.ts.html +25 -25
  17. package/coverage/src/monitor-completion-coordinator.ts.html +3 -3
  18. package/coverage/src/monitor-manager.ts.html +73 -67
  19. package/coverage/src/monitor-reducer.ts.html +27 -27
  20. package/coverage/src/notification-reducer.ts.html +7 -7
  21. package/coverage/src/reducer-backed-store.ts.html +53 -53
  22. package/coverage/src/runtime/index.html +66 -51
  23. package/coverage/src/runtime/monitor-ondone-runtime.ts.html +39 -39
  24. package/coverage/src/runtime/notification-runtime.ts.html +14 -14
  25. package/coverage/src/runtime/scope.ts.html +34 -34
  26. package/coverage/src/runtime/session-runtime.ts.html +63 -57
  27. package/coverage/src/runtime/task-backlog-runtime.ts.html +48 -48
  28. package/coverage/src/runtime/task-events.ts.html +208 -0
  29. package/coverage/src/runtime/task-rpc.ts.html +88 -82
  30. package/coverage/src/scheduler.ts.html +34 -34
  31. package/coverage/src/store.ts.html +21 -21
  32. package/coverage/src/task-backlog-coordinator.ts.html +8 -8
  33. package/coverage/src/task-reducer.ts.html +39 -39
  34. package/coverage/src/task-store.ts.html +55 -55
  35. package/coverage/src/tools/index.html +43 -43
  36. package/coverage/src/tools/loop-tools.ts.html +94 -94
  37. package/coverage/src/tools/monitor-tools.ts.html +53 -53
  38. package/coverage/src/tools/native-task-tools.ts.html +99 -78
  39. package/coverage/src/trigger-system.ts.html +8 -8
  40. package/coverage/src/ui/index.html +1 -1
  41. package/coverage/src/ui/widget.ts.html +5 -5
  42. package/dist/commands/tasks-command.js +12 -9
  43. package/dist/index.js +34 -19
  44. package/dist/monitor-manager.d.ts +4 -1
  45. package/dist/monitor-manager.js +8 -4
  46. package/dist/runtime/session-runtime.js +3 -1
  47. package/dist/runtime/task-events.d.ts +15 -0
  48. package/dist/runtime/task-events.js +13 -0
  49. package/dist/runtime/task-rpc.js +2 -0
  50. package/dist/tools/native-task-tools.js +20 -9
  51. package/docker-compose.yml +12 -0
  52. package/package.json +1 -1
  53. package/release-please-config.json +9 -0
  54. package/src/commands/tasks-command.ts +9 -9
  55. package/src/index.ts +37 -21
  56. package/src/monitor-manager.ts +14 -4
  57. package/src/runtime/session-runtime.ts +3 -1
  58. package/src/runtime/task-events.ts +41 -0
  59. package/src/runtime/task-rpc.ts +2 -0
  60. package/src/tools/native-task-tools.ts +16 -9
  61. package/vitest.config.ts +11 -7
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">91.05% </span>
26
+ <span class="strong">91.72% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>1048/1151</span>
28
+ <span class='fraction'>1064/1160</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.03% </span>
33
+ <span class="strong">83.79% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>504/607</span>
35
+ <span class='fraction'>512/611</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">97.95% </span>
40
+ <span class="strong">98.78% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>239/244</span>
42
+ <span class='fraction'>243/246</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">93.37% </span>
47
+ <span class="strong">94.01% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>944/1011</span>
49
+ <span class='fraction'>959/1020</span>
50
50
  </div>
51
51
 
52
52
 
@@ -155,17 +155,17 @@
155
155
 
156
156
  <tr>
157
157
  <td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
158
- <td data-value="94.89" class="pic high">
158
+ <td data-value="94.48" class="pic high">
159
159
  <div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
160
160
  </td>
161
- <td data-value="94.89" class="pct high">94.89%</td>
162
- <td data-value="137" class="abs high">130/137</td>
163
- <td data-value="88.63" class="pct high">88.63%</td>
164
- <td data-value="44" class="abs high">39/44</td>
165
- <td data-value="96.55" class="pct high">96.55%</td>
166
- <td data-value="58" class="abs high">56/58</td>
167
- <td data-value="96.72" class="pct high">96.72%</td>
168
- <td data-value="122" class="abs high">118/122</td>
161
+ <td data-value="94.48" class="pct high">94.48%</td>
162
+ <td data-value="145" class="abs high">137/145</td>
163
+ <td data-value="87.5" class="pct high">87.5%</td>
164
+ <td data-value="48" class="abs high">42/48</td>
165
+ <td data-value="96.66" class="pct high">96.66%</td>
166
+ <td data-value="60" class="abs high">58/60</td>
167
+ <td data-value="96.15" class="pct high">96.15%</td>
168
+ <td data-value="130" class="abs high">125/130</td>
169
169
  </tr>
170
170
 
171
171
  <tr>
@@ -215,17 +215,17 @@
215
215
 
216
216
  <tr>
217
217
  <td class="file high" data-value="monitor-manager.ts"><a href="monitor-manager.ts.html">monitor-manager.ts</a></td>
218
- <td data-value="85.98" class="pic high">
219
- <div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
218
+ <td data-value="86.11" class="pic high">
219
+ <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
220
220
  </td>
221
- <td data-value="85.98" class="pct high">85.98%</td>
222
- <td data-value="107" class="abs high">92/107</td>
221
+ <td data-value="86.11" class="pct high">86.11%</td>
222
+ <td data-value="108" class="abs high">93/108</td>
223
223
  <td data-value="81.08" class="pct high">81.08%</td>
224
224
  <td data-value="37" class="abs high">30/37</td>
225
225
  <td data-value="95.83" class="pct high">95.83%</td>
226
226
  <td data-value="24" class="abs high">23/24</td>
227
- <td data-value="90.62" class="pct high">90.62%</td>
228
- <td data-value="96" class="abs high">87/96</td>
227
+ <td data-value="90.72" class="pct high">90.72%</td>
228
+ <td data-value="97" class="abs high">88/97</td>
229
229
  </tr>
230
230
 
231
231
  <tr>
@@ -275,17 +275,17 @@
275
275
 
276
276
  <tr>
277
277
  <td class="file high" data-value="scheduler.ts"><a href="scheduler.ts.html">scheduler.ts</a></td>
278
- <td data-value="80.76" class="pic high">
279
- <div class="chart"><div class="cover-fill" style="width: 80%"></div><div class="cover-empty" style="width: 20%"></div></div>
278
+ <td data-value="86.53" class="pic high">
279
+ <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
280
280
  </td>
281
- <td data-value="80.76" class="pct high">80.76%</td>
282
- <td data-value="52" class="abs high">42/52</td>
283
- <td data-value="78.72" class="pct medium">78.72%</td>
284
- <td data-value="47" class="abs medium">37/47</td>
281
+ <td data-value="86.53" class="pct high">86.53%</td>
282
+ <td data-value="52" class="abs high">45/52</td>
283
+ <td data-value="85.1" class="pct high">85.1%</td>
284
+ <td data-value="47" class="abs high">40/47</td>
285
285
  <td data-value="100" class="pct high">100%</td>
286
286
  <td data-value="9" class="abs high">9/9</td>
287
- <td data-value="81.63" class="pct high">81.63%</td>
288
- <td data-value="49" class="abs high">40/49</td>
287
+ <td data-value="87.75" class="pct high">87.75%</td>
288
+ <td data-value="49" class="abs high">43/49</td>
289
289
  </tr>
290
290
 
291
291
  <tr>
@@ -335,17 +335,17 @@
335
335
 
336
336
  <tr>
337
337
  <td class="file high" data-value="task-store.ts"><a href="task-store.ts.html">task-store.ts</a></td>
338
- <td data-value="87.27" class="pic high">
339
- <div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
338
+ <td data-value="96.36" class="pic high">
339
+ <div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
340
340
  </td>
341
- <td data-value="87.27" class="pct high">87.27%</td>
342
- <td data-value="55" class="abs high">48/55</td>
343
- <td data-value="75" class="pct medium">75%</td>
344
- <td data-value="20" class="abs medium">15/20</td>
345
- <td data-value="90.9" class="pct high">90.9%</td>
346
- <td data-value="22" class="abs high">20/22</td>
347
- <td data-value="89.36" class="pct high">89.36%</td>
348
- <td data-value="47" class="abs high">42/47</td>
341
+ <td data-value="96.36" class="pct high">96.36%</td>
342
+ <td data-value="55" class="abs high">53/55</td>
343
+ <td data-value="85" class="pct high">85%</td>
344
+ <td data-value="20" class="abs high">17/20</td>
345
+ <td data-value="100" class="pct high">100%</td>
346
+ <td data-value="22" class="abs high">22/22</td>
347
+ <td data-value="97.87" class="pct high">97.87%</td>
348
+ <td data-value="47" class="abs high">46/47</td>
349
349
  </tr>
350
350
 
351
351
  <tr>
@@ -371,7 +371,7 @@
371
371
  <div class='footer quiet pad2 space-top1 center small'>
372
372
  Code coverage generated by
373
373
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
374
- at 2026-06-18T20:54:08.775Z
374
+ at 2026-06-23T21:49:18.784Z
375
375
  </div>
376
376
  <script src="../prettify.js"></script>
377
377
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">94.89% </span>
26
+ <span class="strong">94.48% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>130/137</span>
28
+ <span class='fraction'>137/145</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">88.63% </span>
33
+ <span class="strong">87.5% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>39/44</span>
35
+ <span class='fraction'>42/48</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">96.55% </span>
40
+ <span class="strong">96.66% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>56/58</span>
42
+ <span class='fraction'>58/60</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">96.72% </span>
47
+ <span class="strong">96.15% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>118/122</span>
49
+ <span class='fraction'>125/130</span>
50
50
  </div>
51
51
 
52
52
 
@@ -389,7 +389,23 @@
389
389
  <a name='L324'></a><a href='#L324'>324</a>
390
390
  <a name='L325'></a><a href='#L325'>325</a>
391
391
  <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
393
409
  <span class="cline-any cline-neutral">&nbsp;</span>
394
410
  <span class="cline-any cline-neutral">&nbsp;</span>
395
411
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -431,25 +447,29 @@
431
447
  <span class="cline-any cline-neutral">&nbsp;</span>
432
448
  <span class="cline-any cline-yes">3x</span>
433
449
  <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-yes">84x</span>
450
+ <span class="cline-any cline-yes">85x</span>
435
451
  <span class="cline-any cline-neutral">&nbsp;</span>
436
452
  <span class="cline-any cline-neutral">&nbsp;</span>
437
453
  <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-yes">61x</span>
439
- <span class="cline-any cline-yes">61x</span>
440
- <span class="cline-any cline-yes">61x</span>
454
+ <span class="cline-any cline-yes">1x</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
457
  <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-yes">152x</span>
458
+ <span class="cline-any cline-yes">63x</span>
459
+ <span class="cline-any cline-yes">63x</span>
460
+ <span class="cline-any cline-yes">63x</span>
443
461
  <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-yes">61x</span>
445
- <span class="cline-any cline-yes">61x</span>
462
+ <span class="cline-any cline-yes">155x</span>
446
463
  <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-yes">63x</span>
465
+ <span class="cline-any cline-yes">63x</span>
447
466
  <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-yes">61x</span>
449
467
  <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-yes">63x</span>
450
469
  <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-yes">61x</span>
452
- <span class="cline-any cline-yes">61x</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-yes">63x</span>
472
+ <span class="cline-any cline-yes">63x</span>
453
473
  <span class="cline-any cline-yes">156x</span>
454
474
  <span class="cline-any cline-yes">234x</span>
455
475
  <span class="cline-any cline-yes">171x</span>
@@ -462,21 +482,21 @@
462
482
  <span class="cline-any cline-yes">156x</span>
463
483
  <span class="cline-any cline-neutral">&nbsp;</span>
464
484
  <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-yes">61x</span>
466
- <span class="cline-any cline-yes">61x</span>
485
+ <span class="cline-any cline-yes">63x</span>
486
+ <span class="cline-any cline-yes">63x</span>
467
487
  <span class="cline-any cline-neutral">&nbsp;</span>
468
488
  <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-yes">61x</span>
489
+ <span class="cline-any cline-yes">63x</span>
470
490
  <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-yes">61x</span>
491
+ <span class="cline-any cline-yes">63x</span>
472
492
  <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-yes">61x</span>
493
+ <span class="cline-any cline-yes">63x</span>
474
494
  <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-yes">44x</span>
495
+ <span class="cline-any cline-yes">45x</span>
476
496
  <span class="cline-any cline-neutral">&nbsp;</span>
477
497
  <span class="cline-any cline-yes">2x</span>
478
498
  <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-yes">41x</span>
499
+ <span class="cline-any cline-yes">42x</span>
480
500
  <span class="cline-any cline-neutral">&nbsp;</span>
481
501
  <span class="cline-any cline-yes">1x</span>
482
502
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -487,14 +507,14 @@
487
507
  <span class="cline-any cline-neutral">&nbsp;</span>
488
508
  <span class="cline-any cline-neutral">&nbsp;</span>
489
509
  <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-yes">61x</span>
491
- <span class="cline-any cline-yes">61x</span>
510
+ <span class="cline-any cline-yes">63x</span>
511
+ <span class="cline-any cline-yes">63x</span>
492
512
  <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">61x</span>
494
- <span class="cline-any cline-yes">61x</span>
495
- <span class="cline-any cline-yes">61x</span>
513
+ <span class="cline-any cline-yes">63x</span>
514
+ <span class="cline-any cline-yes">63x</span>
515
+ <span class="cline-any cline-yes">63x</span>
496
516
  <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-yes">61x</span>
517
+ <span class="cline-any cline-yes">63x</span>
498
518
  <span class="cline-any cline-neutral">&nbsp;</span>
499
519
  <span class="cline-any cline-yes">11x</span>
500
520
  <span class="cline-any cline-yes">2x</span>
@@ -502,7 +522,7 @@
502
522
  <span class="cline-any cline-neutral">&nbsp;</span>
503
523
  <span class="cline-any cline-neutral">&nbsp;</span>
504
524
  <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-yes">61x</span>
525
+ <span class="cline-any cline-yes">63x</span>
506
526
  <span class="cline-any cline-neutral">&nbsp;</span>
507
527
  <span class="cline-any cline-yes">6x</span>
508
528
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -514,8 +534,8 @@
514
534
  <span class="cline-any cline-neutral">&nbsp;</span>
515
535
  <span class="cline-any cline-neutral">&nbsp;</span>
516
536
  <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-yes">32x</span>
518
- <span class="cline-any cline-yes">32x</span>
537
+ <span class="cline-any cline-yes">31x</span>
538
+ <span class="cline-any cline-yes">31x</span>
519
539
  <span class="cline-any cline-neutral">&nbsp;</span>
520
540
  <span class="cline-any cline-neutral">&nbsp;</span>
521
541
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -542,7 +562,7 @@
542
562
  <span class="cline-any cline-yes">9x</span>
543
563
  <span class="cline-any cline-neutral">&nbsp;</span>
544
564
  <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-yes">61x</span>
565
+ <span class="cline-any cline-yes">63x</span>
546
566
  <span class="cline-any cline-yes">41x</span>
547
567
  <span class="cline-any cline-yes">6x</span>
548
568
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -563,10 +583,10 @@
563
583
  <span class="cline-any cline-neutral">&nbsp;</span>
564
584
  <span class="cline-any cline-neutral">&nbsp;</span>
565
585
  <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">61x</span>
567
- <span class="cline-any cline-yes">61x</span>
568
- <span class="cline-any cline-yes">61x</span>
569
- <span class="cline-any cline-yes">61x</span>
586
+ <span class="cline-any cline-yes">63x</span>
587
+ <span class="cline-any cline-yes">63x</span>
588
+ <span class="cline-any cline-yes">63x</span>
589
+ <span class="cline-any cline-yes">63x</span>
570
590
  <span class="cline-any cline-neutral">&nbsp;</span>
571
591
  <span class="cline-any cline-neutral">&nbsp;</span>
572
592
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -602,7 +622,7 @@
602
622
  <span class="cline-any cline-neutral">&nbsp;</span>
603
623
  <span class="cline-any cline-neutral">&nbsp;</span>
604
624
  <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-yes">61x</span>
625
+ <span class="cline-any cline-yes">63x</span>
606
626
  <span class="cline-any cline-neutral">&nbsp;</span>
607
627
  <span class="cline-any cline-yes">51x</span>
608
628
  <span class="cline-any cline-yes">46x</span>
@@ -616,8 +636,8 @@
616
636
  <span class="cline-any cline-neutral">&nbsp;</span>
617
637
  <span class="cline-any cline-yes">1x</span>
618
638
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-yes">147x</span>
620
- <span class="cline-any cline-yes">152x</span>
639
+ <span class="cline-any cline-yes">169x</span>
640
+ <span class="cline-any cline-yes">174x</span>
621
641
  <span class="cline-any cline-yes">3x</span>
622
642
  <span class="cline-any cline-neutral">&nbsp;</span>
623
643
  <span class="cline-any cline-yes">100x</span>
@@ -635,7 +655,7 @@
635
655
  <span class="cline-any cline-neutral">&nbsp;</span>
636
656
  <span class="cline-any cline-neutral">&nbsp;</span>
637
657
  <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-yes">61x</span>
658
+ <span class="cline-any cline-yes">63x</span>
639
659
  <span class="cline-any cline-yes">34x</span>
640
660
  <span class="cline-any cline-neutral">&nbsp;</span>
641
661
  <span class="cline-any cline-yes">34x</span>
@@ -650,7 +670,7 @@
650
670
  <span class="cline-any cline-yes">33x</span>
651
671
  <span class="cline-any cline-neutral">&nbsp;</span>
652
672
  <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-yes">61x</span>
673
+ <span class="cline-any cline-yes">63x</span>
654
674
  <span class="cline-any cline-neutral">&nbsp;</span>
655
675
  <span class="cline-any cline-yes">38x</span>
656
676
  <span class="cline-any cline-yes">21x</span>
@@ -667,7 +687,7 @@
667
687
  <span class="cline-any cline-yes">7x</span>
668
688
  <span class="cline-any cline-neutral">&nbsp;</span>
669
689
  <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">61x</span>
690
+ <span class="cline-any cline-yes">63x</span>
671
691
  <span class="cline-any cline-neutral">&nbsp;</span>
672
692
  <span class="cline-any cline-yes">7x</span>
673
693
  <span class="cline-any cline-yes">29x</span>
@@ -677,7 +697,7 @@
677
697
  <span class="cline-any cline-neutral">&nbsp;</span>
678
698
  <span class="cline-any cline-neutral">&nbsp;</span>
679
699
  <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-yes">61x</span>
700
+ <span class="cline-any cline-yes">63x</span>
681
701
  <span class="cline-any cline-neutral">&nbsp;</span>
682
702
  <span class="cline-any cline-yes">1x</span>
683
703
  <span class="cline-any cline-yes">1x</span>
@@ -688,13 +708,12 @@
688
708
  <span class="cline-any cline-neutral">&nbsp;</span>
689
709
  <span class="cline-any cline-neutral">&nbsp;</span>
690
710
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">61x</span>
711
+ <span class="cline-any cline-yes">63x</span>
712
+ <span class="cline-any cline-yes">47x</span>
692
713
  <span class="cline-any cline-yes">46x</span>
693
- <span class="cline-any cline-yes">45x</span>
694
- <span class="cline-any cline-yes">45x</span>
695
- <span class="cline-any cline-yes">45x</span>
696
714
  <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">45x</span>
715
+ <span class="cline-any cline-yes">46x</span>
716
+ <span class="cline-any cline-yes">46x</span>
698
717
  <span class="cline-any cline-neutral">&nbsp;</span>
699
718
  <span class="cline-any cline-yes">2x</span>
700
719
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -703,7 +722,7 @@
703
722
  <span class="cline-any cline-neutral">&nbsp;</span>
704
723
  <span class="cline-any cline-neutral">&nbsp;</span>
705
724
  <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-yes">45x</span>
725
+ <span class="cline-any cline-yes">46x</span>
707
726
  <span class="cline-any cline-neutral">&nbsp;</span>
708
727
  <span class="cline-any cline-neutral">&nbsp;</span>
709
728
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -712,9 +731,22 @@
712
731
  <span class="cline-any cline-neutral">&nbsp;</span>
713
732
  <span class="cline-any cline-neutral">&nbsp;</span>
714
733
  <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-yes">1x</span>
735
+ <span class="cline-any cline-yes">1x</span>
736
+ <span class="cline-any cline-yes">1x</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-neutral">&nbsp;</span>
740
+ <span class="cline-any cline-neutral">&nbsp;</span>
741
+ <span class="cline-any cline-yes">45x</span>
742
+ <span class="cline-any cline-yes">45x</span>
715
743
  <span class="cline-any cline-yes">45x</span>
716
744
  <span class="cline-any cline-neutral">&nbsp;</span>
717
745
  <span class="cline-any cline-neutral">&nbsp;</span>
746
+ <span class="cline-any cline-yes">63x</span>
747
+ <span class="cline-any cline-yes">3x</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
750
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
719
751
  * @trevonistrevon/pi-loop — A pi extension providing cron/event-based agent re-wake loops and background process monitoring.
720
752
  *
@@ -760,6 +792,10 @@ function debug(...args: unknown[]) {
760
792
  <span class="missing-if-branch" title="if path not taken" >I</span>if (DEBUG) <span class="cstat-no" title="statement not covered" >console.error("[pi-loop]", ...args);</span>
761
793
  }
762
794
  &nbsp;
795
+ function isStaleExtensionContextError(error: unknown): boolean {
796
+ return error instanceof Error &amp;&amp; error.message.includes("extension ctx is stale");
797
+ }
798
+ &nbsp;
763
799
  export default function (pi: ExtensionAPI) {
764
800
  const piLoopEnv = process.env.PI_LOOP;
765
801
  const piLoopScope = process.env.PI_LOOP_SCOPE as "memory" | "session" | "project" | undefined;
@@ -1014,32 +1050,44 @@ export default function (pi: ExtensionAPI) {
1014
1050
  &nbsp;
1015
1051
  // ── Native task tools (only when pi-tasks is absent) ──
1016
1052
  &nbsp;
1017
- setTimeout(async () =&gt; {
1053
+ const nativeTaskFallbackTimer = setTimeout(() =&gt; {
1018
1054
  if (tasksAvailable || nativeTasksRegistered) return;
1019
- nativeTaskStore = new TaskStore(resolveTaskStorePath(getScopeOptions(), _sessionId));
1020
- nativeTasksRegistered = true;
1021
- const taskStore = nativeTaskStore;
1055
+ const taskStore = new TaskStore(resolveTaskStorePath(getScopeOptions(), _sessionId));
1022
1056
  &nbsp;
1023
- registerTasksCommand({
1024
- pi,
1025
- getNativeTaskStore: () =&gt; nativeTaskStore,
1026
- evaluateTaskBacklog,
1027
- updateWidget: () =&gt; {
1028
- widget.update();
1029
- },
1030
- });
1057
+ try {
1058
+ registerTasksCommand({
1059
+ pi,
1060
+ getNativeTaskStore: () =&gt; nativeTaskStore,
1061
+ evaluateTaskBacklog,
1062
+ updateWidget: () =&gt; {
1063
+ widget.update();
1064
+ },
1065
+ });
1031
1066
  &nbsp;
1032
- registerNativeTaskTools({
1033
- pi,
1034
- taskStore,
1035
- evaluateTaskBacklog,
1036
- updateWidget: () =&gt; {
1037
- widget.update();
1038
- },
1039
- });
1067
+ registerNativeTaskTools({
1068
+ pi,
1069
+ taskStore,
1070
+ evaluateTaskBacklog,
1071
+ updateWidget: () =&gt; {
1072
+ widget.update();
1073
+ },
1074
+ });
1075
+ } catch (error) {
1076
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (isStaleExtensionContextError(error)) {
1077
+ debug("native task fallback skipped: extension context went stale");
1078
+ return;
1079
+ }
1080
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
1081
+ }
1040
1082
  &nbsp;
1083
+ nativeTaskStore = taskStore;
1084
+ nativeTasksRegistered = true;
1041
1085
  debug("native task tools registered (pi-tasks not detected)");
1042
1086
  }, 6000);
1087
+ &nbsp;
1088
+ pi.on("session_shutdown", () =&gt; {
1089
+ clearTimeout(nativeTaskFallbackTimer);
1090
+ });
1043
1091
  }
1044
1092
  &nbsp;</pre></td></tr></table></pre>
1045
1093
 
@@ -1048,7 +1096,7 @@ export default function (pi: ExtensionAPI) {
1048
1096
  <div class='footer quiet pad2 space-top1 center small'>
1049
1097
  Code coverage generated by
1050
1098
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1051
- at 2026-06-18T20:54:08.775Z
1099
+ at 2026-06-23T21:49:18.784Z
1052
1100
  </div>
1053
1101
  <script src="../prettify.js"></script>
1054
1102
  <script>