nomoreide 0.1.77 → 0.1.78

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.
@@ -12,18 +12,32 @@ import type { TimelineStore } from "./timeline-store.js";
12
12
  * existing client runner. Pending runs survive until a browser claims them, so
13
13
  * an event detected while no tab is open isn't lost.
14
14
  *
15
- * Live event sources are the two already push-based and in-process:
16
- * - `error-incident` — {@link ErrorInbox} surfaces a new/repeated incident.
15
+ * Event sources:
16
+ * - `error-incident` — {@link ErrorInbox} surfaces a new/repeated incident (push).
17
17
  * - `service-crash` — {@link TimelineStore} records a `service.lifecycle`
18
- * event with `severity: "error"` (non-zero exit not initiated by the user).
18
+ * event with `severity: "error"` (non-zero exit not initiated by the user) (push).
19
+ * - `ci-failure` — the only **polled** source: an optional `ciSource`
20
+ * reports the current branch's failing CI on an interval. It fires at most
21
+ * once per commit sha (a failing run isn't re-enqueued every poll).
19
22
  */
20
- export declare const triggerEventSchema: z.ZodEnum<["error-incident", "service-crash"]>;
23
+ export declare const triggerEventSchema: z.ZodEnum<["error-incident", "service-crash", "ci-failure"]>;
21
24
  export type TriggerEvent = z.infer<typeof triggerEventSchema>;
25
+ /**
26
+ * A non-null result means the current branch's CI is failing on `sha`. The
27
+ * source returns `null` whenever CI is green, still running, or GitHub is
28
+ * unavailable (no token / remote) — i.e. "nothing to fire".
29
+ */
30
+ export interface CiFailureSnapshot {
31
+ sha: string;
32
+ branch: string;
33
+ /** Names of the checks / workflow runs that failed. */
34
+ failingChecks: string[];
35
+ }
22
36
  export declare const workflowTriggerSchema: z.ZodObject<{
23
37
  id: z.ZodString;
24
38
  /** The workflow (built-in or user-saved) to run when this fires. */
25
39
  workflowId: z.ZodString;
26
- event: z.ZodEnum<["error-incident", "service-crash"]>;
40
+ event: z.ZodEnum<["error-incident", "service-crash", "ci-failure"]>;
27
41
  /** Disabled triggers stay configured but never fire. */
28
42
  enabled: z.ZodDefault<z.ZodBoolean>;
29
43
  /**
@@ -39,14 +53,14 @@ export declare const workflowTriggerSchema: z.ZodObject<{
39
53
  }, "strip", z.ZodTypeAny, {
40
54
  id: string;
41
55
  workflowId: string;
42
- event: "error-incident" | "service-crash";
56
+ event: "error-incident" | "service-crash" | "ci-failure";
43
57
  enabled: boolean;
44
58
  autoRun: boolean;
45
59
  filter?: string | undefined;
46
60
  }, {
47
61
  id: string;
48
62
  workflowId: string;
49
- event: "error-incident" | "service-crash";
63
+ event: "error-incident" | "service-crash" | "ci-failure";
50
64
  filter?: string | undefined;
51
65
  enabled?: boolean | undefined;
52
66
  autoRun?: boolean | undefined;
@@ -69,6 +83,16 @@ interface WorkflowTriggerManagerOptions {
69
83
  configStore: ConfigStore;
70
84
  errorInbox: ErrorInbox;
71
85
  timelineStore: TimelineStore;
86
+ /**
87
+ * Polled CI source for `ci-failure` triggers. Omit to disable the source
88
+ * (e.g. tests that don't exercise CI, or when GitHub is never configured).
89
+ */
90
+ ciSource?: () => Promise<CiFailureSnapshot | null>;
91
+ /**
92
+ * How often {@link ciSource} is polled. `0` disables the internal timer —
93
+ * tests drive {@link WorkflowTriggerManager.pollCiOnce} by hand instead.
94
+ */
95
+ ciPollIntervalMs?: number;
72
96
  /** Max pending runs kept; older ones drop off the front. */
73
97
  capacity?: number;
74
98
  /** A repeat of the same signature within this window is ignored. */
@@ -80,6 +104,8 @@ export declare class WorkflowTriggerManager {
80
104
  private readonly configStore;
81
105
  private readonly errorInbox;
82
106
  private readonly timelineStore;
107
+ private readonly ciSource?;
108
+ private readonly ciPollIntervalMs;
83
109
  private readonly capacity;
84
110
  private readonly dedupeWindowMs;
85
111
  private readonly now;
@@ -87,6 +113,7 @@ export declare class WorkflowTriggerManager {
87
113
  private readonly lastFiredAt;
88
114
  private readonly listeners;
89
115
  private readonly unsubscribers;
116
+ private ciTimer?;
90
117
  private started;
91
118
  constructor(options: WorkflowTriggerManagerOptions);
92
119
  /** Subscribe to the live event sources. Idempotent. */
@@ -99,6 +126,13 @@ export declare class WorkflowTriggerManager {
99
126
  ackPending(id: string): boolean;
100
127
  private onIncident;
101
128
  private onTimelineEvent;
129
+ /**
130
+ * Poll the CI source once and enqueue a run per matching `ci-failure`
131
+ * trigger. Public so tests can drive it without timers; a no-op when no CI
132
+ * source is wired or no `ci-failure` trigger is enabled (skips the network
133
+ * call entirely in that case).
134
+ */
135
+ pollCiOnce(): Promise<void>;
102
136
  private triggersFor;
103
137
  private enqueue;
104
138
  }
@@ -10,12 +10,19 @@ import { z } from "zod";
10
10
  * existing client runner. Pending runs survive until a browser claims them, so
11
11
  * an event detected while no tab is open isn't lost.
12
12
  *
13
- * Live event sources are the two already push-based and in-process:
14
- * - `error-incident` — {@link ErrorInbox} surfaces a new/repeated incident.
13
+ * Event sources:
14
+ * - `error-incident` — {@link ErrorInbox} surfaces a new/repeated incident (push).
15
15
  * - `service-crash` — {@link TimelineStore} records a `service.lifecycle`
16
- * event with `severity: "error"` (non-zero exit not initiated by the user).
16
+ * event with `severity: "error"` (non-zero exit not initiated by the user) (push).
17
+ * - `ci-failure` — the only **polled** source: an optional `ciSource`
18
+ * reports the current branch's failing CI on an interval. It fires at most
19
+ * once per commit sha (a failing run isn't re-enqueued every poll).
17
20
  */
18
- export const triggerEventSchema = z.enum(["error-incident", "service-crash"]);
21
+ export const triggerEventSchema = z.enum([
22
+ "error-incident",
23
+ "service-crash",
24
+ "ci-failure",
25
+ ]);
19
26
  export const workflowTriggerSchema = z.object({
20
27
  id: z.string().min(1),
21
28
  /** The workflow (built-in or user-saved) to run when this fires. */
@@ -38,6 +45,8 @@ export class WorkflowTriggerManager {
38
45
  configStore;
39
46
  errorInbox;
40
47
  timelineStore;
48
+ ciSource;
49
+ ciPollIntervalMs;
41
50
  capacity;
42
51
  dedupeWindowMs;
43
52
  now;
@@ -45,11 +54,14 @@ export class WorkflowTriggerManager {
45
54
  lastFiredAt = new Map();
46
55
  listeners = new Set();
47
56
  unsubscribers = [];
57
+ ciTimer;
48
58
  started = false;
49
59
  constructor(options) {
50
60
  this.configStore = options.configStore;
51
61
  this.errorInbox = options.errorInbox;
52
62
  this.timelineStore = options.timelineStore;
63
+ this.ciSource = options.ciSource;
64
+ this.ciPollIntervalMs = options.ciPollIntervalMs ?? 60_000;
53
65
  this.capacity = options.capacity ?? 50;
54
66
  this.dedupeWindowMs = options.dedupeWindowMs ?? 30_000;
55
67
  this.now = options.now ?? Date.now;
@@ -65,10 +77,21 @@ export class WorkflowTriggerManager {
65
77
  this.unsubscribers.push(this.timelineStore.subscribe((event) => {
66
78
  void this.onTimelineEvent(event);
67
79
  }));
80
+ if (this.ciSource && this.ciPollIntervalMs > 0) {
81
+ this.ciTimer = setInterval(() => {
82
+ void this.pollCiOnce();
83
+ }, this.ciPollIntervalMs);
84
+ // Don't keep the process alive just for CI polling.
85
+ this.ciTimer.unref?.();
86
+ }
68
87
  }
69
88
  stop() {
70
89
  for (const off of this.unsubscribers.splice(0))
71
90
  off();
91
+ if (this.ciTimer) {
92
+ clearInterval(this.ciTimer);
93
+ this.ciTimer = undefined;
94
+ }
72
95
  this.started = false;
73
96
  }
74
97
  subscribe(listener) {
@@ -113,6 +136,36 @@ export class WorkflowTriggerManager {
113
136
  });
114
137
  }
115
138
  }
139
+ /**
140
+ * Poll the CI source once and enqueue a run per matching `ci-failure`
141
+ * trigger. Public so tests can drive it without timers; a no-op when no CI
142
+ * source is wired or no `ci-failure` trigger is enabled (skips the network
143
+ * call entirely in that case).
144
+ */
145
+ async pollCiOnce() {
146
+ if (!this.ciSource)
147
+ return;
148
+ const triggers = await this.triggersFor("ci-failure");
149
+ if (triggers.length === 0)
150
+ return;
151
+ const snapshot = await this.ciSource().catch(() => null);
152
+ if (!snapshot)
153
+ return;
154
+ const haystack = `${snapshot.branch} ${snapshot.failingChecks.join(" ")}`;
155
+ for (const trigger of triggers) {
156
+ if (!matchesFilter(trigger.filter, haystack))
157
+ continue;
158
+ const checks = snapshot.failingChecks.length
159
+ ? `: ${snapshot.failingChecks.join(", ")}`
160
+ : "";
161
+ this.enqueue(trigger, {
162
+ // Fire at most once per failing commit, not every poll.
163
+ signatureCause: `ci:${snapshot.sha}`,
164
+ summary: `CI failed on ${snapshot.branch}${checks}`,
165
+ once: true,
166
+ });
167
+ }
168
+ }
116
169
  async triggersFor(event) {
117
170
  const config = await this.configStore.load();
118
171
  return config.workflowTriggers.filter((trigger) => trigger.enabled && trigger.event === event);
@@ -121,8 +174,14 @@ export class WorkflowTriggerManager {
121
174
  const signature = `${trigger.id}:${cause.signatureCause}`;
122
175
  const at = this.now();
123
176
  const previous = this.lastFiredAt.get(signature);
124
- if (previous !== undefined && at - previous < this.dedupeWindowMs)
125
- return;
177
+ if (previous !== undefined) {
178
+ // `once` signatures (e.g. a CI failure on a given sha) never re-fire;
179
+ // the rest are debounced by the dedupe window.
180
+ if (cause.once)
181
+ return;
182
+ if (at - previous < this.dedupeWindowMs)
183
+ return;
184
+ }
126
185
  this.lastFiredAt.set(signature, at);
127
186
  const run = {
128
187
  id: randomUUID(),
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-triggers.js","sourceRoot":"","sources":["../../src/core/workflow-triggers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-triggers.js","sourceRoot":"","sources":["../../src/core/workflow-triggers.ts"],"names":[],"mappings":"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"}