openclaw-linear 0.2.0 → 0.4.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/README.md CHANGED
@@ -29,6 +29,13 @@ plugins:
29
29
  teamIds: ["ENG", "OPS"] # Optional: filter to specific teams (empty = all)
30
30
  eventFilter: ["Issue", "Comment"] # Optional: filter event types (empty = all)
31
31
  debounceMs: 30000 # Optional: batch window in ms (default: 30000)
32
+ stateActions: # Optional: map state types/names to queue actions
33
+ backlog: "add"
34
+ unstarted: "add"
35
+ started: "ignore"
36
+ "In Review": "remove" # State names override type matches (case-insensitive)
37
+ completed: "remove"
38
+ canceled: "remove"
32
39
  ```
33
40
 
34
41
  ### Config Fields
@@ -40,6 +47,7 @@ plugins:
40
47
  | `teamIds` | string[] | No | Team keys to scope webhook processing. Empty = all teams. |
41
48
  | `eventFilter` | string[] | No | Event types to handle (`Issue`, `Comment`). Empty = all. |
42
49
  | `debounceMs` | integer | No | Debounce window in milliseconds. Events arriving within this window are batched into a single message. Must be positive. Default: `30000` (30s). |
50
+ | `stateActions` | object | No | Maps Linear state types or names to queue actions (`"add"`, `"remove"`, `"ignore"`). Keys can be state types (`triage`, `backlog`, `unstarted`, `started`, `completed`, `canceled`) or custom state names (e.g. `"In Review"`). Name matches take precedence over type matches, both case-insensitive. See [State Actions](#state-actions) below. |
43
51
 
44
52
  ## Webhook Setup
45
53
 
@@ -65,9 +73,36 @@ plugins:
65
73
  | Issue assigned to mapped user | `wake` | `issue.assigned` |
66
74
  | Issue unassigned from mapped user | `notify` | `issue.unassigned` |
67
75
  | Issue reassigned away from mapped user | `notify` | `issue.reassigned` |
76
+ | Issue state change → `add` action | `wake` | `issue.state_readded` |
77
+ | Issue state change → `remove` action | `notify` | `issue.state_removed` |
68
78
  | @mention in comment (mapped user) | `wake` | `comment.mention` |
69
79
 
70
- `wake` events are enqueued into the debouncer and dispatched to the agent. `notify` events are logged only.
80
+ `wake` events are enqueued into the debouncer and dispatched to the agent. `notify` events write to the queue without waking.
81
+
82
+ ## State Actions
83
+
84
+ When an issue's state changes, the plugin resolves what to do based on the `stateActions` config. This lets you control which state transitions re-add issues to the queue (e.g. bounced back from testing) vs. remove them (e.g. done/canceled) vs. are ignored (e.g. in progress).
85
+
86
+ **Resolution order:** state name match → state type match → built-in default.
87
+
88
+ Linear has 6 fixed state types. Custom state names (e.g. "In Review", "QA") are team-specific but always belong to one of these types. The `stateActions` config lets you match on either.
89
+
90
+ **Built-in defaults** (used when `stateActions` is not configured or a state isn't mapped):
91
+
92
+ | State Type | Default Action |
93
+ |---|---|
94
+ | `triage` | `ignore` |
95
+ | `backlog` | `add` |
96
+ | `unstarted` | `add` |
97
+ | `started` | `ignore` |
98
+ | `completed` | `remove` |
99
+ | `canceled` | `remove` |
100
+
101
+ **Actions:**
102
+
103
+ - `"add"` — re-add the issue to the queue as a ticket and wake the agent
104
+ - `"remove"` — remove the issue's ticket from the queue
105
+ - `"ignore"` — do nothing (default for unmapped states)
71
106
 
72
107
  ## How Dispatch Works
73
108
 
@@ -6,8 +6,11 @@ export type RouterAction = {
6
6
  detail: string;
7
7
  issueId: string;
8
8
  issueLabel: string;
9
+ identifier: string;
10
+ issuePriority: number;
9
11
  linearUserId: string;
10
12
  };
13
+ export type StateAction = "add" | "remove" | "ignore";
11
14
  export type EventRouterConfig = {
12
15
  agentMapping: Record<string, string>;
13
16
  logger: {
@@ -16,6 +19,9 @@ export type EventRouterConfig = {
16
19
  };
17
20
  eventFilter?: string[];
18
21
  teamIds?: string[];
22
+ stateActions?: Record<string, string>;
19
23
  };
24
+ export declare const DEFAULT_STATE_ACTIONS: Record<string, StateAction>;
25
+ export declare function resolveStateAction(config: EventRouterConfig, stateType: string | undefined, stateName: string | undefined): StateAction;
20
26
  export declare function createEventRouter(config: EventRouterConfig): (event: LinearWebhookPayload) => RouterAction[];
21
27
  //# sourceMappingURL=event-router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-router.d.ts","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KAClC,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAyKF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,IACnC,OAAO,oBAAoB,KAAG,YAAY,EAAE,CAiCnE"}
1
+ {"version":3,"file":"event-router.d.ts","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KAClC,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAO7D,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,WAAW,CA+Bb;AAmTD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,IACnC,OAAO,oBAAoB,KAAG,YAAY,EAAE,CAmCnE"}
@@ -1,3 +1,39 @@
1
+ export const DEFAULT_STATE_ACTIONS = {
2
+ triage: "ignore",
3
+ backlog: "add",
4
+ unstarted: "add",
5
+ started: "ignore",
6
+ completed: "remove",
7
+ canceled: "remove",
8
+ };
9
+ export function resolveStateAction(config, stateType, stateName) {
10
+ if (config.stateActions) {
11
+ // Build lowercase lookup from config
12
+ const lookup = new Map();
13
+ for (const [key, value] of Object.entries(config.stateActions)) {
14
+ lookup.set(key.toLowerCase(), value);
15
+ }
16
+ // Check state name first (case-insensitive)
17
+ if (stateName) {
18
+ const byName = lookup.get(stateName.toLowerCase());
19
+ if (byName === "add" || byName === "remove" || byName === "ignore") {
20
+ return byName;
21
+ }
22
+ }
23
+ // Check state type
24
+ if (stateType) {
25
+ const byType = lookup.get(stateType.toLowerCase());
26
+ if (byType === "add" || byType === "remove" || byType === "ignore") {
27
+ return byType;
28
+ }
29
+ }
30
+ }
31
+ // Fall back to built-in defaults
32
+ if (stateType && stateType in DEFAULT_STATE_ACTIONS) {
33
+ return DEFAULT_STATE_ACTIONS[stateType];
34
+ }
35
+ return "ignore";
36
+ }
1
37
  /**
2
38
  * Extract mention user IDs from ProseMirror bodyData JSON.
3
39
  * Traverses the document tree looking for "mention" nodes with an `attrs.id`.
@@ -44,64 +80,187 @@ function resolveIssueLabel(data) {
44
80
  return title ? `${label}: ${title}` : label;
45
81
  }
46
82
  function handleIssueUpdate(event, config) {
47
- const changes = event.data.changes;
48
- if (!changes?.assigneeId)
49
- return [];
83
+ const updatedFrom = event.updatedFrom ?? {};
50
84
  const actions = [];
51
- const { from: oldAssignee, to: newAssignee } = changes.assigneeId;
52
85
  const issueId = String(event.data.id ?? "unknown");
53
86
  const issueLabel = resolveIssueLabel(event.data);
54
- if (newAssignee) {
55
- const agentId = config.agentMapping[newAssignee];
56
- if (agentId) {
57
- actions.push({
58
- type: "wake",
59
- agentId,
60
- event: "issue.assigned",
61
- detail: `Assigned to issue ${issueLabel}`,
62
- issueId,
63
- issueLabel,
64
- linearUserId: newAssignee,
65
- });
87
+ const identifier = event.data.identifier ?? issueId;
88
+ const issuePriority = event.data.priority ?? 0;
89
+ // --- Assignee changes ---
90
+ if ("assigneeId" in updatedFrom) {
91
+ const oldAssignee = updatedFrom.assigneeId;
92
+ const newAssignee = event.data.assigneeId;
93
+ if (newAssignee) {
94
+ const agentId = config.agentMapping[newAssignee];
95
+ if (agentId) {
96
+ actions.push({
97
+ type: "wake",
98
+ agentId,
99
+ event: "issue.assigned",
100
+ detail: `Assigned to issue ${issueLabel}`,
101
+ issueId,
102
+ issueLabel,
103
+ identifier,
104
+ issuePriority,
105
+ linearUserId: newAssignee,
106
+ });
107
+ }
108
+ else {
109
+ config.logger.info(`Unmapped Linear user ${newAssignee} assigned to ${issueId}`);
110
+ }
66
111
  }
67
- else {
68
- config.logger.info(`Unmapped Linear user ${newAssignee} assigned to ${issueId}`);
112
+ if (oldAssignee && !newAssignee) {
113
+ const agentId = config.agentMapping[oldAssignee];
114
+ if (agentId) {
115
+ actions.push({
116
+ type: "notify",
117
+ agentId,
118
+ event: "issue.unassigned",
119
+ detail: `Unassigned from issue ${issueLabel}`,
120
+ issueId,
121
+ issueLabel,
122
+ identifier,
123
+ issuePriority,
124
+ linearUserId: oldAssignee,
125
+ });
126
+ }
127
+ else {
128
+ config.logger.info(`Unmapped Linear user ${oldAssignee} unassigned from ${issueId}`);
129
+ }
69
130
  }
70
- }
71
- if (oldAssignee && !newAssignee) {
72
- const agentId = config.agentMapping[oldAssignee];
73
- if (agentId) {
74
- actions.push({
75
- type: "notify",
76
- agentId,
77
- event: "issue.unassigned",
78
- detail: `Unassigned from issue ${issueLabel}`,
79
- issueId,
80
- issueLabel,
81
- linearUserId: oldAssignee,
82
- });
131
+ // Reassignment: both old and new assignee present — notify old assignee
132
+ if (oldAssignee && newAssignee) {
133
+ const agentId = config.agentMapping[oldAssignee];
134
+ if (agentId) {
135
+ actions.push({
136
+ type: "notify",
137
+ agentId,
138
+ event: "issue.reassigned",
139
+ detail: `Reassigned away from issue ${issueLabel}`,
140
+ issueId,
141
+ issueLabel,
142
+ identifier,
143
+ issuePriority,
144
+ linearUserId: oldAssignee,
145
+ });
146
+ }
83
147
  }
84
- else {
85
- config.logger.info(`Unmapped Linear user ${oldAssignee} unassigned from ${issueId}`);
148
+ }
149
+ // --- State changes (configurable per state type/name) ---
150
+ if ("stateId" in updatedFrom) {
151
+ const state = event.data.state;
152
+ const stateType = state?.type;
153
+ const stateName = state?.name;
154
+ const action = resolveStateAction(config, stateType, stateName);
155
+ if (action === "remove" || action === "add") {
156
+ const assigneeId = event.data.assigneeId;
157
+ if (assigneeId) {
158
+ const agentId = config.agentMapping[assigneeId];
159
+ if (agentId) {
160
+ if (action === "remove") {
161
+ actions.push({
162
+ type: "notify",
163
+ agentId,
164
+ event: "issue.state_removed",
165
+ detail: `Issue ${issueLabel} moved to ${stateName ?? stateType ?? "unknown"}`,
166
+ issueId,
167
+ issueLabel,
168
+ identifier,
169
+ issuePriority,
170
+ linearUserId: assigneeId,
171
+ });
172
+ }
173
+ else {
174
+ actions.push({
175
+ type: "wake",
176
+ agentId,
177
+ event: "issue.state_readded",
178
+ detail: `Issue ${issueLabel} moved to ${stateName ?? stateType ?? "unknown"}`,
179
+ issueId,
180
+ issueLabel,
181
+ identifier,
182
+ issuePriority,
183
+ linearUserId: assigneeId,
184
+ });
185
+ }
186
+ }
187
+ }
86
188
  }
87
189
  }
88
- // Reassignment: both old and new assignee present — notify old assignee
89
- if (oldAssignee && newAssignee) {
90
- const agentId = config.agentMapping[oldAssignee];
91
- if (agentId) {
92
- actions.push({
93
- type: "notify",
94
- agentId,
95
- event: "issue.reassigned",
96
- detail: `Reassigned away from issue ${issueLabel}`,
97
- issueId,
98
- issueLabel,
99
- linearUserId: oldAssignee,
100
- });
190
+ // --- Priority changes ---
191
+ if ("priority" in updatedFrom) {
192
+ const assigneeId = event.data.assigneeId;
193
+ if (assigneeId) {
194
+ const agentId = config.agentMapping[assigneeId];
195
+ if (agentId) {
196
+ actions.push({
197
+ type: "notify",
198
+ agentId,
199
+ event: "issue.priority_changed",
200
+ detail: `Priority changed on issue ${issueLabel}`,
201
+ issueId,
202
+ issueLabel,
203
+ identifier,
204
+ issuePriority,
205
+ linearUserId: assigneeId,
206
+ });
207
+ }
101
208
  }
102
209
  }
103
210
  return actions;
104
211
  }
212
+ function handleIssueCreate(event, config) {
213
+ const assigneeId = event.data.assigneeId;
214
+ if (!assigneeId)
215
+ return [];
216
+ const agentId = config.agentMapping[assigneeId];
217
+ if (!agentId) {
218
+ config.logger.info(`Unmapped Linear user ${assigneeId} assigned to ${String(event.data.id ?? "unknown")}`);
219
+ return [];
220
+ }
221
+ const issueId = String(event.data.id ?? "unknown");
222
+ const issueLabel = resolveIssueLabel(event.data);
223
+ const identifier = event.data.identifier ?? issueId;
224
+ const issuePriority = event.data.priority ?? 0;
225
+ return [
226
+ {
227
+ type: "wake",
228
+ agentId,
229
+ event: "issue.assigned",
230
+ detail: `Assigned to issue ${issueLabel}`,
231
+ issueId,
232
+ issueLabel,
233
+ identifier,
234
+ issuePriority,
235
+ linearUserId: assigneeId,
236
+ },
237
+ ];
238
+ }
239
+ function handleIssueRemove(event, config) {
240
+ const assigneeId = event.data.assigneeId;
241
+ if (!assigneeId)
242
+ return [];
243
+ const agentId = config.agentMapping[assigneeId];
244
+ if (!agentId)
245
+ return [];
246
+ const issueId = String(event.data.id ?? "unknown");
247
+ const issueLabel = resolveIssueLabel(event.data);
248
+ const identifier = event.data.identifier ?? issueId;
249
+ const issuePriority = event.data.priority ?? 0;
250
+ return [
251
+ {
252
+ type: "notify",
253
+ agentId,
254
+ event: "issue.removed",
255
+ detail: `Issue ${issueLabel} removed`,
256
+ issueId,
257
+ issueLabel,
258
+ identifier,
259
+ issuePriority,
260
+ linearUserId: assigneeId,
261
+ },
262
+ ];
263
+ }
105
264
  function handleComment(event, config) {
106
265
  const body = event.data.body;
107
266
  if (!body)
@@ -114,6 +273,8 @@ function handleComment(event, config) {
114
273
  const issueLabel = issueRef
115
274
  ? resolveIssueLabel(issueRef)
116
275
  : issueId;
276
+ const identifier = issueRef?.identifier ?? issueId;
277
+ const issuePriority = issueRef?.priority ?? 0;
117
278
  for (const userId of mentionedIds) {
118
279
  const agentId = config.agentMapping[userId];
119
280
  if (agentId) {
@@ -124,6 +285,8 @@ function handleComment(event, config) {
124
285
  detail: `Mentioned in comment on issue ${issueLabel}\n\n> ${body}`,
125
286
  issueId,
126
287
  issueLabel,
288
+ identifier,
289
+ issuePriority,
127
290
  linearUserId: userId,
128
291
  });
129
292
  }
@@ -149,8 +312,13 @@ export function createEventRouter(config) {
149
312
  if (!match && (teamId || teamKey))
150
313
  return [];
151
314
  }
152
- if (event.type === "Issue" && event.action === "update") {
153
- return handleIssueUpdate(event, config);
315
+ if (event.type === "Issue") {
316
+ if (event.action === "update")
317
+ return handleIssueUpdate(event, config);
318
+ if (event.action === "create")
319
+ return handleIssueCreate(event, config);
320
+ if (event.action === "remove")
321
+ return handleIssueRemove(event, config);
154
322
  }
155
323
  if (event.type === "Comment" &&
156
324
  (event.action === "create" || event.action === "update")) {
@@ -1 +1 @@
1
- {"version":3,"file":"event-router.js","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-router.js","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,MAAM,qBAAqB,GAAgC;IAChE,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,MAAyB,EACzB,SAA6B,EAC7B,SAA6B;IAE7B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,4CAA4C;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACnE,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACnE,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,SAAS,IAAI,SAAS,IAAI,qBAAqB,EAAE,CAAC;QACpD,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,8BAA8B,CAAC,IAAa;IACnD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,CAAC,KAA4C,CAAC;QAC7D,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC;QACrB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAC9B,IAAY,EACZ,QAAkB;IAElB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA6B;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAgC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2B,CAAC;IAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,UAAU,IAAI,EAAE,CAAC;IAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA2B,EAC3B,MAAyB;IAEzB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAI,KAAK,CAAC,IAAI,CAAC,UAAqB,IAAI,OAAO,CAAC;IAChE,MAAM,aAAa,GAAI,KAAK,CAAC,IAAI,CAAC,QAAmB,IAAI,CAAC,CAAC;IAE3D,2BAA2B;IAC3B,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,WAAW,CAAC,UAAuC,CAAC;QACxE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAuC,CAAC;QAEvE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,MAAM;oBACZ,OAAO;oBACP,KAAK,EAAE,gBAAgB;oBACvB,MAAM,EAAE,qBAAqB,UAAU,EAAE;oBACzC,OAAO;oBACP,UAAU;oBACV,UAAU;oBACV,aAAa;oBACb,YAAY,EAAE,WAAW;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,wBAAwB,WAAW,gBAAgB,OAAO,EAAE,CAC7D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,OAAO;oBACP,KAAK,EAAE,kBAAkB;oBACzB,MAAM,EAAE,yBAAyB,UAAU,EAAE;oBAC7C,OAAO;oBACP,UAAU;oBACV,UAAU;oBACV,aAAa;oBACb,YAAY,EAAE,WAAW;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,wBAAwB,WAAW,oBAAoB,OAAO,EAAE,CACjE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,OAAO;oBACP,KAAK,EAAE,kBAAkB;oBACzB,MAAM,EAAE,8BAA8B,UAAU,EAAE;oBAClD,OAAO;oBACP,UAAU;oBACV,UAAU;oBACV,aAAa;oBACb,YAAY,EAAE,WAAW;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAA4C,CAAC;QACtE,MAAM,SAAS,GAAG,KAAK,EAAE,IAA0B,CAAC;QACpD,MAAM,SAAS,GAAG,KAAK,EAAE,IAA0B,CAAC;QACpD,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAEhE,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAgC,CAAC;YAC/D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAChD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;wBACxB,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,QAAQ;4BACd,OAAO;4BACP,KAAK,EAAE,qBAAqB;4BAC5B,MAAM,EAAE,SAAS,UAAU,aAAa,SAAS,IAAI,SAAS,IAAI,SAAS,EAAE;4BAC7E,OAAO;4BACP,UAAU;4BACV,UAAU;4BACV,aAAa;4BACb,YAAY,EAAE,UAAU;yBACzB,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,MAAM;4BACZ,OAAO;4BACP,KAAK,EAAE,qBAAqB;4BAC5B,MAAM,EAAE,SAAS,UAAU,aAAa,SAAS,IAAI,SAAS,IAAI,SAAS,EAAE;4BAC7E,OAAO;4BACP,UAAU;4BACV,UAAU;4BACV,aAAa;4BACb,YAAY,EAAE,UAAU;yBACzB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAgC,CAAC;QAC/D,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,OAAO;oBACP,KAAK,EAAE,wBAAwB;oBAC/B,MAAM,EAAE,6BAA6B,UAAU,EAAE;oBACjD,OAAO;oBACP,UAAU;oBACV,UAAU;oBACV,aAAa;oBACb,YAAY,EAAE,UAAU;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA2B,EAC3B,MAAyB;IAEzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAgC,CAAC;IAC/D,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,wBAAwB,UAAU,gBAAgB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,CACvF,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAI,KAAK,CAAC,IAAI,CAAC,UAAqB,IAAI,OAAO,CAAC;IAChE,MAAM,aAAa,GAAI,KAAK,CAAC,IAAI,CAAC,QAAmB,IAAI,CAAC,CAAC;IAE3D,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,KAAK,EAAE,gBAAgB;YACvB,MAAM,EAAE,qBAAqB,UAAU,EAAE;YACzC,OAAO;YACP,UAAU;YACV,UAAU;YACV,aAAa;YACb,YAAY,EAAE,UAAU;SACzB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA2B,EAC3B,MAAyB;IAEzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAgC,CAAC;IAC/D,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAI,KAAK,CAAC,IAAI,CAAC,UAAqB,IAAI,OAAO,CAAC;IAChE,MAAM,aAAa,GAAI,KAAK,CAAC,IAAI,CAAC,QAAmB,IAAI,CAAC,CAAC;IAE3D,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,SAAS,UAAU,UAAU;YACrC,OAAO;YACP,UAAU;YACV,UAAU;YACV,aAAa;YACb,YAAY,EAAE,UAAU;SACzB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAA2B,EAC3B,MAAyB;IAEzB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAA0B,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrC,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAA4C,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,QAAQ;QACzB,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAC7B,CAAC,CAAC,OAAO,CAAC;IACZ,MAAM,UAAU,GAAI,QAAQ,EAAE,UAAqB,IAAI,OAAO,CAAC;IAC/D,MAAM,aAAa,GAAI,QAAQ,EAAE,QAAmB,IAAI,CAAC,CAAC;IAE1D,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,OAAO;gBACP,KAAK,EAAE,iBAAiB;gBACxB,MAAM,EAAE,iCAAiC,UAAU,SAAS,IAAI,EAAE;gBAClE,OAAO;gBACP,UAAU;gBACV,UAAU;gBACV,aAAa;gBACb,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,wBAAwB,MAAM,4BAA4B,OAAO,EAAE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,OAAO,SAAS,KAAK,CAAC,KAA2B;QAC/C,0BAA0B;QAC1B,IACE,MAAM,CAAC,WAAW,EAAE,MAAM;YAC1B,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EACxC,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAA4B,CAAC;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAA2C,CAAC;QACvE,MAAM,OAAO,GAAG,OAAO,EAAE,GAAyB,CAAC;QACnD,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,CACrC,CAAC;YACF,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzE,CAAC;QAED,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;YACxB,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,EACxD,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAazE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAYzE;AAqFD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAmFrD;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED,QAAA,MAAM,MAAM;;;;;;CAYX,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAkBzE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAYzE;AA0FD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAmGrD;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED,QAAA,MAAM,MAAM;;;;;;CAYX,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,17 @@
1
1
  import { createWebhookHandler } from "./webhook-handler.js";
2
2
  import { createEventRouter } from "./event-router.js";
3
- import { handleIntake, handleRecovery } from "./work-queue.js";
3
+ import { InboxQueue } from "./work-queue.js";
4
+ import { createQueueTool } from "./queue-tool.js";
4
5
  const CHANNEL_ID = "linear";
5
6
  const DEFAULT_DEBOUNCE_MS = 30_000;
6
7
  const EVENT_LABELS = {
7
8
  "issue.assigned": "Assigned",
8
9
  "issue.unassigned": "Unassigned",
9
10
  "issue.reassigned": "Reassigned",
11
+ "issue.removed": "Removed",
12
+ "issue.state_removed": "State Removed",
13
+ "issue.state_readded": "State Re-added",
14
+ "issue.priority_changed": "Priority Changed",
10
15
  "comment.mention": "Mentioned",
11
16
  };
12
17
  export function formatConsolidatedMessage(actions) {
@@ -30,7 +35,7 @@ function formatActionSummary(action) {
30
35
  }
31
36
  return action.issueLabel || action.detail;
32
37
  }
33
- async function dispatchConsolidatedActions(actions, api, queuePath) {
38
+ async function dispatchConsolidatedActions(actions, api, queue) {
34
39
  if (actions.length === 0)
35
40
  return;
36
41
  const core = api.runtime;
@@ -46,14 +51,19 @@ async function dispatchConsolidatedActions(actions, api, queuePath) {
46
51
  },
47
52
  });
48
53
  // Write to queue deterministically — no LLM involved
49
- const rawBody = formatConsolidatedMessage(actions);
50
- const added = handleIntake(rawBody, queuePath);
54
+ const entries = actions.map((a) => ({
55
+ id: a.identifier,
56
+ event: a.event,
57
+ summary: a.issueLabel,
58
+ issuePriority: a.issuePriority,
59
+ }));
60
+ const added = await queue.enqueue(entries);
51
61
  if (added === 0) {
52
62
  api.logger.info("[linear] All notifications deduped — skipping agent dispatch");
53
63
  return;
54
64
  }
55
- // Agent gets a minimal notification pointing to the queue
56
- const body = `${added} new Linear notification(s) queued. Pending items in queue/work-queue.json.`;
65
+ // Agent gets a minimal notification pointing to the linear_queue tool
66
+ const body = `${added} new Linear notification(s) queued. Use the linear_queue tool to process them.`;
57
67
  const ctx = core.channel.reply.finalizeInboundContext({
58
68
  Body: body,
59
69
  BodyForAgent: body,
@@ -103,26 +113,23 @@ export function activate(api) {
103
113
  const debounceMs = (typeof rawDebounceMs === "number" && rawDebounceMs > 0)
104
114
  ? rawDebounceMs
105
115
  : DEFAULT_DEBOUNCE_MS;
106
- const queuePath = api.resolvePath("queue/work-queue.json");
107
- // Reset stale in_progress items on gateway startup
108
- api.on("gateway_start", () => {
109
- const recovered = handleRecovery(queuePath);
110
- if (recovered > 0) {
111
- api.logger.info(`[linear] Recovered ${recovered} stale queue item(s)`);
112
- }
113
- });
116
+ const queuePath = api.resolvePath("queue/inbox.jsonl");
117
+ const queue = new InboxQueue(queuePath);
118
+ api.registerTool(createQueueTool(queue));
119
+ const stateActions = api.pluginConfig?.["stateActions"] ?? undefined;
114
120
  const route = createEventRouter({
115
121
  agentMapping,
116
122
  logger: api.logger,
117
123
  eventFilter: eventFilter.length ? eventFilter : undefined,
118
124
  teamIds: teamIds.length ? teamIds : undefined,
125
+ stateActions,
119
126
  });
120
127
  const debouncer = api.runtime.channel.debounce.createInboundDebouncer({
121
128
  debounceMs,
122
129
  buildKey: (action) => action.agentId,
123
130
  shouldDebounce: () => true,
124
131
  onFlush: async (actions) => {
125
- await dispatchConsolidatedActions(actions, api, queuePath);
132
+ await dispatchConsolidatedActions(actions, api, queue);
126
133
  },
127
134
  onError: (err) => {
128
135
  api.logger.error(`[linear] Debounce flush failed: ${err instanceof Error ? err.message : String(err)}`);
@@ -140,6 +147,18 @@ export function activate(api) {
140
147
  activeDebouncerKeys.add(action.agentId);
141
148
  debouncer.enqueue(action);
142
149
  }
150
+ if (action.type === "notify") {
151
+ queue
152
+ .enqueue([
153
+ {
154
+ id: action.identifier,
155
+ event: action.event,
156
+ summary: action.issueLabel,
157
+ issuePriority: action.issuePriority,
158
+ },
159
+ ])
160
+ .catch((err) => api.logger.error(`[linear] Notify enqueue error: ${err instanceof Error ? err.message : String(err)}`));
161
+ }
143
162
  }
144
163
  },
145
164
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AnyAgentTool } from "openclaw/plugin-sdk";
2
+ import type { InboxQueue } from "./work-queue.js";
3
+ export declare function createQueueTool(queue: InboxQueue): AnyAgentTool;
4
+ //# sourceMappingURL=queue-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-tool.d.ts","sourceRoot":"","sources":["../src/queue-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiBlD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CA6B/D"}
@@ -0,0 +1,42 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { jsonResult } from "openclaw/plugin-sdk";
3
+ const QueueAction = Type.Unsafe({
4
+ type: "string",
5
+ enum: ["peek", "pop", "drain"],
6
+ description: "peek: view all pending items without removing them. " +
7
+ "pop: remove and return the highest-priority item. " +
8
+ "drain: remove and return all items.",
9
+ });
10
+ const QueueToolParams = Type.Object({
11
+ action: QueueAction,
12
+ });
13
+ export function createQueueTool(queue) {
14
+ return {
15
+ name: "linear_queue",
16
+ label: "Linear Queue",
17
+ description: "Manage the Linear notification inbox queue. " +
18
+ "Use 'peek' to see pending items, 'pop' to take the next item, or 'drain' to take all items.",
19
+ parameters: QueueToolParams,
20
+ async execute(_toolCallId, params) {
21
+ switch (params.action) {
22
+ case "peek": {
23
+ const items = await queue.peek();
24
+ return jsonResult({ count: items.length, items });
25
+ }
26
+ case "pop": {
27
+ const item = await queue.pop();
28
+ return jsonResult(item ? { item } : { item: null, message: "Queue is empty" });
29
+ }
30
+ case "drain": {
31
+ const items = await queue.drain();
32
+ return jsonResult({ count: items.length, items });
33
+ }
34
+ default:
35
+ return jsonResult({
36
+ error: `Unknown action: ${params.action}`,
37
+ });
38
+ }
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=queue-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-tool.js","sourceRoot":"","sources":["../src/queue-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAA2B;IACxD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;IAC9B,WAAW,EACT,sDAAsD;QACtD,oDAAoD;QACpD,qCAAqC;CACxC,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,WAAW;CACpB,CAAC,CAAC;AAIH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,8CAA8C;YAC9C,6FAA6F;QAC/F,UAAU,EAAE,eAAe;QAC3B,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAuB;YACxD,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;oBACjC,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBACpD,CAAC;gBACD,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACjF,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;oBAClC,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBACpD,CAAC;gBACD;oBACE,OAAO,UAAU,CAAC;wBAChB,KAAK,EAAE,mBAAoB,MAA6B,CAAC,MAAM,EAAE;qBAClE,CAAC,CAAC;YACP,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -3,6 +3,7 @@ export type LinearWebhookPayload = {
3
3
  action: string;
4
4
  type: string;
5
5
  data: Record<string, unknown>;
6
+ updatedFrom?: Record<string, unknown>;
6
7
  createdAt: string;
7
8
  };
8
9
  type WebhookHandlerDeps = {