@trevonistrevon/pi-loop 0.5.9 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/AGENTS.md +52 -12
  3. package/CHANGELOG.md +59 -0
  4. package/CONTRIBUTING.md +13 -3
  5. package/README.md +47 -0
  6. package/coverage/coverage-final.json +35 -32
  7. package/coverage/index.html +64 -49
  8. package/coverage/src/api.ts.html +193 -0
  9. package/coverage/src/commands/index.html +32 -32
  10. package/coverage/src/commands/loop-command.ts.html +170 -170
  11. package/coverage/src/commands/tasks-command.ts.html +129 -129
  12. package/coverage/src/coordinator.ts.html +26 -26
  13. package/coverage/src/index.html +61 -106
  14. package/coverage/src/index.ts.html +224 -86
  15. package/coverage/src/loop-parse.ts.html +106 -73
  16. package/coverage/src/loop-reducer.ts.html +21 -21
  17. package/coverage/src/monitor-completion-coordinator.ts.html +1 -1
  18. package/coverage/src/monitor-manager.ts.html +95 -71
  19. package/coverage/src/monitor-reducer.ts.html +15 -15
  20. package/coverage/src/notification-reducer.ts.html +6 -6
  21. package/coverage/src/reducer-backed-store.ts.html +57 -57
  22. package/coverage/src/rpc/channels.ts.html +376 -0
  23. package/coverage/src/rpc/cross-extension-rpc.ts.html +541 -0
  24. package/coverage/src/rpc/index.html +131 -0
  25. package/coverage/src/runtime/index.html +68 -23
  26. package/coverage/src/{goal-coordinator.ts.html → runtime/loop-events.ts.html} +79 -73
  27. package/coverage/src/runtime/monitor-ondone-runtime.ts.html +5 -5
  28. package/coverage/src/runtime/native-task-rpc.ts.html +502 -0
  29. package/coverage/src/runtime/notification-runtime.ts.html +22 -22
  30. package/coverage/src/runtime/scope.ts.html +14 -14
  31. package/coverage/src/runtime/session-runtime.ts.html +32 -32
  32. package/coverage/src/runtime/task-backlog-runtime.ts.html +65 -23
  33. package/coverage/src/runtime/task-events.ts.html +2 -2
  34. package/coverage/src/runtime/task-mutations.ts.html +394 -0
  35. package/coverage/src/runtime/task-rpc.ts.html +102 -120
  36. package/coverage/src/scheduler.ts.html +29 -29
  37. package/coverage/src/store.ts.html +27 -27
  38. package/coverage/src/task-backlog-coordinator.ts.html +8 -8
  39. package/coverage/src/task-reducer.ts.html +42 -42
  40. package/coverage/src/task-store.ts.html +49 -49
  41. package/coverage/src/tools/index.html +39 -24
  42. package/coverage/src/tools/loop-tools.ts.html +12 -21
  43. package/coverage/src/tools/monitor-tools.ts.html +12 -21
  44. package/coverage/src/tools/native-task-tools.ts.html +57 -120
  45. package/coverage/src/tools/tool-result.ts.html +97 -0
  46. package/coverage/src/trigger-system.ts.html +12 -12
  47. package/coverage/src/ui/index.html +1 -1
  48. package/coverage/src/ui/widget.ts.html +23 -23
  49. package/dist/api.d.ts +11 -0
  50. package/dist/api.js +10 -0
  51. package/dist/commands/loop-command.js +2 -2
  52. package/dist/commands/tasks-command.js +3 -3
  53. package/dist/coordinator.d.ts +1 -1
  54. package/dist/index.js +48 -3
  55. package/dist/loop-parse.js +14 -5
  56. package/dist/reducer-backed-store.d.ts +1 -1
  57. package/dist/reducer-backed-store.js +1 -1
  58. package/dist/rpc/channels.d.ts +73 -0
  59. package/dist/rpc/channels.js +30 -0
  60. package/dist/rpc/cross-extension-rpc.d.ts +59 -0
  61. package/dist/rpc/cross-extension-rpc.js +117 -0
  62. package/dist/runtime/loop-events.d.ts +26 -0
  63. package/dist/runtime/loop-events.js +26 -0
  64. package/dist/runtime/native-task-rpc.d.ts +22 -0
  65. package/dist/runtime/native-task-rpc.js +50 -0
  66. package/dist/runtime/task-backlog-runtime.d.ts +3 -0
  67. package/dist/runtime/task-backlog-runtime.js +4 -1
  68. package/dist/runtime/task-mutations.d.ts +39 -0
  69. package/dist/runtime/task-mutations.js +68 -0
  70. package/dist/runtime/task-rpc.d.ts +4 -0
  71. package/dist/runtime/task-rpc.js +40 -58
  72. package/dist/scheduler.js +1 -1
  73. package/dist/tools/loop-tools.js +1 -3
  74. package/dist/tools/monitor-tools.js +1 -3
  75. package/dist/tools/native-task-tools.d.ts +2 -6
  76. package/dist/tools/native-task-tools.js +25 -55
  77. package/dist/tools/tool-result.d.ts +8 -0
  78. package/dist/tools/tool-result.js +4 -0
  79. package/docs/architecture/state-machine-migration.md +0 -44
  80. package/docs/architecture/state-machine-reducer-event-model.md +2 -3
  81. package/package.json +6 -1
  82. package/src/api.ts +36 -0
  83. package/src/commands/loop-command.ts +2 -2
  84. package/src/commands/tasks-command.ts +3 -3
  85. package/src/coordinator.ts +1 -1
  86. package/src/index.ts +49 -3
  87. package/src/loop-parse.ts +18 -7
  88. package/src/reducer-backed-store.ts +3 -3
  89. package/src/rpc/channels.ts +97 -0
  90. package/src/rpc/cross-extension-rpc.ts +152 -0
  91. package/src/runtime/loop-events.ts +60 -0
  92. package/src/runtime/native-task-rpc.ts +139 -0
  93. package/src/runtime/task-backlog-runtime.ts +14 -0
  94. package/src/runtime/task-mutations.ts +103 -0
  95. package/src/runtime/task-rpc.ts +48 -54
  96. package/src/scheduler.ts +1 -1
  97. package/src/tools/loop-tools.ts +1 -4
  98. package/src/tools/monitor-tools.ts +1 -4
  99. package/src/tools/native-task-tools.ts +31 -52
  100. package/src/tools/tool-result.ts +4 -0
  101. package/src/trigger-system.ts +4 -4
  102. package/vitest.config.ts +7 -7
  103. package/coverage/src/goal-reducer.ts.html +0 -982
  104. package/coverage/src/goal-store.ts.html +0 -742
  105. package/coverage/src/goal-verifier.ts.html +0 -808
  106. package/dist/goal-coordinator.d.ts +0 -22
  107. package/dist/goal-coordinator.js +0 -28
  108. package/dist/goal-reducer.d.ts +0 -98
  109. package/dist/goal-reducer.js +0 -190
  110. package/dist/goal-store.d.ts +0 -22
  111. package/dist/goal-store.js +0 -188
  112. package/dist/goal-types.d.ts +0 -82
  113. package/dist/goal-types.js +0 -1
  114. package/dist/goal-verifier.d.ts +0 -20
  115. package/dist/goal-verifier.js +0 -198
  116. package/docs/architecture/goal-state-schema.md +0 -505
  117. package/src/goal-coordinator.ts +0 -58
  118. package/src/goal-reducer.ts +0 -299
  119. package/src/goal-store.ts +0 -219
  120. package/src/goal-types.ts +0 -104
  121. package/src/goal-verifier.ts +0 -241
@@ -107,25 +107,25 @@
107
107
  <span class="cline-any cline-neutral">&nbsp;</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span>
109
109
  <span class="cline-any cline-neutral">&nbsp;</span>
110
- <span class="cline-any cline-yes">76x</span>
110
+ <span class="cline-any cline-yes">79x</span>
111
111
  <span class="cline-any cline-neutral">&nbsp;</span>
112
- <span class="cline-any cline-yes">76x</span>
113
- <span class="cline-any cline-yes">76x</span>
114
- <span class="cline-any cline-yes">76x</span>
115
- <span class="cline-any cline-yes">12x</span>
112
+ <span class="cline-any cline-yes">79x</span>
113
+ <span class="cline-any cline-yes">79x</span>
114
+ <span class="cline-any cline-yes">79x</span>
115
+ <span class="cline-any cline-yes">13x</span>
116
116
  <span class="cline-any cline-neutral">&nbsp;</span>
117
117
  <span class="cline-any cline-neutral">&nbsp;</span>
118
118
  <span class="cline-any cline-neutral">&nbsp;</span>
119
119
  <span class="cline-any cline-neutral">&nbsp;</span>
120
120
  <span class="cline-any cline-neutral">&nbsp;</span>
121
- <span class="cline-any cline-yes">64x</span>
121
+ <span class="cline-any cline-yes">66x</span>
122
122
  <span class="cline-any cline-yes">10x</span>
123
123
  <span class="cline-any cline-neutral">&nbsp;</span>
124
124
  <span class="cline-any cline-neutral">&nbsp;</span>
125
125
  <span class="cline-any cline-neutral">&nbsp;</span>
126
126
  <span class="cline-any cline-neutral">&nbsp;</span>
127
127
  <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-yes">54x</span>
128
+ <span class="cline-any cline-yes">56x</span>
129
129
  <span class="cline-any cline-neutral">&nbsp;</span>
130
130
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { ReducerEffect, ReducerEvent } from "./coordinator.js";
131
131
  &nbsp;
@@ -166,7 +166,7 @@ export function reduceTaskBacklogEvent(event: TaskBacklogEvent): TaskBacklogEffe
166
166
  <div class='footer quiet pad2 space-top1 center small'>
167
167
  Code coverage generated by
168
168
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
169
- at 2026-06-23T21:49:18.784Z
169
+ at 2026-07-02T19:31:50.067Z
170
170
  </div>
171
171
  <script src="../prettify.js"></script>
172
172
  <script>
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">95.45% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>21/22</span>
35
+ <span class='fraction'>22/22</span>
36
36
  </div>
37
37
 
38
38
 
@@ -289,17 +289,17 @@
289
289
  <span class="cline-any cline-neutral">&nbsp;</span>
290
290
  <span class="cline-any cline-neutral">&nbsp;</span>
291
291
  <span class="cline-any cline-neutral">&nbsp;</span>
292
- <span class="cline-any cline-yes">146x</span>
292
+ <span class="cline-any cline-yes">184x</span>
293
293
  <span class="cline-any cline-neutral">&nbsp;</span>
294
294
  <span class="cline-any cline-neutral">&nbsp;</span>
295
295
  <span class="cline-any cline-neutral">&nbsp;</span>
296
296
  <span class="cline-any cline-neutral">&nbsp;</span>
297
297
  <span class="cline-any cline-neutral">&nbsp;</span>
298
298
  <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-yes">147x</span>
300
- <span class="cline-any cline-yes">89x</span>
301
- <span class="cline-any cline-yes">89x</span>
302
- <span class="cline-any cline-yes">89x</span>
299
+ <span class="cline-any cline-yes">185x</span>
300
+ <span class="cline-any cline-yes">111x</span>
301
+ <span class="cline-any cline-yes">111x</span>
302
+ <span class="cline-any cline-yes">111x</span>
303
303
  <span class="cline-any cline-neutral">&nbsp;</span>
304
304
  <span class="cline-any cline-neutral">&nbsp;</span>
305
305
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -308,67 +308,67 @@
308
308
  <span class="cline-any cline-neutral">&nbsp;</span>
309
309
  <span class="cline-any cline-neutral">&nbsp;</span>
310
310
  <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-yes">89x</span>
312
- <span class="cline-any cline-yes">89x</span>
311
+ <span class="cline-any cline-yes">111x</span>
312
+ <span class="cline-any cline-yes">111x</span>
313
313
  <span class="cline-any cline-neutral">&nbsp;</span>
314
314
  <span class="cline-any cline-neutral">&nbsp;</span>
315
315
  <span class="cline-any cline-neutral">&nbsp;</span>
316
316
  <span class="cline-any cline-neutral">&nbsp;</span>
317
317
  <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-yes">58x</span>
319
- <span class="cline-any cline-yes">7x</span>
320
- <span class="cline-any cline-yes">7x</span>
321
- <span class="cline-any cline-yes">7x</span>
322
- <span class="cline-any cline-yes">12x</span>
318
+ <span class="cline-any cline-yes">74x</span>
323
319
  <span class="cline-any cline-yes">8x</span>
324
320
  <span class="cline-any cline-yes">8x</span>
321
+ <span class="cline-any cline-yes">8x</span>
322
+ <span class="cline-any cline-yes">13x</span>
323
+ <span class="cline-any cline-yes">9x</span>
324
+ <span class="cline-any cline-yes">9x</span>
325
325
  <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-yes">7x</span>
326
+ <span class="cline-any cline-yes">8x</span>
327
327
  <span class="cline-any cline-neutral">&nbsp;</span>
328
328
  <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-yes">51x</span>
330
- <span class="cline-any cline-yes">51x</span>
331
- <span class="cline-any cline-yes">51x</span>
329
+ <span class="cline-any cline-yes">66x</span>
330
+ <span class="cline-any cline-yes">66x</span>
331
+ <span class="cline-any cline-yes">66x</span>
332
332
  <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-yes">50x</span>
334
- <span class="cline-any cline-yes">2x</span>
335
- <span class="cline-any cline-yes">2x</span>
336
- <span class="cline-any cline-yes">2x</span>
333
+ <span class="cline-any cline-yes">65x</span>
334
+ <span class="cline-any cline-yes">3x</span>
335
+ <span class="cline-any cline-yes">3x</span>
336
+ <span class="cline-any cline-yes">3x</span>
337
337
  <span class="cline-any cline-neutral">&nbsp;</span>
338
338
  <span class="cline-any cline-neutral">&nbsp;</span>
339
339
  <span class="cline-any cline-neutral">&nbsp;</span>
340
340
  <span class="cline-any cline-neutral">&nbsp;</span>
341
341
  <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-yes">48x</span>
343
- <span class="cline-any cline-yes">48x</span>
342
+ <span class="cline-any cline-yes">62x</span>
343
+ <span class="cline-any cline-yes">62x</span>
344
344
  <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">48x</span>
346
- <span class="cline-any cline-yes">10x</span>
347
- <span class="cline-any cline-yes">10x</span>
345
+ <span class="cline-any cline-yes">62x</span>
346
+ <span class="cline-any cline-yes">13x</span>
347
+ <span class="cline-any cline-yes">13x</span>
348
348
  <span class="cline-any cline-neutral">&nbsp;</span>
349
349
  <span class="cline-any cline-neutral">&nbsp;</span>
350
- <span class="cline-any cline-yes">48x</span>
351
- <span class="cline-any cline-yes">25x</span>
352
- <span class="cline-any cline-yes">25x</span>
353
- <span class="cline-any cline-yes">25x</span>
350
+ <span class="cline-any cline-yes">62x</span>
351
+ <span class="cline-any cline-yes">31x</span>
352
+ <span class="cline-any cline-yes">31x</span>
353
+ <span class="cline-any cline-yes">31x</span>
354
354
  <span class="cline-any cline-neutral">&nbsp;</span>
355
355
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">48x</span>
357
- <span class="cline-any cline-yes">9x</span>
358
- <span class="cline-any cline-yes">9x</span>
356
+ <span class="cline-any cline-yes">62x</span>
357
+ <span class="cline-any cline-yes">11x</span>
358
+ <span class="cline-any cline-yes">11x</span>
359
359
  <span class="cline-any cline-neutral">&nbsp;</span>
360
360
  <span class="cline-any cline-neutral">&nbsp;</span>
361
361
  <span class="cline-any cline-neutral">&nbsp;</span>
362
362
  <span class="cline-any cline-neutral">&nbsp;</span>
363
363
  <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-yes">48x</span>
365
- <span class="cline-any cline-yes">4x</span>
366
- <span class="cline-any cline-yes">4x</span>
367
- <span class="cline-any cline-yes">4x</span>
364
+ <span class="cline-any cline-yes">62x</span>
365
+ <span class="cline-any cline-yes">7x</span>
366
+ <span class="cline-any cline-yes">7x</span>
367
+ <span class="cline-any cline-yes">7x</span>
368
368
  <span class="cline-any cline-neutral">&nbsp;</span>
369
369
  <span class="cline-any cline-neutral">&nbsp;</span>
370
- <span class="cline-any cline-yes">48x</span>
371
- <span class="cline-any cline-yes">48x</span>
370
+ <span class="cline-any cline-yes">62x</span>
371
+ <span class="cline-any cline-yes">62x</span>
372
372
  <span class="cline-any cline-neutral">&nbsp;</span>
373
373
  <span class="cline-any cline-neutral">&nbsp;</span>
374
374
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -517,7 +517,7 @@ export function reduceTaskState(state: TaskReducerState, event: TaskReducerEvent
517
517
  }
518
518
  &nbsp;
519
519
  if (event.type === "TASK_UPDATED") {
520
- <span class="missing-if-branch" title="else path not taken" >E</span>if (event.payload.subject !== undefined) task.subject = event.payload.subject;
520
+ if (event.payload.subject !== undefined) task.subject = event.payload.subject;
521
521
  if (event.payload.description !== undefined) task.description = event.payload.description;
522
522
  task.updatedAt = event.at;
523
523
  }
@@ -535,7 +535,7 @@ export function reduceTaskState(state: TaskReducerState, event: TaskReducerEvent
535
535
  <div class='footer quiet pad2 space-top1 center small'>
536
536
  Code coverage generated by
537
537
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
538
- at 2026-06-23T21:49:18.784Z
538
+ at 2026-07-02T19:31:50.067Z
539
539
  </div>
540
540
  <script src="../prettify.js"></script>
541
541
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">96.36% </span>
26
+ <span class="strong">94.54% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>53/55</span>
28
+ <span class='fraction'>52/55</span>
29
29
  </div>
30
30
 
31
31
 
@@ -216,46 +216,46 @@
216
216
  <span class="cline-any cline-neutral">&nbsp;</span>
217
217
  <span class="cline-any cline-neutral">&nbsp;</span>
218
218
  <span class="cline-any cline-neutral">&nbsp;</span>
219
- <span class="cline-any cline-yes">7x</span>
220
- <span class="cline-any cline-yes">7x</span>
219
+ <span class="cline-any cline-yes">9x</span>
220
+ <span class="cline-any cline-yes">9x</span>
221
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
222
  <span class="cline-any cline-neutral">&nbsp;</span>
223
223
  <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-yes">75x</span>
224
+ <span class="cline-any cline-yes">108x</span>
225
225
  <span class="cline-any cline-neutral">&nbsp;</span>
226
226
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">139x</span>
228
- <span class="cline-any cline-yes">139x</span>
229
- <span class="cline-any cline-yes">139x</span>
230
- <span class="cline-any cline-yes">77x</span>
231
- <span class="cline-any cline-yes">165x</span>
227
+ <span class="cline-any cline-yes">177x</span>
228
+ <span class="cline-any cline-yes">177x</span>
229
+ <span class="cline-any cline-yes">177x</span>
230
+ <span class="cline-any cline-yes">99x</span>
231
+ <span class="cline-any cline-yes">178x</span>
232
232
  <span class="cline-any cline-neutral">&nbsp;</span>
233
233
  <span class="cline-any cline-neutral">&nbsp;</span>
234
234
  <span class="cline-any cline-neutral">&nbsp;</span>
235
235
  <span class="cline-any cline-neutral">&nbsp;</span>
236
236
  <span class="cline-any cline-neutral">&nbsp;</span>
237
237
  <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-yes">88x</span>
239
- <span class="cline-any cline-yes">88x</span>
238
+ <span class="cline-any cline-yes">110x</span>
239
+ <span class="cline-any cline-yes">110x</span>
240
240
  <span class="cline-any cline-no">&nbsp;</span>
241
241
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">88x</span>
243
- <span class="cline-any cline-yes">88x</span>
242
+ <span class="cline-any cline-yes">110x</span>
243
+ <span class="cline-any cline-yes">110x</span>
244
244
  <span class="cline-any cline-neutral">&nbsp;</span>
245
245
  <span class="cline-any cline-neutral">&nbsp;</span>
246
246
  <span class="cline-any cline-neutral">&nbsp;</span>
247
247
  <span class="cline-any cline-neutral">&nbsp;</span>
248
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
249
  <span class="cline-any cline-neutral">&nbsp;</span>
250
- <span class="cline-any cline-yes">88x</span>
250
+ <span class="cline-any cline-yes">110x</span>
251
251
  <span class="cline-any cline-neutral">&nbsp;</span>
252
252
  <span class="cline-any cline-neutral">&nbsp;</span>
253
253
  <span class="cline-any cline-neutral">&nbsp;</span>
254
254
  <span class="cline-any cline-neutral">&nbsp;</span>
255
- <span class="cline-any cline-yes">10x</span>
256
- <span class="cline-any cline-yes">10x</span>
257
- <span class="cline-any cline-yes">10x</span>
258
- <span class="cline-any cline-yes">9x</span>
255
+ <span class="cline-any cline-yes">13x</span>
256
+ <span class="cline-any cline-yes">13x</span>
257
+ <span class="cline-any cline-yes">13x</span>
258
+ <span class="cline-any cline-yes">12x</span>
259
259
  <span class="cline-any cline-neutral">&nbsp;</span>
260
260
  <span class="cline-any cline-neutral">&nbsp;</span>
261
261
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -263,15 +263,15 @@
263
263
  <span class="cline-any cline-neutral">&nbsp;</span>
264
264
  <span class="cline-any cline-neutral">&nbsp;</span>
265
265
  <span class="cline-any cline-neutral">&nbsp;</span>
266
- <span class="cline-any cline-yes">9x</span>
266
+ <span class="cline-any cline-yes">12x</span>
267
267
  <span class="cline-any cline-neutral">&nbsp;</span>
268
268
  <span class="cline-any cline-neutral">&nbsp;</span>
269
269
  <span class="cline-any cline-neutral">&nbsp;</span>
270
270
  <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-yes">25x</span>
272
- <span class="cline-any cline-yes">25x</span>
273
- <span class="cline-any cline-yes">25x</span>
274
- <span class="cline-any cline-yes">24x</span>
271
+ <span class="cline-any cline-yes">31x</span>
272
+ <span class="cline-any cline-yes">31x</span>
273
+ <span class="cline-any cline-yes">31x</span>
274
+ <span class="cline-any cline-yes">30x</span>
275
275
  <span class="cline-any cline-neutral">&nbsp;</span>
276
276
  <span class="cline-any cline-neutral">&nbsp;</span>
277
277
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -279,15 +279,15 @@
279
279
  <span class="cline-any cline-neutral">&nbsp;</span>
280
280
  <span class="cline-any cline-neutral">&nbsp;</span>
281
281
  <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-yes">24x</span>
282
+ <span class="cline-any cline-yes">30x</span>
283
283
  <span class="cline-any cline-neutral">&nbsp;</span>
284
284
  <span class="cline-any cline-neutral">&nbsp;</span>
285
285
  <span class="cline-any cline-neutral">&nbsp;</span>
286
286
  <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-yes">9x</span>
288
- <span class="cline-any cline-yes">9x</span>
289
- <span class="cline-any cline-yes">9x</span>
290
- <span class="cline-any cline-yes">8x</span>
287
+ <span class="cline-any cline-yes">11x</span>
288
+ <span class="cline-any cline-yes">11x</span>
289
+ <span class="cline-any cline-yes">11x</span>
290
+ <span class="cline-any cline-yes">10x</span>
291
291
  <span class="cline-any cline-neutral">&nbsp;</span>
292
292
  <span class="cline-any cline-neutral">&nbsp;</span>
293
293
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -295,16 +295,16 @@
295
295
  <span class="cline-any cline-neutral">&nbsp;</span>
296
296
  <span class="cline-any cline-neutral">&nbsp;</span>
297
297
  <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">8x</span>
298
+ <span class="cline-any cline-yes">10x</span>
299
299
  <span class="cline-any cline-neutral">&nbsp;</span>
300
300
  <span class="cline-any cline-neutral">&nbsp;</span>
301
301
  <span class="cline-any cline-neutral">&nbsp;</span>
302
302
  <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-yes">4x</span>
304
- <span class="cline-any cline-yes">4x</span>
305
- <span class="cline-any cline-yes">4x</span>
306
- <span class="cline-any cline-yes">3x</span>
307
- <span class="cline-any cline-yes">3x</span>
303
+ <span class="cline-any cline-yes">7x</span>
304
+ <span class="cline-any cline-yes">7x</span>
305
+ <span class="cline-any cline-yes">7x</span>
306
+ <span class="cline-any cline-yes">6x</span>
307
+ <span class="cline-any cline-yes">6x</span>
308
308
  <span class="cline-any cline-neutral">&nbsp;</span>
309
309
  <span class="cline-any cline-neutral">&nbsp;</span>
310
310
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -316,14 +316,14 @@
316
316
  <span class="cline-any cline-neutral">&nbsp;</span>
317
317
  <span class="cline-any cline-neutral">&nbsp;</span>
318
318
  <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-yes">3x</span>
319
+ <span class="cline-any cline-yes">6x</span>
320
320
  <span class="cline-any cline-neutral">&nbsp;</span>
321
321
  <span class="cline-any cline-neutral">&nbsp;</span>
322
322
  <span class="cline-any cline-neutral">&nbsp;</span>
323
323
  <span class="cline-any cline-neutral">&nbsp;</span>
324
324
  <span class="cline-any cline-yes">2x</span>
325
325
  <span class="cline-any cline-yes">2x</span>
326
- <span class="cline-any cline-yes">1x</span>
326
+ <span class="cline-any cline-yes">2x</span>
327
327
  <span class="cline-any cline-neutral">&nbsp;</span>
328
328
  <span class="cline-any cline-neutral">&nbsp;</span>
329
329
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -331,29 +331,29 @@
331
331
  <span class="cline-any cline-neutral">&nbsp;</span>
332
332
  <span class="cline-any cline-neutral">&nbsp;</span>
333
333
  <span class="cline-any cline-neutral">&nbsp;</span>
334
- <span class="cline-any cline-yes">1x</span>
334
+ <span class="cline-any cline-yes">2x</span>
335
335
  <span class="cline-any cline-neutral">&nbsp;</span>
336
336
  <span class="cline-any cline-neutral">&nbsp;</span>
337
337
  <span class="cline-any cline-neutral">&nbsp;</span>
338
338
  <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-yes">127x</span>
340
- <span class="cline-any cline-yes">127x</span>
341
- <span class="cline-any cline-yes">339x</span>
339
+ <span class="cline-any cline-yes">145x</span>
340
+ <span class="cline-any cline-yes">145x</span>
341
+ <span class="cline-any cline-yes">360x</span>
342
342
  <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-yes">127x</span>
343
+ <span class="cline-any cline-yes">145x</span>
344
344
  <span class="cline-any cline-neutral">&nbsp;</span>
345
345
  <span class="cline-any cline-neutral">&nbsp;</span>
346
346
  <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-yes">6x</span>
348
- <span class="cline-any cline-yes">6x</span>
349
- <span class="cline-any cline-yes">6x</span>
347
+ <span class="cline-any cline-yes">7x</span>
348
+ <span class="cline-any cline-yes">7x</span>
349
+ <span class="cline-any cline-yes">7x</span>
350
350
  <span class="cline-any cline-neutral">&nbsp;</span>
351
351
  <span class="cline-any cline-neutral">&nbsp;</span>
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
355
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">6x</span>
356
+ <span class="cline-any cline-yes">7x</span>
357
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
358
  <span class="cline-any cline-neutral">&nbsp;</span>
359
359
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -450,7 +450,7 @@ export class TaskStore extends ReducerBackedStore&lt;TaskEntry, TaskReducerState
450
450
  return this.withLock(() =&gt; {
451
451
  const entry = this.entries.get(id);
452
452
  if (!entry) return undefined;
453
- <span class="missing-if-branch" title="if path not taken" >I</span>if (fields.subject === undefined &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >fields.description === undefined) <span class="cstat-no" title="statement not covered" >r</span>eturn entry;</span>
453
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (fields.subject === undefined &amp;&amp; fields.description === undefined) <span class="cstat-no" title="statement not covered" >return entry;</span>
454
454
  this.applyReducerEvent({
455
455
  type: "TASK_UPDATED",
456
456
  at: Date.now(),
@@ -469,7 +469,7 @@ export class TaskStore extends ReducerBackedStore&lt;TaskEntry, TaskReducerState
469
469
  &nbsp;
470
470
  delete(id: string): boolean {
471
471
  return this.withLock(() =&gt; {
472
- if (!this.entries.has(id)) return false;
472
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.entries.has(id)) <span class="cstat-no" title="statement not covered" >return false;</span>
473
473
  this.applyReducerEvent({
474
474
  type: "TASK_DELETED",
475
475
  at: Date.now(),
@@ -511,7 +511,7 @@ export class TaskStore extends ReducerBackedStore&lt;TaskEntry, TaskReducerState
511
511
  <div class='footer quiet pad2 space-top1 center small'>
512
512
  Code coverage generated by
513
513
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
514
- at 2026-06-23T21:49:18.784Z
514
+ at 2026-07-02T19:31:50.067Z
515
515
  </div>
516
516
  <script src="../prettify.js"></script>
517
517
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">90.95% </span>
26
+ <span class="strong">89.15% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>181/199</span>
28
+ <span class='fraction'>148/166</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">81.7% </span>
33
+ <span class="strong">83.08% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>134/164</span>
35
+ <span class='fraction'>113/136</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>21/21</span>
42
+ <span class='fraction'>20/20</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">91.9% </span>
47
+ <span class="strong">90.41% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>159/173</span>
49
+ <span class='fraction'>132/146</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,32 +80,32 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="loop-tools.ts"><a href="loop-tools.ts.html">loop-tools.ts</a></td>
83
- <td data-value="83.87" class="pic high">
83
+ <td data-value="83.69" class="pic high">
84
84
  <div class="chart"><div class="cover-fill" style="width: 83%"></div><div class="cover-empty" style="width: 17%"></div></div>
85
85
  </td>
86
- <td data-value="83.87" class="pct high">83.87%</td>
87
- <td data-value="93" class="abs high">78/93</td>
86
+ <td data-value="83.69" class="pct high">83.69%</td>
87
+ <td data-value="92" class="abs high">77/92</td>
88
88
  <td data-value="80.2" class="pct high">80.2%</td>
89
89
  <td data-value="96" class="abs high">77/96</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
- <td data-value="8" class="abs high">8/8</td>
92
- <td data-value="85.36" class="pct high">85.36%</td>
93
- <td data-value="82" class="abs high">70/82</td>
91
+ <td data-value="7" class="abs high">7/7</td>
92
+ <td data-value="85.18" class="pct high">85.18%</td>
93
+ <td data-value="81" class="abs high">69/81</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
97
97
  <td class="file high" data-value="monitor-tools.ts"><a href="monitor-tools.ts.html">monitor-tools.ts</a></td>
98
- <td data-value="93.18" class="pic high">
98
+ <td data-value="93.02" class="pic high">
99
99
  <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
100
100
  </td>
101
- <td data-value="93.18" class="pct high">93.18%</td>
102
- <td data-value="44" class="abs high">41/44</td>
101
+ <td data-value="93.02" class="pct high">93.02%</td>
102
+ <td data-value="43" class="abs high">40/43</td>
103
103
  <td data-value="83.33" class="pct high">83.33%</td>
104
104
  <td data-value="24" class="abs high">20/24</td>
105
105
  <td data-value="100" class="pct high">100%</td>
106
- <td data-value="7" class="abs high">7/7</td>
107
- <td data-value="94.73" class="pct high">94.73%</td>
108
- <td data-value="38" class="abs high">36/38</td>
106
+ <td data-value="6" class="abs high">6/6</td>
107
+ <td data-value="94.59" class="pct high">94.59%</td>
108
+ <td data-value="37" class="abs high">35/37</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -114,13 +114,28 @@
114
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
116
  <td data-value="100" class="pct high">100%</td>
117
- <td data-value="62" class="abs high">62/62</td>
118
- <td data-value="84.09" class="pct high">84.09%</td>
119
- <td data-value="44" class="abs high">37/44</td>
117
+ <td data-value="30" class="abs high">30/30</td>
118
+ <td data-value="100" class="pct high">100%</td>
119
+ <td data-value="16" class="abs high">16/16</td>
120
120
  <td data-value="100" class="pct high">100%</td>
121
121
  <td data-value="6" class="abs high">6/6</td>
122
122
  <td data-value="100" class="pct high">100%</td>
123
- <td data-value="53" class="abs high">53/53</td>
123
+ <td data-value="27" class="abs high">27/27</td>
124
+ </tr>
125
+
126
+ <tr>
127
+ <td class="file high" data-value="tool-result.ts"><a href="tool-result.ts.html">tool-result.ts</a></td>
128
+ <td data-value="100" class="pic high">
129
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
130
+ </td>
131
+ <td data-value="100" class="pct high">100%</td>
132
+ <td data-value="1" class="abs high">1/1</td>
133
+ <td data-value="100" class="pct high">100%</td>
134
+ <td data-value="0" class="abs high">0/0</td>
135
+ <td data-value="100" class="pct high">100%</td>
136
+ <td data-value="1" class="abs high">1/1</td>
137
+ <td data-value="100" class="pct high">100%</td>
138
+ <td data-value="1" class="abs high">1/1</td>
124
139
  </tr>
125
140
 
126
141
  </tbody>
@@ -131,7 +146,7 @@
131
146
  <div class='footer quiet pad2 space-top1 center small'>
132
147
  Code coverage generated by
133
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2026-06-23T21:49:18.784Z
149
+ at 2026-07-02T19:31:50.067Z
135
150
  </div>
136
151
  <script src="../../prettify.js"></script>
137
152
  <script>