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 +36 -1
- package/dist/event-router.d.ts +6 -0
- package/dist/event-router.d.ts.map +1 -1
- package/dist/event-router.js +216 -48
- package/dist/event-router.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -15
- package/dist/index.js.map +1 -1
- package/dist/queue-tool.d.ts +4 -0
- package/dist/queue-tool.d.ts.map +1 -0
- package/dist/queue-tool.js +42 -0
- package/dist/queue-tool.js.map +1 -0
- package/dist/webhook-handler.d.ts +1 -0
- package/dist/webhook-handler.d.ts.map +1 -1
- package/dist/webhook-handler.js +1 -0
- package/dist/webhook-handler.js.map +1 -1
- package/dist/work-queue.d.ts +21 -26
- package/dist/work-queue.d.ts.map +1 -1
- package/dist/work-queue.js +163 -178
- package/dist/work-queue.js.map +1 -1
- package/openclaw.plugin.json +5 -0
- package/package.json +1 -1
- package/skills/linear-queue/SKILL.md +22 -23
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
|
|
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
|
|
package/dist/event-router.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/event-router.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
85
|
-
|
|
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
|
-
//
|
|
89
|
-
if (
|
|
90
|
-
const
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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"
|
|
153
|
-
|
|
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")) {
|
package/dist/event-router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-router.js","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-router.js","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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 {
|
|
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,
|
|
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
|
|
50
|
-
|
|
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
|
|
56
|
-
const body = `${added} new Linear notification(s) queued.
|
|
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/
|
|
107
|
-
|
|
108
|
-
api.
|
|
109
|
-
|
|
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,
|
|
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":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|