@trevonistrevon/pi-loop 0.1.6 → 0.1.7

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/dist/index.js CHANGED
@@ -153,6 +153,7 @@ export default function (pi) {
153
153
  const loops = store.list();
154
154
  if (loops.length > 0) {
155
155
  store.clearExpired();
156
+ store.expireEventLoops();
156
157
  triggerSystem.start();
157
158
  widget.update();
158
159
  }
@@ -68,6 +68,9 @@ export class MonitorManager {
68
68
  for (const resolve of bp.waiters)
69
69
  resolve();
70
70
  bp.waiters = [];
71
+ // Remove completed/errored monitors after a brief delay so tool
72
+ // consumers have time to read the final state via MonitorList.
73
+ setTimeout(() => { this.processes.delete(id); }, 30000);
71
74
  };
72
75
  child.on("close", (code) => {
73
76
  if (entry.status === "running") {
package/dist/store.d.ts CHANGED
@@ -25,6 +25,7 @@ export declare class LoopStore {
25
25
  };
26
26
  delete(id: string): boolean;
27
27
  clearExpired(): number;
28
+ expireEventLoops(): number;
28
29
  clearAll(): number;
29
30
  deleteFileIfEmpty(): boolean;
30
31
  }
package/dist/store.js CHANGED
@@ -176,6 +176,20 @@ export class LoopStore {
176
176
  return count;
177
177
  });
178
178
  }
179
+ expireEventLoops() {
180
+ return this.withLock(() => {
181
+ let count = 0;
182
+ for (const [_id, entry] of this.loops) {
183
+ if (entry.status !== "active")
184
+ continue;
185
+ if (entry.trigger.type === "event" || entry.trigger.type === "hybrid") {
186
+ entry.status = "expired";
187
+ count++;
188
+ }
189
+ }
190
+ return count;
191
+ });
192
+ }
179
193
  clearAll() {
180
194
  return this.withLock(() => {
181
195
  const count = this.loops.size;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trevonistrevon/pi-loop",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "A pi extension for cron/event-based agent re-wake loops and background process monitoring.",
5
5
  "author": "trevonistrevon",
6
6
  "license": "MIT",
package/src/index.ts CHANGED
@@ -159,6 +159,7 @@ export default function (pi: ExtensionAPI) {
159
159
  const loops = store.list();
160
160
  if (loops.length > 0) {
161
161
  store.clearExpired();
162
+ store.expireEventLoops();
162
163
  triggerSystem.start();
163
164
  widget.update();
164
165
  }
@@ -73,6 +73,9 @@ export class MonitorManager {
73
73
  });
74
74
  for (const resolve of bp.waiters) resolve();
75
75
  bp.waiters = [];
76
+ // Remove completed/errored monitors after a brief delay so tool
77
+ // consumers have time to read the final state via MonitorList.
78
+ setTimeout(() => { this.processes.delete(id); }, 30000);
76
79
  };
77
80
 
78
81
  child.on("close", (code) => {
package/src/store.ts CHANGED
@@ -173,6 +173,20 @@ export class LoopStore {
173
173
  });
174
174
  }
175
175
 
176
+ expireEventLoops(): number {
177
+ return this.withLock(() => {
178
+ let count = 0;
179
+ for (const [_id, entry] of this.loops) {
180
+ if (entry.status !== "active") continue;
181
+ if (entry.trigger.type === "event" || entry.trigger.type === "hybrid") {
182
+ entry.status = "expired";
183
+ count++;
184
+ }
185
+ }
186
+ return count;
187
+ });
188
+ }
189
+
176
190
  clearAll(): number {
177
191
  return this.withLock(() => {
178
192
  const count = this.loops.size;