@trevonistrevon/pi-loop 0.5.7 → 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.
Files changed (53) hide show
  1. package/coverage/coverage-final.json +23 -23
  2. package/coverage/index.html +39 -39
  3. package/coverage/src/commands/index.html +1 -1
  4. package/coverage/src/commands/loop-command.ts.html +1 -1
  5. package/coverage/src/commands/tasks-command.ts.html +1 -1
  6. package/coverage/src/coordinator.ts.html +20 -20
  7. package/coverage/src/goal-coordinator.ts.html +1 -1
  8. package/coverage/src/goal-reducer.ts.html +1 -1
  9. package/coverage/src/goal-store.ts.html +1 -1
  10. package/coverage/src/goal-verifier.ts.html +1 -1
  11. package/coverage/src/index.html +33 -33
  12. package/coverage/src/index.ts.html +16 -16
  13. package/coverage/src/loop-parse.ts.html +62 -62
  14. package/coverage/src/loop-reducer.ts.html +21 -21
  15. package/coverage/src/monitor-completion-coordinator.ts.html +3 -3
  16. package/coverage/src/monitor-manager.ts.html +75 -69
  17. package/coverage/src/monitor-reducer.ts.html +28 -28
  18. package/coverage/src/notification-reducer.ts.html +6 -6
  19. package/coverage/src/reducer-backed-store.ts.html +28 -28
  20. package/coverage/src/runtime/index.html +45 -45
  21. package/coverage/src/runtime/monitor-ondone-runtime.ts.html +39 -39
  22. package/coverage/src/runtime/notification-runtime.ts.html +15 -15
  23. package/coverage/src/runtime/scope.ts.html +34 -34
  24. package/coverage/src/runtime/session-runtime.ts.html +58 -52
  25. package/coverage/src/runtime/task-backlog-runtime.ts.html +48 -48
  26. package/coverage/src/runtime/task-rpc.ts.html +80 -80
  27. package/coverage/src/scheduler.ts.html +35 -35
  28. package/coverage/src/store.ts.html +24 -24
  29. package/coverage/src/task-backlog-coordinator.ts.html +8 -8
  30. package/coverage/src/task-reducer.ts.html +39 -39
  31. package/coverage/src/task-store.ts.html +55 -55
  32. package/coverage/src/tools/index.html +43 -43
  33. package/coverage/src/tools/loop-tools.ts.html +94 -94
  34. package/coverage/src/tools/monitor-tools.ts.html +53 -53
  35. package/coverage/src/tools/native-task-tools.ts.html +66 -66
  36. package/coverage/src/trigger-system.ts.html +1 -1
  37. package/coverage/src/ui/index.html +1 -1
  38. package/coverage/src/ui/widget.ts.html +1 -1
  39. package/dist/commands/tasks-command.js +12 -9
  40. package/dist/monitor-manager.js +3 -1
  41. package/dist/runtime/session-runtime.js +3 -1
  42. package/dist/runtime/task-events.d.ts +15 -0
  43. package/dist/runtime/task-events.js +13 -0
  44. package/dist/runtime/task-rpc.js +2 -0
  45. package/dist/tools/native-task-tools.js +20 -9
  46. package/package.json +1 -1
  47. package/src/commands/tasks-command.ts +9 -9
  48. package/src/monitor-manager.ts +3 -1
  49. package/src/runtime/session-runtime.ts +3 -1
  50. package/src/runtime/task-events.ts +41 -0
  51. package/src/runtime/task-rpc.ts +2 -0
  52. package/src/tools/native-task-tools.ts +16 -9
  53. 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">83.95% </span>
26
+ <span class="strong">92.28% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>272/324</span>
28
+ <span class='fraction'>299/324</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">72.5% </span>
33
+ <span class="strong">85% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>116/160</span>
35
+ <span class='fraction'>136/160</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90.32% </span>
40
+ <span class="strong">93.65% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>56/62</span>
42
+ <span class='fraction'>59/63</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.11% </span>
47
+ <span class="strong">95.1% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>252/286</span>
49
+ <span class='fraction'>272/286</span>
50
50
  </div>
51
51
 
52
52
 
@@ -79,18 +79,18 @@
79
79
  </tr>
80
80
  </thead>
81
81
  <tbody><tr>
82
- <td class="file medium" data-value="monitor-ondone-runtime.ts"><a href="monitor-ondone-runtime.ts.html">monitor-ondone-runtime.ts</a></td>
83
- <td data-value="65.38" class="pic medium">
84
- <div class="chart"><div class="cover-fill" style="width: 65%"></div><div class="cover-empty" style="width: 35%"></div></div>
82
+ <td class="file high" data-value="monitor-ondone-runtime.ts"><a href="monitor-ondone-runtime.ts.html">monitor-ondone-runtime.ts</a></td>
83
+ <td data-value="92.3" class="pic high">
84
+ <div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
85
85
  </td>
86
- <td data-value="65.38" class="pct medium">65.38%</td>
87
- <td data-value="26" class="abs medium">17/26</td>
88
- <td data-value="25" class="pct low">25%</td>
89
- <td data-value="12" class="abs low">3/12</td>
86
+ <td data-value="92.3" class="pct high">92.3%</td>
87
+ <td data-value="26" class="abs high">24/26</td>
88
+ <td data-value="83.33" class="pct high">83.33%</td>
89
+ <td data-value="12" class="abs high">10/12</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
91
  <td data-value="5" class="abs high">5/5</td>
92
- <td data-value="69.56" class="pct medium">69.56%</td>
93
- <td data-value="23" class="abs medium">16/23</td>
92
+ <td data-value="100" class="pct high">100%</td>
93
+ <td data-value="23" class="abs high">23/23</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -109,18 +109,18 @@
109
109
  </tr>
110
110
 
111
111
  <tr>
112
- <td class="file medium" data-value="scope.ts"><a href="scope.ts.html">scope.ts</a></td>
113
- <td data-value="76.92" class="pic medium">
114
- <div class="chart"><div class="cover-fill" style="width: 76%"></div><div class="cover-empty" style="width: 24%"></div></div>
112
+ <td class="file high" data-value="scope.ts"><a href="scope.ts.html">scope.ts</a></td>
113
+ <td data-value="100" class="pic high">
114
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115
115
  </td>
116
- <td data-value="76.92" class="pct medium">76.92%</td>
117
- <td data-value="26" class="abs medium">20/26</td>
118
- <td data-value="78.57" class="pct medium">78.57%</td>
119
- <td data-value="28" class="abs medium">22/28</td>
116
+ <td data-value="100" class="pct high">100%</td>
117
+ <td data-value="26" class="abs high">26/26</td>
118
+ <td data-value="100" class="pct high">100%</td>
119
+ <td data-value="28" class="abs high">28/28</td>
120
120
  <td data-value="100" class="pct high">100%</td>
121
121
  <td data-value="2" class="abs high">2/2</td>
122
- <td data-value="88.88" class="pct high">88.88%</td>
123
- <td data-value="18" class="abs high">16/18</td>
122
+ <td data-value="100" class="pct high">100%</td>
123
+ <td data-value="18" class="abs high">18/18</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -133,20 +133,20 @@
133
133
  <td data-value="79.06" class="pct medium">79.06%</td>
134
134
  <td data-value="43" class="abs medium">34/43</td>
135
135
  <td data-value="100" class="pct high">100%</td>
136
- <td data-value="15" class="abs high">15/15</td>
136
+ <td data-value="16" class="abs high">16/16</td>
137
137
  <td data-value="94.31" class="pct high">94.31%</td>
138
138
  <td data-value="88" class="abs high">83/88</td>
139
139
  </tr>
140
140
 
141
141
  <tr>
142
142
  <td class="file high" data-value="task-backlog-runtime.ts"><a href="task-backlog-runtime.ts.html">task-backlog-runtime.ts</a></td>
143
- <td data-value="93.75" class="pic high">
144
- <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
143
+ <td data-value="95.83" class="pic high">
144
+ <div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
145
145
  </td>
146
- <td data-value="93.75" class="pct high">93.75%</td>
147
- <td data-value="48" class="abs high">45/48</td>
148
- <td data-value="76" class="pct medium">76%</td>
149
- <td data-value="25" class="abs medium">19/25</td>
146
+ <td data-value="95.83" class="pct high">95.83%</td>
147
+ <td data-value="48" class="abs high">46/48</td>
148
+ <td data-value="80" class="pct high">80%</td>
149
+ <td data-value="25" class="abs high">20/25</td>
150
150
  <td data-value="100" class="pct high">100%</td>
151
151
  <td data-value="10" class="abs high">10/10</td>
152
152
  <td data-value="100" class="pct high">100%</td>
@@ -154,18 +154,18 @@
154
154
  </tr>
155
155
 
156
156
  <tr>
157
- <td class="file medium" data-value="task-rpc.ts"><a href="task-rpc.ts.html">task-rpc.ts</a></td>
158
- <td data-value="66.66" class="pic medium">
159
- <div class="chart"><div class="cover-fill" style="width: 66%"></div><div class="cover-empty" style="width: 34%"></div></div>
157
+ <td class="file high" data-value="task-rpc.ts"><a href="task-rpc.ts.html">task-rpc.ts</a></td>
158
+ <td data-value="84.72" class="pic high">
159
+ <div class="chart"><div class="cover-fill" style="width: 84%"></div><div class="cover-empty" style="width: 16%"></div></div>
160
160
  </td>
161
- <td data-value="66.66" class="pct medium">66.66%</td>
162
- <td data-value="72" class="abs medium">48/72</td>
163
- <td data-value="54.16" class="pct medium">54.16%</td>
164
- <td data-value="24" class="abs medium">13/24</td>
165
- <td data-value="68.75" class="pct medium">68.75%</td>
166
- <td data-value="16" class="abs medium">11/16</td>
167
- <td data-value="70.14" class="pct medium">70.14%</td>
168
- <td data-value="67" class="abs medium">47/67</td>
161
+ <td data-value="84.72" class="pct high">84.72%</td>
162
+ <td data-value="72" class="abs high">61/72</td>
163
+ <td data-value="79.16" class="pct medium">79.16%</td>
164
+ <td data-value="24" class="abs medium">19/24</td>
165
+ <td data-value="81.25" class="pct high">81.25%</td>
166
+ <td data-value="16" class="abs high">13/16</td>
167
+ <td data-value="86.56" class="pct high">86.56%</td>
168
+ <td data-value="67" class="abs high">58/67</td>
169
169
  </tr>
170
170
 
171
171
  </tbody>
@@ -176,7 +176,7 @@
176
176
  <div class='footer quiet pad2 space-top1 center small'>
177
177
  Code coverage generated by
178
178
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
179
- at 2026-06-18T20:54:08.775Z
179
+ at 2026-06-19T00:56:38.236Z
180
180
  </div>
181
181
  <script src="../../prettify.js"></script>
182
182
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">65.38% </span>
26
+ <span class="strong">92.3% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>17/26</span>
28
+ <span class='fraction'>24/26</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">25% </span>
33
+ <span class="strong">83.33% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>3/12</span>
35
+ <span class='fraction'>10/12</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">69.56% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>16/23</span>
49
+ <span class='fraction'>23/23</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 medium'></div>
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>
@@ -164,30 +164,30 @@
164
164
  <span class="cline-any cline-neutral">&nbsp;</span>
165
165
  <span class="cline-any cline-neutral">&nbsp;</span>
166
166
  <span class="cline-any cline-neutral">&nbsp;</span>
167
- <span class="cline-any cline-yes">61x</span>
167
+ <span class="cline-any cline-yes">65x</span>
168
168
  <span class="cline-any cline-neutral">&nbsp;</span>
169
- <span class="cline-any cline-yes">61x</span>
170
- <span class="cline-any cline-yes">6x</span>
171
- <span class="cline-any cline-yes">6x</span>
169
+ <span class="cline-any cline-yes">65x</span>
170
+ <span class="cline-any cline-yes">8x</span>
171
+ <span class="cline-any cline-yes">8x</span>
172
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
173
  <span class="cline-any cline-neutral">&nbsp;</span>
174
- <span class="cline-any cline-yes">61x</span>
174
+ <span class="cline-any cline-yes">65x</span>
175
175
  <span class="cline-any cline-neutral">&nbsp;</span>
176
176
  <span class="cline-any cline-neutral">&nbsp;</span>
177
177
  <span class="cline-any cline-neutral">&nbsp;</span>
178
- <span class="cline-any cline-yes">6x</span>
179
- <span class="cline-any cline-yes">6x</span>
180
- <span class="cline-any cline-yes">6x</span>
181
- <span class="cline-any cline-yes">6x</span>
182
- <span class="cline-any cline-yes">6x</span>
183
- <span class="cline-any cline-yes">6x</span>
178
+ <span class="cline-any cline-yes">8x</span>
179
+ <span class="cline-any cline-yes">8x</span>
180
+ <span class="cline-any cline-yes">8x</span>
181
+ <span class="cline-any cline-yes">8x</span>
182
+ <span class="cline-any cline-yes">8x</span>
183
+ <span class="cline-any cline-yes">8x</span>
184
184
  <span class="cline-any cline-neutral">&nbsp;</span>
185
185
  <span class="cline-any cline-neutral">&nbsp;</span>
186
186
  <span class="cline-any cline-neutral">&nbsp;</span>
187
187
  <span class="cline-any cline-neutral">&nbsp;</span>
188
188
  <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-yes">7x</span>
190
- <span class="cline-any cline-yes">6x</span>
189
+ <span class="cline-any cline-yes">11x</span>
190
+ <span class="cline-any cline-yes">8x</span>
191
191
  <span class="cline-any cline-neutral">&nbsp;</span>
192
192
  <span class="cline-any cline-neutral">&nbsp;</span>
193
193
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -197,21 +197,21 @@
197
197
  <span class="cline-any cline-neutral">&nbsp;</span>
198
198
  <span class="cline-any cline-neutral">&nbsp;</span>
199
199
  <span class="cline-any cline-neutral">&nbsp;</span>
200
- <span class="cline-any cline-yes">7x</span>
201
- <span class="cline-any cline-yes">7x</span>
200
+ <span class="cline-any cline-yes">11x</span>
201
+ <span class="cline-any cline-yes">11x</span>
202
202
  <span class="cline-any cline-neutral">&nbsp;</span>
203
- <span class="cline-any cline-no">&nbsp;</span>
204
- <span class="cline-any cline-no">&nbsp;</span>
205
- <span class="cline-any cline-no">&nbsp;</span>
206
- <span class="cline-any cline-no">&nbsp;</span>
207
- <span class="cline-any cline-no">&nbsp;</span>
203
+ <span class="cline-any cline-yes">3x</span>
204
+ <span class="cline-any cline-yes">3x</span>
205
+ <span class="cline-any cline-yes">2x</span>
206
+ <span class="cline-any cline-yes">1x</span>
207
+ <span class="cline-any cline-yes">1x</span>
208
208
  <span class="cline-any cline-neutral">&nbsp;</span>
209
- <span class="cline-any cline-no">&nbsp;</span>
210
- <span class="cline-any cline-no">&nbsp;</span>
209
+ <span class="cline-any cline-yes">1x</span>
210
+ <span class="cline-any cline-yes">2x</span>
211
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
212
  <span class="cline-any cline-neutral">&nbsp;</span>
213
213
  <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-yes">61x</span>
214
+ <span class="cline-any cline-yes">65x</span>
215
215
  <span class="cline-any cline-neutral">&nbsp;</span>
216
216
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
217
217
  createCoordinator,
@@ -273,16 +273,16 @@ export function createMonitorOnDoneRuntime(options: MonitorOnDoneRuntimeOptions)
273
273
  };
274
274
  &nbsp;
275
275
  const registered = monitorManager.onComplete(monitorId, deliver);
276
- <span class="missing-if-branch" title="else path not taken" >E</span>if (registered) return;
276
+ if (registered) return;
277
277
  &nbsp;
278
- const monitor = <span class="cstat-no" title="statement not covered" >monitorManager.get(monitorId);</span>
279
- <span class="cstat-no" title="statement not covered" > if (monitor &amp;&amp; monitor.status !== "running") {</span>
280
- <span class="cstat-no" title="statement not covered" > if (monitor.status === "completed") {</span>
281
- <span class="cstat-no" title="statement not covered" > deliver();</span>
282
- <span class="cstat-no" title="statement not covered" > return;</span>
278
+ const monitor = monitorManager.get(monitorId);
279
+ if (monitor &amp;&amp; monitor.status !== "running") {
280
+ if (monitor.status === "completed") {
281
+ deliver();
282
+ return;
283
283
  }
284
- <span class="cstat-no" title="statement not covered" > debug?.(`onDone loop #${doneLoop.id} — monitor #${monitorId} already ${monitor.status}, expiring`);</span>
285
- <span class="cstat-no" title="statement not covered" > deleteLoop(doneLoop.id);</span>
284
+ debug?.(`onDone loop #${doneLoop.id} — monitor #${monitorId} already ${monitor.status}, expiring`);
285
+ deleteLoop(doneLoop.id);
286
286
  }
287
287
  }
288
288
  &nbsp;
@@ -295,7 +295,7 @@ export function createMonitorOnDoneRuntime(options: MonitorOnDoneRuntimeOptions)
295
295
  <div class='footer quiet pad2 space-top1 center small'>
296
296
  Code coverage generated by
297
297
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
298
- at 2026-06-18T20:54:08.775Z
298
+ at 2026-06-19T00:56:38.236Z
299
299
  </div>
300
300
  <script src="../../prettify.js"></script>
301
301
  <script>
@@ -352,9 +352,9 @@
352
352
  <span class="cline-any cline-neutral">&nbsp;</span>
353
353
  <span class="cline-any cline-neutral">&nbsp;</span>
354
354
  <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-yes">188x</span>
356
- <span class="cline-any cline-yes">188x</span>
357
- <span class="cline-any cline-yes">188x</span>
355
+ <span class="cline-any cline-yes">187x</span>
356
+ <span class="cline-any cline-yes">187x</span>
357
+ <span class="cline-any cline-yes">187x</span>
358
358
  <span class="cline-any cline-neutral">&nbsp;</span>
359
359
  <span class="cline-any cline-neutral">&nbsp;</span>
360
360
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -371,7 +371,7 @@
371
371
  <span class="cline-any cline-neutral">&nbsp;</span>
372
372
  <span class="cline-any cline-neutral">&nbsp;</span>
373
373
  <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-yes">42x</span>
374
+ <span class="cline-any cline-yes">41x</span>
375
375
  <span class="cline-any cline-neutral">&nbsp;</span>
376
376
  <span class="cline-any cline-neutral">&nbsp;</span>
377
377
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -379,21 +379,21 @@
379
379
  <span class="cline-any cline-neutral">&nbsp;</span>
380
380
  <span class="cline-any cline-neutral">&nbsp;</span>
381
381
  <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-yes">42x</span>
383
- <span class="cline-any cline-yes">42x</span>
384
- <span class="cline-any cline-yes">42x</span>
382
+ <span class="cline-any cline-yes">41x</span>
383
+ <span class="cline-any cline-yes">41x</span>
384
+ <span class="cline-any cline-yes">41x</span>
385
385
  <span class="cline-any cline-neutral">&nbsp;</span>
386
386
  <span class="cline-any cline-neutral">&nbsp;</span>
387
387
  <span class="cline-any cline-neutral">&nbsp;</span>
388
- <span class="cline-any cline-yes">42x</span>
388
+ <span class="cline-any cline-yes">41x</span>
389
389
  <span class="cline-any cline-neutral">&nbsp;</span>
390
390
  <span class="cline-any cline-neutral">&nbsp;</span>
391
391
  <span class="cline-any cline-neutral">&nbsp;</span>
392
392
  <span class="cline-any cline-neutral">&nbsp;</span>
393
393
  <span class="cline-any cline-neutral">&nbsp;</span>
394
394
  <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-yes">42x</span>
396
- <span class="cline-any cline-yes">42x</span>
395
+ <span class="cline-any cline-yes">41x</span>
396
+ <span class="cline-any cline-yes">41x</span>
397
397
  <span class="cline-any cline-neutral">&nbsp;</span>
398
398
  <span class="cline-any cline-neutral">&nbsp;</span>
399
399
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -431,7 +431,7 @@
431
431
  <span class="cline-any cline-neutral">&nbsp;</span>
432
432
  <span class="cline-any cline-neutral">&nbsp;</span>
433
433
  <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-yes">66x</span>
434
+ <span class="cline-any cline-yes">65x</span>
435
435
  <span class="cline-any cline-neutral">&nbsp;</span>
436
436
  <span class="cline-any cline-yes">61x</span>
437
437
  <span class="cline-any cline-yes">61x</span>
@@ -457,8 +457,8 @@
457
457
  <span class="cline-any cline-neutral">&nbsp;</span>
458
458
  <span class="cline-any cline-neutral">&nbsp;</span>
459
459
  <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-yes">42x</span>
461
- <span class="cline-any cline-yes">42x</span>
460
+ <span class="cline-any cline-yes">41x</span>
461
+ <span class="cline-any cline-yes">41x</span>
462
462
  <span class="cline-any cline-neutral">&nbsp;</span>
463
463
  <span class="cline-any cline-neutral">&nbsp;</span>
464
464
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -466,7 +466,7 @@
466
466
  <span class="cline-any cline-neutral">&nbsp;</span>
467
467
  <span class="cline-any cline-neutral">&nbsp;</span>
468
468
  <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-yes">42x</span>
469
+ <span class="cline-any cline-yes">41x</span>
470
470
  <span class="cline-any cline-neutral">&nbsp;</span>
471
471
  <span class="cline-any cline-neutral">&nbsp;</span>
472
472
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -706,7 +706,7 @@ export function createNotificationRuntime(options: NotificationRuntimeOptions):
706
706
  <div class='footer quiet pad2 space-top1 center small'>
707
707
  Code coverage generated by
708
708
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
709
- at 2026-06-18T20:54:08.775Z
709
+ at 2026-06-19T00:56:38.236Z
710
710
  </div>
711
711
  <script src="../../prettify.js"></script>
712
712
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">76.92% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>20/26</span>
28
+ <span class='fraction'>26/26</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">78.57% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>22/28</span>
35
+ <span class='fraction'>28/28</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.88% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>16/18</span>
49
+ <span class='fraction'>18/18</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 medium'></div>
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>
@@ -111,31 +111,31 @@
111
111
  <span class="cline-any cline-neutral">&nbsp;</span>
112
112
  <span class="cline-any cline-neutral">&nbsp;</span>
113
113
  <span class="cline-any cline-neutral">&nbsp;</span>
114
- <span class="cline-any cline-yes">107x</span>
115
- <span class="cline-any cline-yes">107x</span>
114
+ <span class="cline-any cline-yes">116x</span>
115
+ <span class="cline-any cline-yes">116x</span>
116
116
  <span class="cline-any cline-neutral">&nbsp;</span>
117
- <span class="cline-any cline-yes">107x</span>
118
- <span class="cline-any cline-yes">107x</span>
119
- <span class="cline-any cline-yes">107x</span>
120
- <span class="cline-any cline-yes">107x</span>
121
- <span class="cline-any cline-yes">107x</span>
122
- <span class="cline-any cline-yes">106x</span>
123
- <span class="cline-any cline-yes">46x</span>
117
+ <span class="cline-any cline-yes">116x</span>
118
+ <span class="cline-any cline-yes">115x</span>
119
+ <span class="cline-any cline-yes">113x</span>
120
+ <span class="cline-any cline-yes">112x</span>
121
+ <span class="cline-any cline-yes">111x</span>
122
+ <span class="cline-any cline-yes">109x</span>
123
+ <span class="cline-any cline-yes">47x</span>
124
124
  <span class="cline-any cline-neutral">&nbsp;</span>
125
- <span class="cline-any cline-yes">60x</span>
126
- <span class="cline-any cline-no">&nbsp;</span>
125
+ <span class="cline-any cline-yes">62x</span>
126
+ <span class="cline-any cline-yes">1x</span>
127
127
  <span class="cline-any cline-neutral">&nbsp;</span>
128
128
  <span class="cline-any cline-neutral">&nbsp;</span>
129
129
  <span class="cline-any cline-neutral">&nbsp;</span>
130
- <span class="cline-any cline-yes">45x</span>
131
- <span class="cline-any cline-yes">45x</span>
130
+ <span class="cline-any cline-yes">50x</span>
131
+ <span class="cline-any cline-yes">50x</span>
132
132
  <span class="cline-any cline-neutral">&nbsp;</span>
133
- <span class="cline-any cline-yes">45x</span>
134
- <span class="cline-any cline-yes">44x</span>
135
- <span class="cline-any cline-yes">15x</span>
133
+ <span class="cline-any cline-yes">50x</span>
134
+ <span class="cline-any cline-yes">48x</span>
135
+ <span class="cline-any cline-yes">16x</span>
136
136
  <span class="cline-any cline-neutral">&nbsp;</span>
137
- <span class="cline-any cline-yes">29x</span>
138
- <span class="cline-any cline-no">&nbsp;</span>
137
+ <span class="cline-any cline-yes">32x</span>
138
+ <span class="cline-any cline-yes">2x</span>
139
139
  <span class="cline-any cline-neutral">&nbsp;</span>
140
140
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { join, resolve } from "node:path";
141
141
  &nbsp;
@@ -151,16 +151,16 @@ export function resolveLoopStorePath(options: ScopeOptions, sessionId?: string):
151
151
  const cwd = options.cwd ?? process.cwd();
152
152
  const { piLoopEnv, loopScope } = options;
153
153
  &nbsp;
154
- <span class="missing-if-branch" title="if path not taken" >I</span>if (piLoopEnv === "off") <span class="cstat-no" title="statement not covered" >return undefined;</span>
155
- <span class="missing-if-branch" title="if path not taken" >I</span>if (piLoopEnv?.startsWith("/")) <span class="cstat-no" title="statement not covered" >return piLoopEnv;</span>
156
- <span class="missing-if-branch" title="if path not taken" >I</span>if (piLoopEnv?.startsWith(".")) <span class="cstat-no" title="statement not covered" >return resolve(piLoopEnv);</span>
157
- <span class="missing-if-branch" title="if path not taken" >I</span>if (piLoopEnv) <span class="cstat-no" title="statement not covered" >return piLoopEnv;</span>
154
+ if (piLoopEnv === "off") return undefined;
155
+ if (piLoopEnv?.startsWith("/")) return piLoopEnv;
156
+ if (piLoopEnv?.startsWith(".")) return resolve(piLoopEnv);
157
+ if (piLoopEnv) return piLoopEnv;
158
158
  if (loopScope === "memory") return undefined;
159
159
  if (loopScope === "session" &amp;&amp; sessionId) {
160
160
  return join(cwd, ".pi", "loops", `loops-${sessionId}.json`);
161
161
  }
162
- <span class="missing-if-branch" title="else path not taken" >E</span>if (loopScope === "session") return undefined;
163
- <span class="cstat-no" title="statement not covered" > return join(cwd, ".pi", "loops", "loops.json");</span>
162
+ if (loopScope === "session") return undefined;
163
+ return join(cwd, ".pi", "loops", "loops.json");
164
164
  }
165
165
  &nbsp;
166
166
  export function resolveTaskStorePath(options: ScopeOptions, sessionId?: string): string | undefined {
@@ -171,8 +171,8 @@ export function resolveTaskStorePath(options: ScopeOptions, sessionId?: string):
171
171
  if (loopScope === "session" &amp;&amp; sessionId) {
172
172
  return join(cwd, ".pi", "tasks", `tasks-${sessionId}.json`);
173
173
  }
174
- <span class="missing-if-branch" title="else path not taken" >E</span>if (loopScope === "session") return undefined;
175
- <span class="cstat-no" title="statement not covered" > return join(cwd, ".pi", "tasks", "tasks.json");</span>
174
+ if (loopScope === "session") return undefined;
175
+ return join(cwd, ".pi", "tasks", "tasks.json");
176
176
  }
177
177
  &nbsp;</pre></td></tr></table></pre>
178
178
 
@@ -181,7 +181,7 @@ export function resolveTaskStorePath(options: ScopeOptions, sessionId?: string):
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
184
- at 2026-06-18T20:54:08.775Z
184
+ at 2026-06-19T00:56:38.236Z
185
185
  </div>
186
186
  <script src="../../prettify.js"></script>
187
187
  <script>