@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.
- package/.release-please-manifest.json +1 -1
- package/AGENTS.md +52 -12
- package/CHANGELOG.md +59 -0
- package/CONTRIBUTING.md +13 -3
- package/README.md +47 -0
- package/coverage/coverage-final.json +35 -32
- package/coverage/index.html +64 -49
- package/coverage/src/api.ts.html +193 -0
- package/coverage/src/commands/index.html +32 -32
- package/coverage/src/commands/loop-command.ts.html +170 -170
- package/coverage/src/commands/tasks-command.ts.html +129 -129
- package/coverage/src/coordinator.ts.html +26 -26
- package/coverage/src/index.html +61 -106
- package/coverage/src/index.ts.html +224 -86
- package/coverage/src/loop-parse.ts.html +106 -73
- package/coverage/src/loop-reducer.ts.html +21 -21
- package/coverage/src/monitor-completion-coordinator.ts.html +1 -1
- package/coverage/src/monitor-manager.ts.html +95 -71
- package/coverage/src/monitor-reducer.ts.html +15 -15
- package/coverage/src/notification-reducer.ts.html +6 -6
- package/coverage/src/reducer-backed-store.ts.html +57 -57
- package/coverage/src/rpc/channels.ts.html +376 -0
- package/coverage/src/rpc/cross-extension-rpc.ts.html +541 -0
- package/coverage/src/rpc/index.html +131 -0
- package/coverage/src/runtime/index.html +68 -23
- package/coverage/src/{goal-coordinator.ts.html → runtime/loop-events.ts.html} +79 -73
- package/coverage/src/runtime/monitor-ondone-runtime.ts.html +5 -5
- package/coverage/src/runtime/native-task-rpc.ts.html +502 -0
- package/coverage/src/runtime/notification-runtime.ts.html +22 -22
- package/coverage/src/runtime/scope.ts.html +14 -14
- package/coverage/src/runtime/session-runtime.ts.html +32 -32
- package/coverage/src/runtime/task-backlog-runtime.ts.html +65 -23
- package/coverage/src/runtime/task-events.ts.html +2 -2
- package/coverage/src/runtime/task-mutations.ts.html +394 -0
- package/coverage/src/runtime/task-rpc.ts.html +102 -120
- package/coverage/src/scheduler.ts.html +29 -29
- package/coverage/src/store.ts.html +27 -27
- package/coverage/src/task-backlog-coordinator.ts.html +8 -8
- package/coverage/src/task-reducer.ts.html +42 -42
- package/coverage/src/task-store.ts.html +49 -49
- package/coverage/src/tools/index.html +39 -24
- package/coverage/src/tools/loop-tools.ts.html +12 -21
- package/coverage/src/tools/monitor-tools.ts.html +12 -21
- package/coverage/src/tools/native-task-tools.ts.html +57 -120
- package/coverage/src/tools/tool-result.ts.html +97 -0
- package/coverage/src/trigger-system.ts.html +12 -12
- package/coverage/src/ui/index.html +1 -1
- package/coverage/src/ui/widget.ts.html +23 -23
- package/dist/api.d.ts +11 -0
- package/dist/api.js +10 -0
- package/dist/commands/loop-command.js +2 -2
- package/dist/commands/tasks-command.js +3 -3
- package/dist/coordinator.d.ts +1 -1
- package/dist/index.js +48 -3
- package/dist/loop-parse.js +14 -5
- package/dist/reducer-backed-store.d.ts +1 -1
- package/dist/reducer-backed-store.js +1 -1
- package/dist/rpc/channels.d.ts +73 -0
- package/dist/rpc/channels.js +30 -0
- package/dist/rpc/cross-extension-rpc.d.ts +59 -0
- package/dist/rpc/cross-extension-rpc.js +117 -0
- package/dist/runtime/loop-events.d.ts +26 -0
- package/dist/runtime/loop-events.js +26 -0
- package/dist/runtime/native-task-rpc.d.ts +22 -0
- package/dist/runtime/native-task-rpc.js +50 -0
- package/dist/runtime/task-backlog-runtime.d.ts +3 -0
- package/dist/runtime/task-backlog-runtime.js +4 -1
- package/dist/runtime/task-mutations.d.ts +39 -0
- package/dist/runtime/task-mutations.js +68 -0
- package/dist/runtime/task-rpc.d.ts +4 -0
- package/dist/runtime/task-rpc.js +40 -58
- package/dist/scheduler.js +1 -1
- package/dist/tools/loop-tools.js +1 -3
- package/dist/tools/monitor-tools.js +1 -3
- package/dist/tools/native-task-tools.d.ts +2 -6
- package/dist/tools/native-task-tools.js +25 -55
- package/dist/tools/tool-result.d.ts +8 -0
- package/dist/tools/tool-result.js +4 -0
- package/docs/architecture/state-machine-migration.md +0 -44
- package/docs/architecture/state-machine-reducer-event-model.md +2 -3
- package/package.json +6 -1
- package/src/api.ts +36 -0
- package/src/commands/loop-command.ts +2 -2
- package/src/commands/tasks-command.ts +3 -3
- package/src/coordinator.ts +1 -1
- package/src/index.ts +49 -3
- package/src/loop-parse.ts +18 -7
- package/src/reducer-backed-store.ts +3 -3
- package/src/rpc/channels.ts +97 -0
- package/src/rpc/cross-extension-rpc.ts +152 -0
- package/src/runtime/loop-events.ts +60 -0
- package/src/runtime/native-task-rpc.ts +139 -0
- package/src/runtime/task-backlog-runtime.ts +14 -0
- package/src/runtime/task-mutations.ts +103 -0
- package/src/runtime/task-rpc.ts +48 -54
- package/src/scheduler.ts +1 -1
- package/src/tools/loop-tools.ts +1 -4
- package/src/tools/monitor-tools.ts +1 -4
- package/src/tools/native-task-tools.ts +31 -52
- package/src/tools/tool-result.ts +4 -0
- package/src/trigger-system.ts +4 -4
- package/vitest.config.ts +7 -7
- package/coverage/src/goal-reducer.ts.html +0 -982
- package/coverage/src/goal-store.ts.html +0 -742
- package/coverage/src/goal-verifier.ts.html +0 -808
- package/dist/goal-coordinator.d.ts +0 -22
- package/dist/goal-coordinator.js +0 -28
- package/dist/goal-reducer.d.ts +0 -98
- package/dist/goal-reducer.js +0 -190
- package/dist/goal-store.d.ts +0 -22
- package/dist/goal-store.js +0 -188
- package/dist/goal-types.d.ts +0 -82
- package/dist/goal-types.js +0 -1
- package/dist/goal-verifier.d.ts +0 -20
- package/dist/goal-verifier.js +0 -198
- package/docs/architecture/goal-state-schema.md +0 -505
- package/src/goal-coordinator.ts +0 -58
- package/src/goal-reducer.ts +0 -299
- package/src/goal-store.ts +0 -219
- package/src/goal-types.ts +0 -104
- package/src/goal-verifier.ts +0 -241
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">74.72% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>68/91</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">61.66% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>37/60</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>6/6</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">80.48% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>66/82</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line medium'></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>
|
|
@@ -216,120 +216,120 @@
|
|
|
216
216
|
<span class="cline-any cline-neutral"> </span>
|
|
217
217
|
<span class="cline-any cline-neutral"> </span>
|
|
218
218
|
<span class="cline-any cline-neutral"> </span>
|
|
219
|
-
<span class="cline-any cline-yes">
|
|
219
|
+
<span class="cline-any cline-yes">60x</span>
|
|
220
220
|
<span class="cline-any cline-neutral"> </span>
|
|
221
221
|
<span class="cline-any cline-neutral"> </span>
|
|
222
|
-
<span class="cline-any cline-yes">
|
|
223
|
-
<span class="cline-any cline-yes">
|
|
224
|
-
<span class="cline-any cline-yes">
|
|
225
|
-
<span class="cline-any cline-yes">
|
|
226
|
-
<span class="cline-any cline-yes">
|
|
227
|
-
<span class="cline-any cline-yes">
|
|
222
|
+
<span class="cline-any cline-yes">7x</span>
|
|
223
|
+
<span class="cline-any cline-yes">7x</span>
|
|
224
|
+
<span class="cline-any cline-yes">7x</span>
|
|
225
|
+
<span class="cline-any cline-yes">7x</span>
|
|
226
|
+
<span class="cline-any cline-yes">7x</span>
|
|
227
|
+
<span class="cline-any cline-yes">7x</span>
|
|
228
228
|
<span class="cline-any cline-neutral"> </span>
|
|
229
229
|
<span class="cline-any cline-neutral"> </span>
|
|
230
230
|
<span class="cline-any cline-neutral"> </span>
|
|
231
|
-
<span class="cline-any cline-
|
|
232
|
-
<span class="cline-any cline-
|
|
231
|
+
<span class="cline-any cline-yes">2x</span>
|
|
232
|
+
<span class="cline-any cline-yes">2x</span>
|
|
233
233
|
<span class="cline-any cline-no"> </span>
|
|
234
234
|
<span class="cline-any cline-no"> </span>
|
|
235
235
|
<span class="cline-any cline-neutral"> </span>
|
|
236
236
|
<span class="cline-any cline-neutral"> </span>
|
|
237
|
-
<span class="cline-any cline-
|
|
238
|
-
<span class="cline-any cline-
|
|
239
|
-
<span class="cline-any cline-
|
|
240
|
-
<span class="cline-any cline-
|
|
241
|
-
<span class="cline-any cline-
|
|
242
|
-
<span class="cline-any cline-
|
|
243
|
-
<span class="cline-any cline-
|
|
237
|
+
<span class="cline-any cline-yes">2x</span>
|
|
238
|
+
<span class="cline-any cline-yes">2x</span>
|
|
239
|
+
<span class="cline-any cline-yes">2x</span>
|
|
240
|
+
<span class="cline-any cline-yes">2x</span>
|
|
241
|
+
<span class="cline-any cline-yes">2x</span>
|
|
242
|
+
<span class="cline-any cline-yes">2x</span>
|
|
243
|
+
<span class="cline-any cline-yes">2x</span>
|
|
244
244
|
<span class="cline-any cline-no"> </span>
|
|
245
245
|
<span class="cline-any cline-neutral"> </span>
|
|
246
246
|
<span class="cline-any cline-neutral"> </span>
|
|
247
247
|
<span class="cline-any cline-neutral"> </span>
|
|
248
248
|
<span class="cline-any cline-neutral"> </span>
|
|
249
|
-
<span class="cline-any cline-
|
|
250
|
-
<span class="cline-any cline-
|
|
249
|
+
<span class="cline-any cline-yes">10x</span>
|
|
250
|
+
<span class="cline-any cline-yes">10x</span>
|
|
251
251
|
<span class="cline-any cline-no"> </span>
|
|
252
252
|
<span class="cline-any cline-no"> </span>
|
|
253
253
|
<span class="cline-any cline-neutral"> </span>
|
|
254
254
|
<span class="cline-any cline-neutral"> </span>
|
|
255
|
-
<span class="cline-any cline-
|
|
256
|
-
<span class="cline-any cline-
|
|
257
|
-
<span class="cline-any cline-
|
|
258
|
-
<span class="cline-any cline-
|
|
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">8x</span>
|
|
258
|
+
<span class="cline-any cline-yes">8x</span>
|
|
259
259
|
<span class="cline-any cline-neutral"> </span>
|
|
260
|
-
<span class="cline-any cline-
|
|
261
|
-
<span class="cline-any cline-
|
|
260
|
+
<span class="cline-any cline-yes">10x</span>
|
|
261
|
+
<span class="cline-any cline-yes">10x</span>
|
|
262
262
|
<span class="cline-any cline-neutral"> </span>
|
|
263
|
-
<span class="cline-any cline-
|
|
264
|
-
<span class="cline-any cline-
|
|
265
|
-
<span class="cline-any cline-
|
|
266
|
-
<span class="cline-any cline-
|
|
267
|
-
<span class="cline-any cline-
|
|
263
|
+
<span class="cline-any cline-yes">10x</span>
|
|
264
|
+
<span class="cline-any cline-yes">10x</span>
|
|
265
|
+
<span class="cline-any cline-yes">4x</span>
|
|
266
|
+
<span class="cline-any cline-yes">2x</span>
|
|
267
|
+
<span class="cline-any cline-yes">2x</span>
|
|
268
268
|
<span class="cline-any cline-neutral"> </span>
|
|
269
269
|
<span class="cline-any cline-neutral"> </span>
|
|
270
|
-
<span class="cline-any cline-
|
|
271
|
-
<span class="cline-any cline-
|
|
270
|
+
<span class="cline-any cline-yes">2x</span>
|
|
271
|
+
<span class="cline-any cline-yes">10x</span>
|
|
272
272
|
<span class="cline-any cline-neutral"> </span>
|
|
273
|
-
<span class="cline-any cline-
|
|
274
|
-
<span class="cline-any cline-
|
|
273
|
+
<span class="cline-any cline-yes">2x</span>
|
|
274
|
+
<span class="cline-any cline-yes">2x</span>
|
|
275
275
|
<span class="cline-any cline-neutral"> </span>
|
|
276
|
-
<span class="cline-any cline-
|
|
277
|
-
<span class="cline-any cline-
|
|
278
|
-
<span class="cline-any cline-
|
|
279
|
-
<span class="cline-any cline-
|
|
276
|
+
<span class="cline-any cline-yes">2x</span>
|
|
277
|
+
<span class="cline-any cline-yes">2x</span>
|
|
278
|
+
<span class="cline-any cline-yes">2x</span>
|
|
279
|
+
<span class="cline-any cline-yes">2x</span>
|
|
280
280
|
<span class="cline-any cline-no"> </span>
|
|
281
281
|
<span class="cline-any cline-no"> </span>
|
|
282
282
|
<span class="cline-any cline-no"> </span>
|
|
283
283
|
<span class="cline-any cline-neutral"> </span>
|
|
284
284
|
<span class="cline-any cline-no"> </span>
|
|
285
285
|
<span class="cline-any cline-neutral"> </span>
|
|
286
|
-
<span class="cline-any cline-
|
|
286
|
+
<span class="cline-any cline-yes">2x</span>
|
|
287
287
|
<span class="cline-any cline-neutral"> </span>
|
|
288
|
-
<span class="cline-any cline-
|
|
289
|
-
<span class="cline-any cline-
|
|
288
|
+
<span class="cline-any cline-yes">2x</span>
|
|
289
|
+
<span class="cline-any cline-yes">2x</span>
|
|
290
290
|
<span class="cline-any cline-neutral"> </span>
|
|
291
|
+
<span class="cline-any cline-yes">2x</span>
|
|
292
|
+
<span class="cline-any cline-yes">1x</span>
|
|
293
|
+
<span class="cline-any cline-yes">1x</span>
|
|
294
|
+
<span class="cline-any cline-yes">1x</span>
|
|
295
|
+
<span class="cline-any cline-yes">1x</span>
|
|
291
296
|
<span class="cline-any cline-no"> </span>
|
|
292
297
|
<span class="cline-any cline-no"> </span>
|
|
293
298
|
<span class="cline-any cline-no"> </span>
|
|
294
|
-
<span class="cline-any cline-
|
|
295
|
-
<span class="cline-any cline-
|
|
296
|
-
<span class="cline-any cline-
|
|
297
|
-
<span class="cline-any cline-
|
|
298
|
-
<span class="cline-any cline-no"> </span>
|
|
299
|
-
<span class="cline-any cline-no"> </span>
|
|
300
|
-
<span class="cline-any cline-no"> </span>
|
|
301
|
-
<span class="cline-any cline-no"> </span>
|
|
302
|
-
<span class="cline-any cline-no"> </span>
|
|
299
|
+
<span class="cline-any cline-yes">1x</span>
|
|
300
|
+
<span class="cline-any cline-yes">1x</span>
|
|
301
|
+
<span class="cline-any cline-yes">1x</span>
|
|
302
|
+
<span class="cline-any cline-yes">1x</span>
|
|
303
303
|
<span class="cline-any cline-no"> </span>
|
|
304
304
|
<span class="cline-any cline-no"> </span>
|
|
305
305
|
<span class="cline-any cline-no"> </span>
|
|
306
306
|
<span class="cline-any cline-no"> </span>
|
|
307
307
|
<span class="cline-any cline-neutral"> </span>
|
|
308
308
|
<span class="cline-any cline-neutral"> </span>
|
|
309
|
-
<span class="cline-any cline-
|
|
310
|
-
<span class="cline-any cline-
|
|
311
|
-
<span class="cline-any cline-
|
|
309
|
+
<span class="cline-any cline-yes">2x</span>
|
|
310
|
+
<span class="cline-any cline-yes">2x</span>
|
|
311
|
+
<span class="cline-any cline-yes">2x</span>
|
|
312
312
|
<span class="cline-any cline-neutral"> </span>
|
|
313
313
|
<span class="cline-any cline-neutral"> </span>
|
|
314
|
-
<span class="cline-any cline-yes">
|
|
314
|
+
<span class="cline-any cline-yes">60x</span>
|
|
315
315
|
<span class="cline-any cline-neutral"> </span>
|
|
316
316
|
<span class="cline-any cline-neutral"> </span>
|
|
317
|
+
<span class="cline-any cline-yes">12x</span>
|
|
318
|
+
<span class="cline-any cline-yes">12x</span>
|
|
319
|
+
<span class="cline-any cline-yes">12x</span>
|
|
317
320
|
<span class="cline-any cline-yes">1x</span>
|
|
318
321
|
<span class="cline-any cline-yes">1x</span>
|
|
319
|
-
<span class="cline-any cline-yes">1x</span>
|
|
320
|
-
<span class="cline-any cline-no"> </span>
|
|
321
|
-
<span class="cline-any cline-no"> </span>
|
|
322
322
|
<span class="cline-any cline-neutral"> </span>
|
|
323
|
+
<span class="cline-any cline-yes">11x</span>
|
|
324
|
+
<span class="cline-any cline-yes">5x</span>
|
|
325
|
+
<span class="cline-any cline-yes">5x</span>
|
|
326
|
+
<span class="cline-any cline-yes">5x</span>
|
|
327
|
+
<span class="cline-any cline-yes">5x</span>
|
|
323
328
|
<span class="cline-any cline-yes">1x</span>
|
|
324
|
-
<span class="cline-any cline-yes">1x</span>
|
|
325
|
-
<span class="cline-any cline-yes">1x</span>
|
|
326
|
-
<span class="cline-any cline-yes">1x</span>
|
|
327
|
-
<span class="cline-any cline-yes">1x</span>
|
|
328
|
-
<span class="cline-any cline-no"> </span>
|
|
329
329
|
<span class="cline-any cline-neutral"> </span>
|
|
330
|
-
<span class="cline-any cline-yes">
|
|
330
|
+
<span class="cline-any cline-yes">5x</span>
|
|
331
331
|
<span class="cline-any cline-neutral"> </span>
|
|
332
|
-
<span class="cline-any cline-
|
|
332
|
+
<span class="cline-any cline-yes">6x</span>
|
|
333
333
|
<span class="cline-any cline-neutral"> </span>
|
|
334
334
|
<span class="cline-any cline-neutral"> </span>
|
|
335
335
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -362,88 +362,88 @@ export function registerTasksCommand(options: TasksCommandOptions): void {
|
|
|
362
362
|
return backlog;
|
|
363
363
|
}
|
|
364
364
|
|
|
365
|
-
async function
|
|
366
|
-
const taskStore =
|
|
367
|
-
<span class="
|
|
365
|
+
async function createNativeTaskInteractively(ui: ExtensionUIContext) {
|
|
366
|
+
const taskStore = getNativeTaskStore();
|
|
367
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!taskStore) {
|
|
368
368
|
<span class="cstat-no" title="statement not covered" > ui.notify("Native tasks are unavailable while pi-tasks is active", "warning");</span>
|
|
369
369
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
370
370
|
}
|
|
371
371
|
|
|
372
|
-
const subject =
|
|
373
|
-
<span class="
|
|
374
|
-
const description =
|
|
375
|
-
const entry =
|
|
376
|
-
const backlog =
|
|
377
|
-
|
|
378
|
-
<span class="
|
|
372
|
+
const subject = await ui.input("Task subject");
|
|
373
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!subject) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
374
|
+
const description = await ui.input("Task description") || subject;
|
|
375
|
+
const entry = taskStore.create(subject, description);
|
|
376
|
+
const backlog = await emitCreated(entry);
|
|
377
|
+
ui.notify(`Task #${entry.id} created`, "info");
|
|
378
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (backlog.created && <span class="branch-1 cbranch-no" title="branch not covered" >backlog.entry) {</span>
|
|
379
379
|
<span class="cstat-no" title="statement not covered" > ui.notify(`Backlog worker loop #${backlog.entry.id} created`, "info");</span>
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
-
async function
|
|
384
|
-
const taskStore =
|
|
385
|
-
<span class="
|
|
383
|
+
async function viewNativeTasks(ui: ExtensionUIContext): Promise<void> {
|
|
384
|
+
const taskStore = getNativeTaskStore();
|
|
385
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!taskStore) {
|
|
386
386
|
<span class="cstat-no" title="statement not covered" > ui.notify("Native tasks are unavailable while pi-tasks is active", "warning");</span>
|
|
387
387
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
388
388
|
}
|
|
389
389
|
|
|
390
|
-
const tasks =
|
|
391
|
-
const choices =
|
|
392
|
-
const icon =
|
|
393
|
-
|
|
390
|
+
const tasks = taskStore.list();
|
|
391
|
+
const choices = tasks.map((task) => {
|
|
392
|
+
const icon = task.status === "in_progress" ? ">" : task.status === "completed" ? "ok" : "*";
|
|
393
|
+
return `${icon} #${task.id} [${task.status}] ${task.subject.slice(0, 60)}`;
|
|
394
394
|
});
|
|
395
|
-
|
|
396
|
-
|
|
395
|
+
choices.unshift("+ Create task");
|
|
396
|
+
choices.push("< Back");
|
|
397
397
|
|
|
398
|
-
const selected =
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
398
|
+
const selected = await ui.select("Tasks", choices);
|
|
399
|
+
if (!selected || selected === "< Back") return;
|
|
400
|
+
if (selected === "+ Create task") {
|
|
401
|
+
await createNativeTaskInteractively(ui);
|
|
402
|
+
return viewNativeTasks(ui);
|
|
403
403
|
}
|
|
404
404
|
|
|
405
|
-
const
|
|
406
|
-
<span class="
|
|
405
|
+
const taskId = selected.match(/#(\d+)/)?.[1];
|
|
406
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!taskId) <span class="cstat-no" title="statement not covered" >return viewNativeTasks(ui);</span>
|
|
407
407
|
|
|
408
|
-
const task =
|
|
409
|
-
<span class="
|
|
408
|
+
const task = taskStore.get(taskId);
|
|
409
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!task) <span class="cstat-no" title="statement not covered" >return viewNativeTasks(ui);</span>
|
|
410
410
|
|
|
411
|
-
const actions =
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
} else <span class="cstat-no" title="statement not covered" >if (task.status === "in_progress") {</span>
|
|
411
|
+
const actions = ["x Delete"];
|
|
412
|
+
if (task.status === "pending") {
|
|
413
|
+
actions.unshift("ok Complete");
|
|
414
|
+
actions.unshift("> Start");
|
|
415
|
+
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (task.status === "in_progress") {</span>
|
|
416
416
|
<span class="cstat-no" title="statement not covered" > actions.unshift("ok Complete");</span>
|
|
417
417
|
<span class="cstat-no" title="statement not covered" > actions.unshift("* Return to pending");</span>
|
|
418
418
|
} else {
|
|
419
419
|
<span class="cstat-no" title="statement not covered" > actions.unshift("* Reopen");</span>
|
|
420
420
|
}
|
|
421
|
-
|
|
421
|
+
actions.push("< Back");
|
|
422
422
|
|
|
423
|
-
const action =
|
|
424
|
-
<span class="
|
|
423
|
+
const action = await ui.select(`#${task.id}: ${task.subject}\n\n${task.description}`, actions);
|
|
424
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!action || action === "< Back") <span class="cstat-no" title="statement not covered" >return viewNativeTasks(ui);</span>
|
|
425
425
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
} else <span class="
|
|
426
|
+
if (action === "x Delete") {
|
|
427
|
+
taskStore.delete(task.id);
|
|
428
|
+
emitNativeTaskEvent(pi, "tasks:deleted", task, task.status);
|
|
429
|
+
ui.notify(`Task #${task.id} deleted`, "info");
|
|
430
|
+
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (action === "> Start") {
|
|
431
431
|
const next = <span class="cstat-no" title="statement not covered" >taskStore.start(task.id);</span>
|
|
432
432
|
<span class="cstat-no" title="statement not covered" > if (<span class="cstat-no" title="statement not covered" >next) emitNativeTaskEvent(pi, "tasks:started", next, task.status);</span></span>
|
|
433
433
|
<span class="cstat-no" title="statement not covered" > ui.notify(`Task #${task.id} started`, "info");</span>
|
|
434
|
-
} else
|
|
435
|
-
const next =
|
|
436
|
-
<span class="
|
|
437
|
-
|
|
438
|
-
} else <span class="cstat-no" title="statement not covered" >if (action === "* Return to pending" || action === "* Reopen") {</span>
|
|
434
|
+
} else if (action === "ok Complete") {
|
|
435
|
+
const next = taskStore.complete(task.id);
|
|
436
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (next) emitNativeTaskEvent(pi, "tasks:completed", next, task.status);
|
|
437
|
+
ui.notify(`Task #${task.id} completed`, "info");
|
|
438
|
+
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (action === "* Return to pending" || action === "* Reopen") {</span>
|
|
439
439
|
const next = <span class="cstat-no" title="statement not covered" >taskStore.reopen(task.id);</span>
|
|
440
440
|
<span class="cstat-no" title="statement not covered" > if (<span class="cstat-no" title="statement not covered" >next) emitNativeTaskEvent(pi, "tasks:reopened", next, task.status);</span></span>
|
|
441
441
|
<span class="cstat-no" title="statement not covered" > ui.notify(`Task #${task.id} reopened`, "info");</span>
|
|
442
442
|
}
|
|
443
443
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
444
|
+
updateWidget();
|
|
445
|
+
await evaluateTaskBacklog(taskStore, taskStore.pendingCount());
|
|
446
|
+
return viewNativeTasks(ui);
|
|
447
447
|
}
|
|
448
448
|
|
|
449
449
|
pi.registerCommand("tasks", {
|
|
@@ -451,20 +451,20 @@ export function registerTasksCommand(options: TasksCommandOptions): void {
|
|
|
451
451
|
handler: async (args: string, ctx: ExtensionCommandContext) => {
|
|
452
452
|
const trimmed = args.trim();
|
|
453
453
|
const taskStore = getNativeTaskStore();
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
454
|
+
if (!taskStore) {
|
|
455
|
+
ctx.ui.notify("Native tasks are unavailable while pi-tasks is active", "warning");
|
|
456
|
+
return;
|
|
457
457
|
}
|
|
458
|
-
|
|
458
|
+
if (trimmed) {
|
|
459
459
|
const entry = taskStore.create(trimmed.slice(0, 80), trimmed);
|
|
460
460
|
const backlog = await emitCreated(entry);
|
|
461
461
|
ctx.ui.notify(`Task #${entry.id} created`, "info");
|
|
462
|
-
|
|
463
|
-
|
|
462
|
+
if (backlog.created && backlog.entry) {
|
|
463
|
+
ctx.ui.notify(`Backlog worker loop #${backlog.entry.id} created`, "info");
|
|
464
464
|
}
|
|
465
465
|
return;
|
|
466
466
|
}
|
|
467
|
-
|
|
467
|
+
await viewNativeTasks(ctx.ui);
|
|
468
468
|
},
|
|
469
469
|
});
|
|
470
470
|
}
|
|
@@ -475,7 +475,7 @@ export function registerTasksCommand(options: TasksCommandOptions): void {
|
|
|
475
475
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
476
476
|
Code coverage generated by
|
|
477
477
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
478
|
-
at 2026-
|
|
478
|
+
at 2026-07-02T19:31:50.067Z
|
|
479
479
|
</div>
|
|
480
480
|
<script src="../../prettify.js"></script>
|
|
481
481
|
<script>
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">88% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>22/25</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -239,55 +239,55 @@
|
|
|
239
239
|
<span class="cline-any cline-neutral"> </span>
|
|
240
240
|
<span class="cline-any cline-neutral"> </span>
|
|
241
241
|
<span class="cline-any cline-neutral"> </span>
|
|
242
|
-
<span class="cline-any cline-yes">
|
|
242
|
+
<span class="cline-any cline-yes">222x</span>
|
|
243
243
|
<span class="cline-any cline-neutral"> </span>
|
|
244
244
|
<span class="cline-any cline-neutral"> </span>
|
|
245
|
-
<span class="cline-any cline-yes">
|
|
245
|
+
<span class="cline-any cline-yes">248x</span>
|
|
246
246
|
<span class="cline-any cline-neutral"> </span>
|
|
247
247
|
<span class="cline-any cline-neutral"> </span>
|
|
248
248
|
<span class="cline-any cline-neutral"> </span>
|
|
249
|
-
<span class="cline-any cline-yes">
|
|
250
|
-
<span class="cline-any cline-yes">
|
|
251
|
-
<span class="cline-any cline-yes">
|
|
252
|
-
<span class="cline-any cline-yes">
|
|
249
|
+
<span class="cline-any cline-yes">84x</span>
|
|
250
|
+
<span class="cline-any cline-yes">4x</span>
|
|
251
|
+
<span class="cline-any cline-yes">4x</span>
|
|
252
|
+
<span class="cline-any cline-yes">4x</span>
|
|
253
253
|
<span class="cline-any cline-no"> </span>
|
|
254
254
|
<span class="cline-any cline-neutral"> </span>
|
|
255
|
-
<span class="cline-any cline-yes">
|
|
256
|
-
<span class="cline-any cline-yes">
|
|
255
|
+
<span class="cline-any cline-yes">4x</span>
|
|
256
|
+
<span class="cline-any cline-yes">1x</span>
|
|
257
257
|
<span class="cline-any cline-neutral"> </span>
|
|
258
258
|
<span class="cline-any cline-neutral"> </span>
|
|
259
|
-
<span class="cline-any cline-yes">
|
|
260
|
-
<span class="cline-any cline-yes">
|
|
259
|
+
<span class="cline-any cline-yes">80x</span>
|
|
260
|
+
<span class="cline-any cline-yes">80x</span>
|
|
261
261
|
<span class="cline-any cline-yes">72x</span>
|
|
262
262
|
<span class="cline-any cline-yes">72x</span>
|
|
263
263
|
<span class="cline-any cline-yes">72x</span>
|
|
264
264
|
<span class="cline-any cline-neutral"> </span>
|
|
265
265
|
<span class="cline-any cline-neutral"> </span>
|
|
266
|
-
<span class="cline-any cline-yes">
|
|
266
|
+
<span class="cline-any cline-yes">8x</span>
|
|
267
267
|
<span class="cline-any cline-yes">8x</span>
|
|
268
268
|
<span class="cline-any cline-yes">8x</span>
|
|
269
269
|
<span class="cline-any cline-neutral"> </span>
|
|
270
270
|
<span class="cline-any cline-neutral"> </span>
|
|
271
271
|
<span class="cline-any cline-neutral"> </span>
|
|
272
272
|
<span class="cline-any cline-neutral"> </span>
|
|
273
|
-
<span class="cline-any cline-yes">
|
|
273
|
+
<span class="cline-any cline-yes">168x</span>
|
|
274
274
|
<span class="cline-any cline-yes">1x</span>
|
|
275
275
|
<span class="cline-any cline-neutral"> </span>
|
|
276
276
|
<span class="cline-any cline-neutral"> </span>
|
|
277
|
-
<span class="cline-any cline-yes">
|
|
278
|
-
<span class="cline-any cline-yes">
|
|
279
|
-
<span class="cline-any cline-yes">
|
|
280
|
-
<span class="cline-any cline-yes">
|
|
281
|
-
<span class="cline-any cline-yes">
|
|
282
|
-
<span class="cline-any cline-yes">
|
|
277
|
+
<span class="cline-any cline-yes">167x</span>
|
|
278
|
+
<span class="cline-any cline-yes">167x</span>
|
|
279
|
+
<span class="cline-any cline-yes">168x</span>
|
|
280
|
+
<span class="cline-any cline-yes">168x</span>
|
|
281
|
+
<span class="cline-any cline-yes">168x</span>
|
|
282
|
+
<span class="cline-any cline-yes">80x</span>
|
|
283
283
|
<span class="cline-any cline-neutral"> </span>
|
|
284
284
|
<span class="cline-any cline-neutral"> </span>
|
|
285
|
-
<span class="cline-any cline-yes">
|
|
286
|
-
<span class="cline-any cline-yes">
|
|
285
|
+
<span class="cline-any cline-yes">167x</span>
|
|
286
|
+
<span class="cline-any cline-yes">84x</span>
|
|
287
287
|
<span class="cline-any cline-neutral"> </span>
|
|
288
288
|
<span class="cline-any cline-neutral"> </span>
|
|
289
289
|
<span class="cline-any cline-neutral"> </span>
|
|
290
|
-
<span class="cline-any cline-yes">
|
|
290
|
+
<span class="cline-any cline-yes">222x</span>
|
|
291
291
|
<span class="cline-any cline-neutral"> </span>
|
|
292
292
|
<span class="cline-any cline-yes">164x</span>
|
|
293
293
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -303,7 +303,7 @@
|
|
|
303
303
|
| "coordinator"
|
|
304
304
|
| "system";
|
|
305
305
|
|
|
306
|
-
export type ReducerEntityType = "task" | "loop" | "monitor" | "notification"
|
|
306
|
+
export type ReducerEntityType = "task" | "loop" | "monitor" | "notification";
|
|
307
307
|
|
|
308
308
|
export interface ReducerEvent<TType extends string = string, TPayload = unknown> {
|
|
309
309
|
type: TType;
|
|
@@ -378,7 +378,7 @@ export function createCoordinator(options: CoordinatorOptions): Coordinator {
|
|
|
378
378
|
return;
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
-
if (effectExecutor) {
|
|
381
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (effectExecutor) {
|
|
382
382
|
const handled = effectExecutor(effect);
|
|
383
383
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (isPromiseLike(handled)) await handled;
|
|
384
384
|
}
|
|
@@ -415,7 +415,7 @@ export function createCoordinator(options: CoordinatorOptions): Coordinator {
|
|
|
415
415
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
416
416
|
Code coverage generated by
|
|
417
417
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
418
|
-
at 2026-
|
|
418
|
+
at 2026-07-02T19:31:50.067Z
|
|
419
419
|
</div>
|
|
420
420
|
<script src="../prettify.js"></script>
|
|
421
421
|
<script>
|