@trevonistrevon/pi-loop 0.2.0 → 0.2.1
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 +4 -3
- package/dist/store.d.ts +1 -1
- package/dist/store.js +5 -3
- package/package.json +1 -1
- package/src/index.ts +4 -3
- package/src/store.ts +5 -3
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ function textResult(msg) {
|
|
|
31
31
|
return { content: [{ type: "text", text: msg }], details: undefined };
|
|
32
32
|
}
|
|
33
33
|
const SYSTEM_REMINDER_TEMPLATE = `<system-reminder>
|
|
34
|
-
Scheduled loop "%
|
|
34
|
+
Scheduled loop "%prompt%" fired. Trigger: %trigger_info%.
|
|
35
35
|
[loop:%loop_id%]
|
|
36
36
|
</system-reminder>`;
|
|
37
37
|
export default function (pi) {
|
|
@@ -148,10 +148,11 @@ export default function (pi) {
|
|
|
148
148
|
if (persistedShown)
|
|
149
149
|
return;
|
|
150
150
|
persistedShown = true;
|
|
151
|
+
const sessionStartedAt = Date.now();
|
|
151
152
|
const loops = store.list();
|
|
152
153
|
if (loops.length > 0) {
|
|
153
154
|
store.clearExpired();
|
|
154
|
-
store.expireEventLoops();
|
|
155
|
+
store.expireEventLoops(sessionStartedAt);
|
|
155
156
|
triggerSystem.start();
|
|
156
157
|
widget.update();
|
|
157
158
|
}
|
|
@@ -183,7 +184,7 @@ export default function (pi) {
|
|
|
183
184
|
// ── System-reminder injection for loop fires ──
|
|
184
185
|
let canInjectReminder = true;
|
|
185
186
|
const pendingReminders = [];
|
|
186
|
-
pi.on("loop:fire", (data) => {
|
|
187
|
+
pi.events.on("loop:fire", (data) => {
|
|
187
188
|
const triggerInfo = typeof data.trigger === "string"
|
|
188
189
|
? data.trigger
|
|
189
190
|
: data.trigger?.type === "cron"
|
package/dist/store.d.ts
CHANGED
package/dist/store.js
CHANGED
|
@@ -176,15 +176,17 @@ export class LoopStore {
|
|
|
176
176
|
return count;
|
|
177
177
|
});
|
|
178
178
|
}
|
|
179
|
-
expireEventLoops() {
|
|
179
|
+
expireEventLoops(sessionStartedAt) {
|
|
180
180
|
return this.withLock(() => {
|
|
181
181
|
let count = 0;
|
|
182
182
|
for (const [_id, entry] of this.loops) {
|
|
183
183
|
if (entry.status !== "active")
|
|
184
184
|
continue;
|
|
185
185
|
if (entry.trigger.type === "event" || entry.trigger.type === "hybrid") {
|
|
186
|
-
entry.
|
|
187
|
-
|
|
186
|
+
if (entry.createdAt < sessionStartedAt) {
|
|
187
|
+
entry.status = "expired";
|
|
188
|
+
count++;
|
|
189
|
+
}
|
|
188
190
|
}
|
|
189
191
|
}
|
|
190
192
|
return count;
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -36,7 +36,7 @@ function textResult(msg: string) {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
const SYSTEM_REMINDER_TEMPLATE = `<system-reminder>
|
|
39
|
-
Scheduled loop "%
|
|
39
|
+
Scheduled loop "%prompt%" fired. Trigger: %trigger_info%.
|
|
40
40
|
[loop:%loop_id%]
|
|
41
41
|
</system-reminder>`;
|
|
42
42
|
|
|
@@ -153,10 +153,11 @@ export default function (pi: ExtensionAPI) {
|
|
|
153
153
|
function showPersistedLoops(_isResume = false) {
|
|
154
154
|
if (persistedShown) return;
|
|
155
155
|
persistedShown = true;
|
|
156
|
+
const sessionStartedAt = Date.now();
|
|
156
157
|
const loops = store.list();
|
|
157
158
|
if (loops.length > 0) {
|
|
158
159
|
store.clearExpired();
|
|
159
|
-
store.expireEventLoops();
|
|
160
|
+
store.expireEventLoops(sessionStartedAt);
|
|
160
161
|
triggerSystem.start();
|
|
161
162
|
widget.update();
|
|
162
163
|
}
|
|
@@ -197,7 +198,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
197
198
|
let canInjectReminder = true;
|
|
198
199
|
const pendingReminders: string[] = [];
|
|
199
200
|
|
|
200
|
-
pi.on("loop:fire"
|
|
201
|
+
pi.events.on("loop:fire", (data: any) => {
|
|
201
202
|
const triggerInfo = typeof data.trigger === "string"
|
|
202
203
|
? data.trigger
|
|
203
204
|
: data.trigger?.type === "cron"
|
package/src/store.ts
CHANGED
|
@@ -173,14 +173,16 @@ export class LoopStore {
|
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
expireEventLoops(): number {
|
|
176
|
+
expireEventLoops(sessionStartedAt: number): number {
|
|
177
177
|
return this.withLock(() => {
|
|
178
178
|
let count = 0;
|
|
179
179
|
for (const [_id, entry] of this.loops) {
|
|
180
180
|
if (entry.status !== "active") continue;
|
|
181
181
|
if (entry.trigger.type === "event" || entry.trigger.type === "hybrid") {
|
|
182
|
-
entry.
|
|
183
|
-
|
|
182
|
+
if (entry.createdAt < sessionStartedAt) {
|
|
183
|
+
entry.status = "expired";
|
|
184
|
+
count++;
|
|
185
|
+
}
|
|
184
186
|
}
|
|
185
187
|
}
|
|
186
188
|
return count;
|