crewly 1.20.170 → 1.20.171
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/config/skills/agent/core/schedule-followup/execute.sh +1 -1
- package/config/skills/agent/core/watch-for-event/execute.sh +1 -1
- package/config/skills/orchestrator/delegate-task/execute.sh +1 -0
- package/dist/backend/backend/src/constants.d.ts +8 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +8 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.d.ts +13 -2
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.js +31 -8
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +29 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.js +4 -2
- package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js +4 -1
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-classification.d.ts +87 -0
- package/dist/backend/backend/src/services/v3/trigger-classification.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/trigger-classification.js +120 -0
- package/dist/backend/backend/src/services/v3/trigger-classification.js.map +1 -0
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +50 -2
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js +101 -4
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-expiry.d.ts +70 -0
- package/dist/backend/backend/src/services/v3/trigger-expiry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/trigger-expiry.js +136 -0
- package/dist/backend/backend/src/services/v3/trigger-expiry.js.map +1 -0
- package/dist/backend/backend/src/types/v2/index.d.ts +2 -2
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts +80 -4
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.js +35 -0
- package/dist/backend/backend/src/types/v2/trigger.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +8 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +8 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts +2 -2
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts +80 -4
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/trigger.types.js +35 -0
- package/dist/cli/backend/src/types/v2/trigger.types.js.map +1 -1
- package/frontend/dist/assets/{index-9153caca.js → index-212a6639.js} +291 -290
- package/frontend/dist/assets/index-769ba7ac.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-0707e2ac.css +0 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escalation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EAAE,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAI1G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAgBjC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gCAAgC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,KACjC,OAAO,CAAC,IAAI,CAAC,CAAC;AAMnB;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"escalation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EAAE,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAI1G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAgBjC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gCAAgC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,KACjC,OAAO,CAAC,IAAI,CAAC,CAAC;AAMnB;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB,CAA4F;IAEpH;;;;;OAKG;gBAED,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,wBAAwB;IAQ1C;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAIxD;;;;;OAKG;IACG,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoEnD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAQpB;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAsFjD;;;;OAIG;YACW,oBAAoB;IAWlC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,iBAAiB;IA0BrF;;;;;;;;;OASG;YACW,wBAAwB;IAyCtC;;;;;OAKG;YACW,qBAAqB;IAiDnC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CA6B/C"}
|
|
@@ -133,10 +133,12 @@ export class EscalationService {
|
|
|
133
133
|
await this.evaluate();
|
|
134
134
|
return;
|
|
135
135
|
}
|
|
136
|
-
// Delegate to original handler for other triggers
|
|
136
|
+
// Delegate to original handler for other triggers, passing its
|
|
137
|
+
// fire outcome through so the engine can record it.
|
|
137
138
|
if (originalHandler) {
|
|
138
|
-
|
|
139
|
+
return originalHandler(trigger, action);
|
|
139
140
|
}
|
|
141
|
+
return undefined;
|
|
140
142
|
};
|
|
141
143
|
triggerEngine.setActionHandler(this.installedHandler);
|
|
142
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escalation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAwB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAyB,MAAM,yCAAyC,CAAC;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EACL,mBAAmB,GAIpB,MAAM,yBAAyB,CAAC;AAEjC,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,sEAAsE;AACtE,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAE9C,8DAA8D;AAC9D,MAAM,eAAe,GAAG,EAAE,CAAC;AA4C3B,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAkB;IACxB,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,aAAa,CAA2B;IACjD,aAAa,GAAmC,IAAI,CAAC;IACrD,SAAS,GAAkB,IAAI,CAAC;IAChC,OAAO,GAAG,KAAK,CAAC;IACxB;;;;;;;OAOG;IACK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"escalation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-trigger-reconciler.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/team-trigger-reconciler.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,sBAAsB,CAAC;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,aAAa;IAOjC;;;;;;OAMG;IACG,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwFtD;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBpD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"team-trigger-reconciler.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/team-trigger-reconciler.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,sBAAsB,CAAC;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,aAAa;IAOjC;;;;;;OAMG;IACG,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwFtD;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBpD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;IAiBrB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;CAqBjB"}
|
|
@@ -175,7 +175,10 @@ export class TeamTriggerReconciler {
|
|
|
175
175
|
type: spec.config.type,
|
|
176
176
|
config: spec.config,
|
|
177
177
|
action: spec.action,
|
|
178
|
-
|
|
178
|
+
// The team's trigger spec is the owner's configuration, not harness
|
|
179
|
+
// plumbing: it shows on the owner's Schedules page.
|
|
180
|
+
createdBy: 'user',
|
|
181
|
+
internal: false,
|
|
179
182
|
maxFires: spec.maxFires,
|
|
180
183
|
maxIdleFires: spec.maxIdleFires,
|
|
181
184
|
teamId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-trigger-reconciler.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/team-trigger-reconciler.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"team-trigger-reconciler.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/team-trigger-reconciler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger classification — who created a trigger and whether it is
|
|
3
|
+
* harness-internal plumbing the owner should not have to look at.
|
|
4
|
+
*
|
|
5
|
+
* Until 2026-09-30 the agent skills (`schedule-followup`, `watch-for-event`)
|
|
6
|
+
* stamped every trigger `createdBy: 'system'`, and the Schedules page hid
|
|
7
|
+
* everything `system`. The owner's own nightly report — an agent created it
|
|
8
|
+
* for them — was therefore invisible. Two fixes live here:
|
|
9
|
+
*
|
|
10
|
+
* 1. {@link resolveTriggerCreator}: the API decides `createdBy` from the
|
|
11
|
+
* caller (the `X-Agent-Session` header, or the owner's dashboard) instead
|
|
12
|
+
* of trusting the body.
|
|
13
|
+
* 2. {@link classifyTriggerOnLoad}: a one-time, per-row migration that fills
|
|
14
|
+
* the new explicit `internal` flag for rows persisted before it existed.
|
|
15
|
+
*
|
|
16
|
+
* @module services/v3/trigger-classification
|
|
17
|
+
*/
|
|
18
|
+
import { type Trigger, type TriggerCreator } from '../../types/v2/trigger.types.js';
|
|
19
|
+
/** Name prefix of the harness's own named triggers (e.g. `system:escalation`). */
|
|
20
|
+
export declare const SYSTEM_TRIGGER_NAME_PREFIX = "system:";
|
|
21
|
+
/** The creator fields the API stamps on a new trigger. */
|
|
22
|
+
export interface ResolvedTriggerCreator {
|
|
23
|
+
createdBy: TriggerCreator;
|
|
24
|
+
createdBySession?: string;
|
|
25
|
+
internal: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** What the API knows about the request when it creates a trigger. */
|
|
28
|
+
export interface TriggerCreatorContext {
|
|
29
|
+
/** `createdBy` as sent in the body (untrusted) */
|
|
30
|
+
requestedCreatedBy?: TriggerCreator;
|
|
31
|
+
/** `internal` as sent in the body */
|
|
32
|
+
requestedInternal?: boolean;
|
|
33
|
+
/** `X-Agent-Session`, when an agent made the call */
|
|
34
|
+
callerSession?: string;
|
|
35
|
+
/** Whether the caller session is the orchestrator */
|
|
36
|
+
callerIsOrchestrator?: boolean;
|
|
37
|
+
/** Whether the call carried the owner-dashboard marker (and no agent session) */
|
|
38
|
+
isOwnerDashboard?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Decide `createdBy` / `createdBySession` / `internal` for a trigger created
|
|
42
|
+
* through the API.
|
|
43
|
+
*
|
|
44
|
+
* - An agent session header wins: the trigger belongs to that agent
|
|
45
|
+
* (`orchestrator` for the orc, `agent` otherwise), and it is owner-facing
|
|
46
|
+
* unless the body explicitly marks it internal. delegate-task's fallback
|
|
47
|
+
* check keeps `createdBy: 'delegate-task'` and is internal.
|
|
48
|
+
* - The owner's dashboard is always `user` and never internal.
|
|
49
|
+
* - Any other caller (server-to-server, curl without headers) keeps what it
|
|
50
|
+
* sent, defaulting to `user`.
|
|
51
|
+
*
|
|
52
|
+
* @param ctx - Request facts
|
|
53
|
+
* @returns The creator fields to store
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveTriggerCreator(ctx: TriggerCreatorContext): ResolvedTriggerCreator;
|
|
56
|
+
/**
|
|
57
|
+
* Whether a trigger is unmistakably harness plumbing: the escalation sweep
|
|
58
|
+
* (`runReconciler` / `system:*` names) or a delegate-task fallback check.
|
|
59
|
+
*
|
|
60
|
+
* A `fallback-*` name alone is not enough: team leads schedule their own
|
|
61
|
+
* "fallback check on X" follow-ups through schedule-followup, and those are
|
|
62
|
+
* reminders the owner may want to see. Only delegate-task's own rows
|
|
63
|
+
* (`createdBy: 'delegate-task'`) are plumbing.
|
|
64
|
+
*
|
|
65
|
+
* @param trigger - Trigger to inspect
|
|
66
|
+
* @returns True for harness-internal plumbing
|
|
67
|
+
*/
|
|
68
|
+
export declare function isHarnessPlumbing(trigger: Pick<Trigger, 'createdBy' | 'name' | 'action'>): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* One-time migration for a row persisted before `internal` existed. Mutates
|
|
71
|
+
* the trigger in place and reports whether it changed; rows that already
|
|
72
|
+
* carry `internal` are left alone, which is what makes it one-time.
|
|
73
|
+
*
|
|
74
|
+
* Rules, in order:
|
|
75
|
+
* 1. Harness plumbing ({@link isHarnessPlumbing}) → `internal: true`.
|
|
76
|
+
* 2. A trigger with a `name`, a recurring cron, or a `teamId` plus a
|
|
77
|
+
* createWorkItem action is someone's real schedule or reminder →
|
|
78
|
+
* `internal: false`. If it was mislabelled `system` it becomes `user`
|
|
79
|
+
* (team-spec rows — the owner's team config) or `agent` (everything else:
|
|
80
|
+
* the agent skills were the only other writers of `system`).
|
|
81
|
+
* 3. Anything else keeps its `createdBy` and gets the creator's default.
|
|
82
|
+
*
|
|
83
|
+
* @param trigger - Trigger loaded from disk (mutated)
|
|
84
|
+
* @returns True when the row was changed and should be persisted
|
|
85
|
+
*/
|
|
86
|
+
export declare function classifyTriggerOnLoad(trigger: Trigger): boolean;
|
|
87
|
+
//# sourceMappingURL=trigger-classification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger-classification.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/trigger-classification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,cAAc,EAGpB,MAAM,iCAAiC,CAAC;AAEzC,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,qBAAqB,GAAG,sBAAsB,CA2BxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC,GACtD,OAAO,CAIT;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAsB/D"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger classification — who created a trigger and whether it is
|
|
3
|
+
* harness-internal plumbing the owner should not have to look at.
|
|
4
|
+
*
|
|
5
|
+
* Until 2026-09-30 the agent skills (`schedule-followup`, `watch-for-event`)
|
|
6
|
+
* stamped every trigger `createdBy: 'system'`, and the Schedules page hid
|
|
7
|
+
* everything `system`. The owner's own nightly report — an agent created it
|
|
8
|
+
* for them — was therefore invisible. Two fixes live here:
|
|
9
|
+
*
|
|
10
|
+
* 1. {@link resolveTriggerCreator}: the API decides `createdBy` from the
|
|
11
|
+
* caller (the `X-Agent-Session` header, or the owner's dashboard) instead
|
|
12
|
+
* of trusting the body.
|
|
13
|
+
* 2. {@link classifyTriggerOnLoad}: a one-time, per-row migration that fills
|
|
14
|
+
* the new explicit `internal` flag for rows persisted before it existed.
|
|
15
|
+
*
|
|
16
|
+
* @module services/v3/trigger-classification
|
|
17
|
+
*/
|
|
18
|
+
import { isInternalByDefault, isRecurringTrigger, } from '../../types/v2/trigger.types.js';
|
|
19
|
+
/** Name prefix of the harness's own named triggers (e.g. `system:escalation`). */
|
|
20
|
+
export const SYSTEM_TRIGGER_NAME_PREFIX = 'system:';
|
|
21
|
+
/**
|
|
22
|
+
* Decide `createdBy` / `createdBySession` / `internal` for a trigger created
|
|
23
|
+
* through the API.
|
|
24
|
+
*
|
|
25
|
+
* - An agent session header wins: the trigger belongs to that agent
|
|
26
|
+
* (`orchestrator` for the orc, `agent` otherwise), and it is owner-facing
|
|
27
|
+
* unless the body explicitly marks it internal. delegate-task's fallback
|
|
28
|
+
* check keeps `createdBy: 'delegate-task'` and is internal.
|
|
29
|
+
* - The owner's dashboard is always `user` and never internal.
|
|
30
|
+
* - Any other caller (server-to-server, curl without headers) keeps what it
|
|
31
|
+
* sent, defaulting to `user`.
|
|
32
|
+
*
|
|
33
|
+
* @param ctx - Request facts
|
|
34
|
+
* @returns The creator fields to store
|
|
35
|
+
*/
|
|
36
|
+
export function resolveTriggerCreator(ctx) {
|
|
37
|
+
const requested = ctx.requestedCreatedBy;
|
|
38
|
+
if (ctx.callerSession) {
|
|
39
|
+
if (requested === 'delegate-task') {
|
|
40
|
+
return {
|
|
41
|
+
createdBy: 'delegate-task',
|
|
42
|
+
createdBySession: ctx.callerSession,
|
|
43
|
+
internal: ctx.requestedInternal ?? true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (ctx.requestedInternal === true) {
|
|
47
|
+
return {
|
|
48
|
+
createdBy: requested ?? 'system',
|
|
49
|
+
createdBySession: ctx.callerSession,
|
|
50
|
+
internal: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const createdBy = requested === 'mission'
|
|
54
|
+
? 'mission'
|
|
55
|
+
: ctx.callerIsOrchestrator ? 'orchestrator' : 'agent';
|
|
56
|
+
return { createdBy, createdBySession: ctx.callerSession, internal: false };
|
|
57
|
+
}
|
|
58
|
+
if (ctx.isOwnerDashboard) {
|
|
59
|
+
return { createdBy: 'user', internal: false };
|
|
60
|
+
}
|
|
61
|
+
const createdBy = requested ?? 'user';
|
|
62
|
+
return { createdBy, internal: ctx.requestedInternal ?? isInternalByDefault(createdBy) };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Whether a trigger is unmistakably harness plumbing: the escalation sweep
|
|
66
|
+
* (`runReconciler` / `system:*` names) or a delegate-task fallback check.
|
|
67
|
+
*
|
|
68
|
+
* A `fallback-*` name alone is not enough: team leads schedule their own
|
|
69
|
+
* "fallback check on X" follow-ups through schedule-followup, and those are
|
|
70
|
+
* reminders the owner may want to see. Only delegate-task's own rows
|
|
71
|
+
* (`createdBy: 'delegate-task'`) are plumbing.
|
|
72
|
+
*
|
|
73
|
+
* @param trigger - Trigger to inspect
|
|
74
|
+
* @returns True for harness-internal plumbing
|
|
75
|
+
*/
|
|
76
|
+
export function isHarnessPlumbing(trigger) {
|
|
77
|
+
if (trigger.createdBy === 'delegate-task')
|
|
78
|
+
return true;
|
|
79
|
+
if (trigger.action?.runReconciler)
|
|
80
|
+
return true;
|
|
81
|
+
return (trigger.name ?? '').startsWith(SYSTEM_TRIGGER_NAME_PREFIX);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* One-time migration for a row persisted before `internal` existed. Mutates
|
|
85
|
+
* the trigger in place and reports whether it changed; rows that already
|
|
86
|
+
* carry `internal` are left alone, which is what makes it one-time.
|
|
87
|
+
*
|
|
88
|
+
* Rules, in order:
|
|
89
|
+
* 1. Harness plumbing ({@link isHarnessPlumbing}) → `internal: true`.
|
|
90
|
+
* 2. A trigger with a `name`, a recurring cron, or a `teamId` plus a
|
|
91
|
+
* createWorkItem action is someone's real schedule or reminder →
|
|
92
|
+
* `internal: false`. If it was mislabelled `system` it becomes `user`
|
|
93
|
+
* (team-spec rows — the owner's team config) or `agent` (everything else:
|
|
94
|
+
* the agent skills were the only other writers of `system`).
|
|
95
|
+
* 3. Anything else keeps its `createdBy` and gets the creator's default.
|
|
96
|
+
*
|
|
97
|
+
* @param trigger - Trigger loaded from disk (mutated)
|
|
98
|
+
* @returns True when the row was changed and should be persisted
|
|
99
|
+
*/
|
|
100
|
+
export function classifyTriggerOnLoad(trigger) {
|
|
101
|
+
if (typeof trigger.internal === 'boolean')
|
|
102
|
+
return false;
|
|
103
|
+
if (isHarnessPlumbing(trigger)) {
|
|
104
|
+
trigger.internal = true;
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
const ownerFacing = !!trigger.name ||
|
|
108
|
+
isRecurringTrigger(trigger) ||
|
|
109
|
+
(!!trigger.teamId && !!trigger.action?.createWorkItem);
|
|
110
|
+
if (ownerFacing) {
|
|
111
|
+
trigger.internal = false;
|
|
112
|
+
if (trigger.createdBy === 'system') {
|
|
113
|
+
trigger.createdBy = trigger.managedBy === 'team-spec' ? 'user' : 'agent';
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
trigger.internal = isInternalByDefault(trigger.createdBy);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=trigger-classification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger-classification.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/trigger-classification.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,15 +13,29 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @module services/v3/trigger-engine.service
|
|
15
15
|
*/
|
|
16
|
-
import { type Trigger, type TriggerStatus, type TriggerAction, type CreateTriggerInput } from '../../types/v2/index.js';
|
|
16
|
+
import { type Trigger, type TriggerStatus, type TriggerAction, type CreateTriggerInput, type TriggerFireOutcome } from '../../types/v2/index.js';
|
|
17
17
|
import type { EventBusService } from '../event-bus/event-bus.service.js';
|
|
18
18
|
/**
|
|
19
19
|
* Callback invoked when a trigger fires and produces an action.
|
|
20
20
|
*
|
|
21
|
+
* It may report what the fire did; the engine stores that as the trigger's
|
|
22
|
+
* `lastFireResult` so the owner can see it. Returning nothing is fine.
|
|
23
|
+
*
|
|
21
24
|
* @param trigger - The trigger that fired
|
|
22
25
|
* @param action - The action to execute
|
|
26
|
+
* @returns Optional outcome of the fire
|
|
23
27
|
*/
|
|
24
|
-
export type TriggerActionHandler = (trigger: Trigger, action: TriggerAction) => Promise<void>;
|
|
28
|
+
export type TriggerActionHandler = (trigger: Trigger, action: TriggerAction) => Promise<void | TriggerFireOutcome>;
|
|
29
|
+
/**
|
|
30
|
+
* Callback that tells a trigger's team lead it is about to run out of fires.
|
|
31
|
+
* Resolves true once the heads-up was delivered (the engine then records it
|
|
32
|
+
* and does not send it again), false to retry on a later fire.
|
|
33
|
+
*
|
|
34
|
+
* @param trigger - The trigger close to exhaustion
|
|
35
|
+
* @param remaining - Fires left
|
|
36
|
+
* @param lastFireAt - Projected final fire time, when computable
|
|
37
|
+
*/
|
|
38
|
+
export type TriggerExpiryNotifier = (trigger: Trigger, remaining: number, lastFireAt: string | undefined) => Promise<boolean>;
|
|
25
39
|
/**
|
|
26
40
|
* Result of a trigger fire attempt — indicates whether the fire was productive.
|
|
27
41
|
*/
|
|
@@ -67,6 +81,8 @@ export declare class TriggerEngine {
|
|
|
67
81
|
private signalListener;
|
|
68
82
|
/** Callback for executing trigger actions. */
|
|
69
83
|
private actionHandler;
|
|
84
|
+
/** Callback for the expiry heads-up (see {@link TriggerExpiryNotifier}). */
|
|
85
|
+
private expiryNotifier;
|
|
70
86
|
/** Interval handle for time trigger polling. */
|
|
71
87
|
private timeCheckInterval;
|
|
72
88
|
/** Timeout handles for one-shot delay/fireAt triggers, keyed by trigger ID. */
|
|
@@ -117,6 +133,13 @@ export declare class TriggerEngine {
|
|
|
117
133
|
* @param handler - Callback invoked when a trigger fires
|
|
118
134
|
*/
|
|
119
135
|
setActionHandler(handler: TriggerActionHandler): void;
|
|
136
|
+
/**
|
|
137
|
+
* Sets the callback that warns a team lead before a recurring trigger
|
|
138
|
+
* exhausts its `maxFires`. Without one, no heads-up is sent.
|
|
139
|
+
*
|
|
140
|
+
* @param notifier - Delivery callback
|
|
141
|
+
*/
|
|
142
|
+
setExpiryNotifier(notifier: TriggerExpiryNotifier): void;
|
|
120
143
|
/**
|
|
121
144
|
* Starts the TriggerEngine: loads persisted triggers from disk,
|
|
122
145
|
* sets up time polling interval, and registers signal listeners.
|
|
@@ -199,6 +222,29 @@ export declare class TriggerEngine {
|
|
|
199
222
|
* @returns The fire result
|
|
200
223
|
*/
|
|
201
224
|
fire(trigger: Trigger, productive?: boolean): Promise<TriggerFireResult>;
|
|
225
|
+
/**
|
|
226
|
+
* Projected time of a recurring trigger's final fire (for display).
|
|
227
|
+
*
|
|
228
|
+
* @param id - Trigger UUID
|
|
229
|
+
* @returns ISO time, or undefined when unlimited/unknown
|
|
230
|
+
*/
|
|
231
|
+
projectLastFireAt(id: string): string | undefined;
|
|
232
|
+
/**
|
|
233
|
+
* Sends the expiry heads-up for every trigger that is inside the warning
|
|
234
|
+
* window and has not had one yet. Runs at start; fire() covers the rest.
|
|
235
|
+
*
|
|
236
|
+
* @returns Number of heads-ups delivered
|
|
237
|
+
*/
|
|
238
|
+
checkExpiringTriggers(): Promise<number>;
|
|
239
|
+
/**
|
|
240
|
+
* Deliver the heads-up for one trigger if it is due. Marks
|
|
241
|
+
* `expiryNoticeSentAt` only on success; never changes `maxFires`.
|
|
242
|
+
* The caller persists.
|
|
243
|
+
*
|
|
244
|
+
* @param trigger - Trigger to check
|
|
245
|
+
* @returns True if a heads-up was delivered
|
|
246
|
+
*/
|
|
247
|
+
private maybeSendExpiryNotice;
|
|
202
248
|
/**
|
|
203
249
|
* Sets up the polling interval for cron-based time triggers.
|
|
204
250
|
*/
|
|
@@ -458,6 +504,8 @@ export declare class TriggerEngine {
|
|
|
458
504
|
total: number;
|
|
459
505
|
byStatus: Record<TriggerStatus, number>;
|
|
460
506
|
byType: Record<string, number>;
|
|
507
|
+
/** Active, owner-facing, recurring (cron) triggers — the Schedules badge */
|
|
508
|
+
recurringActive: number;
|
|
461
509
|
};
|
|
462
510
|
}
|
|
463
511
|
//# sourceMappingURL=trigger-engine.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-engine.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/trigger-engine.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,aAAa,EAIlB,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"trigger-engine.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/trigger-engine.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,12 @@ import * as path from 'path';
|
|
|
18
18
|
import { LoggerService } from '../core/logger.service.js';
|
|
19
19
|
import { ensureDir } from '../../utils/file-io.utils.js';
|
|
20
20
|
import { atomicWriteJsonWithGuard, IntegrityViolationError, } from '../../utils/integrity-guarded-write.utils.js';
|
|
21
|
-
import { createTrigger, validateCreateTriggerInput, } from '../../types/v2/index.js';
|
|
21
|
+
import { createTrigger, validateCreateTriggerInput, isRecurringTrigger, } from '../../types/v2/index.js';
|
|
22
22
|
import { getNextRunTime } from '../workflow/cron-task.service.js';
|
|
23
23
|
import { resolveProjectDataDir } from '../core/crewly-home.utils.js';
|
|
24
24
|
import { TRIGGER_ENGINE_CONSTANTS } from '../../constants.js';
|
|
25
|
+
import { classifyTriggerOnLoad } from './trigger-classification.js';
|
|
26
|
+
import { needsExpiryNotice, projectLastFireAt, remainingFires } from './trigger-expiry.js';
|
|
25
27
|
// ---------------------------------------------------------------------------
|
|
26
28
|
// Constants
|
|
27
29
|
// ---------------------------------------------------------------------------
|
|
@@ -68,6 +70,8 @@ export class TriggerEngine {
|
|
|
68
70
|
signalListener = null;
|
|
69
71
|
/** Callback for executing trigger actions. */
|
|
70
72
|
actionHandler = null;
|
|
73
|
+
/** Callback for the expiry heads-up (see {@link TriggerExpiryNotifier}). */
|
|
74
|
+
expiryNotifier = null;
|
|
71
75
|
/** Interval handle for time trigger polling. */
|
|
72
76
|
timeCheckInterval = null;
|
|
73
77
|
/** Timeout handles for one-shot delay/fireAt triggers, keyed by trigger ID. */
|
|
@@ -141,6 +145,15 @@ export class TriggerEngine {
|
|
|
141
145
|
setActionHandler(handler) {
|
|
142
146
|
this.actionHandler = handler;
|
|
143
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Sets the callback that warns a team lead before a recurring trigger
|
|
150
|
+
* exhausts its `maxFires`. Without one, no heads-up is sent.
|
|
151
|
+
*
|
|
152
|
+
* @param notifier - Delivery callback
|
|
153
|
+
*/
|
|
154
|
+
setExpiryNotifier(notifier) {
|
|
155
|
+
this.expiryNotifier = notifier;
|
|
156
|
+
}
|
|
144
157
|
// ---------------------------------------------------------------------------
|
|
145
158
|
// Lifecycle
|
|
146
159
|
// ---------------------------------------------------------------------------
|
|
@@ -159,6 +172,9 @@ export class TriggerEngine {
|
|
|
159
172
|
this.setupOneShotTimers();
|
|
160
173
|
this.running = true;
|
|
161
174
|
this.logger.info('TriggerEngine started', { triggerCount: this.triggers.size });
|
|
175
|
+
// Triggers already inside the warning window at boot (e.g. after an
|
|
176
|
+
// upgrade) get their heads-up now rather than at their next fire.
|
|
177
|
+
await this.checkExpiringTriggers();
|
|
162
178
|
}
|
|
163
179
|
/**
|
|
164
180
|
* Stops the TriggerEngine: clears intervals, timers, and signal listeners.
|
|
@@ -379,12 +395,20 @@ export class TriggerEngine {
|
|
|
379
395
|
// Execute action
|
|
380
396
|
if (this.actionHandler) {
|
|
381
397
|
try {
|
|
382
|
-
await this.actionHandler(trigger, trigger.action);
|
|
398
|
+
const outcome = await this.actionHandler(trigger, trigger.action);
|
|
399
|
+
if (outcome && typeof outcome === 'object' && 'status' in outcome) {
|
|
400
|
+
trigger.lastFireResult = { ...outcome, at: now };
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
delete trigger.lastFireResult;
|
|
404
|
+
}
|
|
383
405
|
}
|
|
384
406
|
catch (err) {
|
|
407
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
408
|
+
trigger.lastFireResult = { status: 'failed', detail: message, at: now };
|
|
385
409
|
this.logger.error('Action handler failed', {
|
|
386
410
|
triggerId: trigger.id,
|
|
387
|
-
error:
|
|
411
|
+
error: message,
|
|
388
412
|
});
|
|
389
413
|
}
|
|
390
414
|
}
|
|
@@ -409,10 +433,69 @@ export class TriggerEngine {
|
|
|
409
433
|
// Recalculate next fire for cron triggers
|
|
410
434
|
trigger.nextFireAt = this.calculateNextFireAt(trigger.config, trigger.createdAt);
|
|
411
435
|
}
|
|
436
|
+
await this.maybeSendExpiryNotice(trigger);
|
|
412
437
|
await this.persistTriggers();
|
|
413
438
|
return { triggerId: trigger.id, productive, firedAt: now };
|
|
414
439
|
}
|
|
415
440
|
// ---------------------------------------------------------------------------
|
|
441
|
+
// Expiry heads-up
|
|
442
|
+
// ---------------------------------------------------------------------------
|
|
443
|
+
/**
|
|
444
|
+
* Projected time of a recurring trigger's final fire (for display).
|
|
445
|
+
*
|
|
446
|
+
* @param id - Trigger UUID
|
|
447
|
+
* @returns ISO time, or undefined when unlimited/unknown
|
|
448
|
+
*/
|
|
449
|
+
projectLastFireAt(id) {
|
|
450
|
+
const trigger = this.triggers.get(id);
|
|
451
|
+
return trigger ? projectLastFireAt(trigger) : undefined;
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Sends the expiry heads-up for every trigger that is inside the warning
|
|
455
|
+
* window and has not had one yet. Runs at start; fire() covers the rest.
|
|
456
|
+
*
|
|
457
|
+
* @returns Number of heads-ups delivered
|
|
458
|
+
*/
|
|
459
|
+
async checkExpiringTriggers() {
|
|
460
|
+
let sent = 0;
|
|
461
|
+
for (const trigger of this.triggers.values()) {
|
|
462
|
+
if (await this.maybeSendExpiryNotice(trigger))
|
|
463
|
+
sent += 1;
|
|
464
|
+
}
|
|
465
|
+
if (sent > 0) {
|
|
466
|
+
await this.persistTriggers();
|
|
467
|
+
}
|
|
468
|
+
return sent;
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Deliver the heads-up for one trigger if it is due. Marks
|
|
472
|
+
* `expiryNoticeSentAt` only on success; never changes `maxFires`.
|
|
473
|
+
* The caller persists.
|
|
474
|
+
*
|
|
475
|
+
* @param trigger - Trigger to check
|
|
476
|
+
* @returns True if a heads-up was delivered
|
|
477
|
+
*/
|
|
478
|
+
async maybeSendExpiryNotice(trigger) {
|
|
479
|
+
if (!this.expiryNotifier || !needsExpiryNotice(trigger))
|
|
480
|
+
return false;
|
|
481
|
+
const remaining = remainingFires(trigger) ?? 0;
|
|
482
|
+
try {
|
|
483
|
+
const delivered = await this.expiryNotifier(trigger, remaining, projectLastFireAt(trigger));
|
|
484
|
+
if (!delivered)
|
|
485
|
+
return false;
|
|
486
|
+
trigger.expiryNoticeSentAt = new Date().toISOString();
|
|
487
|
+
this.logger.info('Trigger expiry heads-up sent', { id: trigger.id, remaining });
|
|
488
|
+
return true;
|
|
489
|
+
}
|
|
490
|
+
catch (err) {
|
|
491
|
+
this.logger.warn('Trigger expiry heads-up failed; will retry on the next fire', {
|
|
492
|
+
id: trigger.id,
|
|
493
|
+
error: err instanceof Error ? err.message : String(err),
|
|
494
|
+
});
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
// ---------------------------------------------------------------------------
|
|
416
499
|
// Time Trigger Handling
|
|
417
500
|
// ---------------------------------------------------------------------------
|
|
418
501
|
/**
|
|
@@ -755,14 +838,23 @@ export class TriggerEngine {
|
|
|
755
838
|
// would see lastKnownActiveCount=0 and incorrectly suppress its warn,
|
|
756
839
|
// even when the loaded state had legitimate active triggers.
|
|
757
840
|
this.lastKnownActiveCount = Array.from(this.triggers.values()).filter((t) => t.status === 'active').length;
|
|
841
|
+
// One-time classification of rows persisted before `internal` existed
|
|
842
|
+
// (see trigger-classification.ts). Rows that already carry the flag are
|
|
843
|
+
// untouched, so this is a no-op after the first boot.
|
|
844
|
+
let classified = 0;
|
|
845
|
+
for (const trigger of this.triggers.values()) {
|
|
846
|
+
if (classifyTriggerOnLoad(trigger))
|
|
847
|
+
classified += 1;
|
|
848
|
+
}
|
|
758
849
|
const cancelledDuplicates = this.dedupeDuplicateTriggers();
|
|
759
|
-
if (cancelledDuplicates > 0) {
|
|
850
|
+
if (cancelledDuplicates > 0 || classified > 0) {
|
|
760
851
|
await this.persistTriggers();
|
|
761
852
|
}
|
|
762
853
|
this.logger.info('Loaded triggers from disk', {
|
|
763
854
|
count: this.triggers.size,
|
|
764
855
|
activeCount: this.lastKnownActiveCount,
|
|
765
856
|
cancelledDuplicates,
|
|
857
|
+
classified,
|
|
766
858
|
});
|
|
767
859
|
}
|
|
768
860
|
/**
|
|
@@ -1047,15 +1139,20 @@ export class TriggerEngine {
|
|
|
1047
1139
|
cancelled: 0,
|
|
1048
1140
|
};
|
|
1049
1141
|
const byType = {};
|
|
1142
|
+
let recurringActive = 0;
|
|
1050
1143
|
for (const trigger of this.triggers.values()) {
|
|
1051
1144
|
byStatus[trigger.status] = (byStatus[trigger.status] || 0) + 1;
|
|
1052
1145
|
byType[trigger.type] = (byType[trigger.type] || 0) + 1;
|
|
1146
|
+
if (trigger.status === 'active' && trigger.internal !== true && isRecurringTrigger(trigger)) {
|
|
1147
|
+
recurringActive += 1;
|
|
1148
|
+
}
|
|
1053
1149
|
}
|
|
1054
1150
|
return {
|
|
1055
1151
|
running: this.running,
|
|
1056
1152
|
total: this.triggers.size,
|
|
1057
1153
|
byStatus,
|
|
1058
1154
|
byType,
|
|
1155
|
+
recurringActive,
|
|
1059
1156
|
};
|
|
1060
1157
|
}
|
|
1061
1158
|
}
|