@dahrk/linear 0.1.1 → 0.2.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/dist/batch-source.d.ts +63 -0
- package/dist/batch-source.d.ts.map +1 -0
- package/dist/batch-source.js +149 -0
- package/dist/batch-source.js.map +1 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -4
- package/dist/index.js.map +1 -1
- package/dist/issues.d.ts +24 -0
- package/dist/issues.d.ts.map +1 -1
- package/dist/issues.js +28 -0
- package/dist/issues.js.map +1 -1
- package/dist/labels.d.ts +1 -1
- package/dist/labels.js +1 -1
- package/dist/linear-client.d.ts.map +1 -1
- package/dist/linear-client.js +3 -4
- package/dist/linear-client.js.map +1 -1
- package/dist/oauth.d.ts +41 -2
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +56 -2
- package/dist/oauth.js.map +1 -1
- package/package.json +2 -2
- package/src/batch-source.ts +208 -0
- package/src/index.ts +69 -8
- package/src/issues.ts +49 -0
- package/src/labels.ts +1 -1
- package/src/linear-client.ts +3 -4
- package/src/oauth.ts +64 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear-client.js","sourceRoot":"","sources":["../src/linear-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"linear-client.js","sourceRoot":"","sources":["../src/linear-client.ts"],"names":[],"mappings":"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"}
|
package/dist/oauth.d.ts
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
export declare const DEFAULT_AGENT_SCOPES: readonly ["read", "write", "app:assignable", "app:mentionable"];
|
|
3
3
|
export interface LinearTokens {
|
|
4
4
|
accessToken: string;
|
|
5
|
-
/**
|
|
5
|
+
/** Present on every authorization-code and refresh response, absent on a client-credentials mint
|
|
6
|
+
* (which issues no refresh token at all). It is NOT optional on a refresh: Linear rotates refresh
|
|
7
|
+
* tokens single-use and always returns the replacement, so a refresh response without one is a
|
|
8
|
+
* protocol violation rather than "keep the one you have" - see {@link refreshTokens}. */
|
|
6
9
|
refreshToken?: string;
|
|
7
10
|
/** When the access token expires (computed from `expires_in`). */
|
|
8
11
|
expiresAt: Date;
|
|
@@ -61,12 +64,48 @@ export interface LinearProbe {
|
|
|
61
64
|
* binds to. Throws on an auth failure / GraphQL error, which the caller renders as "token invalid".
|
|
62
65
|
*/
|
|
63
66
|
export declare function probeToken(accessToken: string): Promise<LinearProbe>;
|
|
64
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Rotate the access token using the stored refresh token (the hub calls this near expiry / on 401).
|
|
69
|
+
*
|
|
70
|
+
* Linear rotates refresh tokens **single-use**: the request consumes the one presented and the response
|
|
71
|
+
* carries "a new valid access token and a new refresh token" (oauth-2-0-authentication.md, "Refresh an
|
|
72
|
+
* access token"). So the replacement is mandatory, and a response without one means the old token has
|
|
73
|
+
* been consumed while we learned nothing - the caller MUST NOT carry on with the previous value, which
|
|
74
|
+
* is now dead. Throwing here is what makes that loud instead of silently arming a connection to fail
|
|
75
|
+
* on its next refresh, forever (DHK-1306).
|
|
76
|
+
*
|
|
77
|
+
* Linear gives a 30-minute grace period for exactly this case: the original request can be replayed to
|
|
78
|
+
* retrieve the new refresh token. Recovery is the caller's to attempt; this function's job is to refuse
|
|
79
|
+
* to report success when the rotation is unaccounted for.
|
|
80
|
+
*/
|
|
65
81
|
export declare function refreshTokens(params: {
|
|
66
82
|
clientId: string;
|
|
67
83
|
clientSecret: string;
|
|
68
84
|
refreshToken: string;
|
|
69
85
|
}, now?: () => Date): Promise<LinearTokens>;
|
|
86
|
+
/**
|
|
87
|
+
* Revoke an access token at Linear, de-authorising the app for the workspace that token belongs to.
|
|
88
|
+
*
|
|
89
|
+
* This is the ONLY app-callable lever Linear gives us over an install: there is no uninstall mutation
|
|
90
|
+
* and nothing in the GraphQL schema that names or targets an install (`revokeOauthToken`,
|
|
91
|
+
* `userAuthorizedApplications`, `applicationWithAuthorization` are all absent). De-authorisation is
|
|
92
|
+
* per organisation - Linear signals it with an `OAuthApp revoked` webhook carrying `organizationId`.
|
|
93
|
+
*
|
|
94
|
+
* Why it matters beyond hygiene: while an install exists, Linear's authorize hop resolves against it
|
|
95
|
+
* and shows "Dahrk already installed - Continue" rather than a consent screen for the workspace the
|
|
96
|
+
* user is actually in. So a user who wanted to move the connection to another workspace got the old
|
|
97
|
+
* one back, every time, with no way out from inside the product. Forgetting a token locally is not
|
|
98
|
+
* enough; Linear has to be told.
|
|
99
|
+
*
|
|
100
|
+
* A `400` counts as revoked. The endpoint returns it for an already-revoked token, and the caller's
|
|
101
|
+
* question is "is this token dead", to which "Linear dropped it earlier" is a yes. A `401` does not:
|
|
102
|
+
* it means we could not authenticate the revocation at all, so the install may well still be live and
|
|
103
|
+
* the caller must say so rather than report a clean disconnect.
|
|
104
|
+
*/
|
|
105
|
+
export declare function revokeToken(params: {
|
|
106
|
+
token: string;
|
|
107
|
+
tokenTypeHint?: "access_token" | "refresh_token";
|
|
108
|
+
}): Promise<void>;
|
|
70
109
|
/**
|
|
71
110
|
* Mint an `app` actor token via the `client_credentials` grant: headless (no user, no redirect, no
|
|
72
111
|
* callback, no refresh token), scoped to the app's workspace, valid ~30 days. Linear's documented
|
package/dist/oauth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAeA,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,iEAAkE,CAAC;AAEpG,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB;;;8FAG0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB;;;8GAG0G;IAC1G,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC7B,GAAG,MAAM,CAUT;AA+BD,uFAAuF;AACvF,wBAAgB,YAAY,CAC1B,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACrF,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,YAAY,CAAC,CAWvB;AAYD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI9E;AAED,0FAA0F;AAC1F,MAAM,WAAW,WAAW;IAC1B;;yEAEqE;IACrE,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACxE,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoB1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EACxE,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,YAAY,CAAC,CAkBvB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC;CAClD,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAC9E,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,YAAY,CAAC,CAUvB"}
|
package/dist/oauth.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { LinearClient } from "@linear/sdk";
|
|
11
11
|
const AUTHORIZE_URL = "https://linear.app/oauth/authorize";
|
|
12
12
|
const TOKEN_URL = "https://api.linear.app/oauth/token";
|
|
13
|
+
const REVOKE_URL = "https://api.linear.app/oauth/revoke";
|
|
13
14
|
/** The agent scopes: read/write plus the two that make the app assignable + mentionable. */
|
|
14
15
|
export const DEFAULT_AGENT_SCOPES = ["read", "write", "app:assignable", "app:mentionable"];
|
|
15
16
|
/**
|
|
@@ -103,14 +104,67 @@ export async function probeToken(accessToken) {
|
|
|
103
104
|
}
|
|
104
105
|
return probe;
|
|
105
106
|
}
|
|
106
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Rotate the access token using the stored refresh token (the hub calls this near expiry / on 401).
|
|
109
|
+
*
|
|
110
|
+
* Linear rotates refresh tokens **single-use**: the request consumes the one presented and the response
|
|
111
|
+
* carries "a new valid access token and a new refresh token" (oauth-2-0-authentication.md, "Refresh an
|
|
112
|
+
* access token"). So the replacement is mandatory, and a response without one means the old token has
|
|
113
|
+
* been consumed while we learned nothing - the caller MUST NOT carry on with the previous value, which
|
|
114
|
+
* is now dead. Throwing here is what makes that loud instead of silently arming a connection to fail
|
|
115
|
+
* on its next refresh, forever (DHK-1306).
|
|
116
|
+
*
|
|
117
|
+
* Linear gives a 30-minute grace period for exactly this case: the original request can be replayed to
|
|
118
|
+
* retrieve the new refresh token. Recovery is the caller's to attempt; this function's job is to refuse
|
|
119
|
+
* to report success when the rotation is unaccounted for.
|
|
120
|
+
*/
|
|
107
121
|
export function refreshTokens(params, now = () => new Date()) {
|
|
108
122
|
return postToken({
|
|
109
123
|
grant_type: "refresh_token",
|
|
110
124
|
client_id: params.clientId,
|
|
111
125
|
client_secret: params.clientSecret,
|
|
112
126
|
refresh_token: params.refreshToken,
|
|
113
|
-
}, now)
|
|
127
|
+
}, now).then((t) => {
|
|
128
|
+
if (!t.refreshToken) {
|
|
129
|
+
throw new Error("linear refresh returned no replacement refresh token: the presented token is now consumed. " +
|
|
130
|
+
"Replay the same request within 30 minutes to recover it.");
|
|
131
|
+
}
|
|
132
|
+
return t;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Revoke an access token at Linear, de-authorising the app for the workspace that token belongs to.
|
|
137
|
+
*
|
|
138
|
+
* This is the ONLY app-callable lever Linear gives us over an install: there is no uninstall mutation
|
|
139
|
+
* and nothing in the GraphQL schema that names or targets an install (`revokeOauthToken`,
|
|
140
|
+
* `userAuthorizedApplications`, `applicationWithAuthorization` are all absent). De-authorisation is
|
|
141
|
+
* per organisation - Linear signals it with an `OAuthApp revoked` webhook carrying `organizationId`.
|
|
142
|
+
*
|
|
143
|
+
* Why it matters beyond hygiene: while an install exists, Linear's authorize hop resolves against it
|
|
144
|
+
* and shows "Dahrk already installed - Continue" rather than a consent screen for the workspace the
|
|
145
|
+
* user is actually in. So a user who wanted to move the connection to another workspace got the old
|
|
146
|
+
* one back, every time, with no way out from inside the product. Forgetting a token locally is not
|
|
147
|
+
* enough; Linear has to be told.
|
|
148
|
+
*
|
|
149
|
+
* A `400` counts as revoked. The endpoint returns it for an already-revoked token, and the caller's
|
|
150
|
+
* question is "is this token dead", to which "Linear dropped it earlier" is a yes. A `401` does not:
|
|
151
|
+
* it means we could not authenticate the revocation at all, so the install may well still be live and
|
|
152
|
+
* the caller must say so rather than report a clean disconnect.
|
|
153
|
+
*/
|
|
154
|
+
export async function revokeToken(params) {
|
|
155
|
+
const body = { token: params.token };
|
|
156
|
+
// Documented as optional but helpful; must not be combined with the legacy access_token/refresh_token
|
|
157
|
+
// form fields, which we never send.
|
|
158
|
+
if (params.tokenTypeHint)
|
|
159
|
+
body.token_type_hint = params.tokenTypeHint;
|
|
160
|
+
const res = await fetch(REVOKE_URL, {
|
|
161
|
+
method: "POST",
|
|
162
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
163
|
+
body: new URLSearchParams(body).toString(),
|
|
164
|
+
});
|
|
165
|
+
if (res.ok || res.status === 400)
|
|
166
|
+
return;
|
|
167
|
+
throw new Error(`linear revoke endpoint failed: ${res.status}`);
|
|
114
168
|
}
|
|
115
169
|
/**
|
|
116
170
|
* Mint an `app` actor token via the `client_credentials` grant: headless (no user, no redirect, no
|
package/dist/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,aAAa,GAAG,oCAAoC,CAAC;AAC3D,MAAM,SAAS,GAAG,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dahrk/linear",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The Linear Agent Session API client and webhook verification. The native control surface: activities, agent-plan checklist, elicitation gates, prompted-drive, stop signal, externalUrls.",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@linear/sdk": "^86.0.0",
|
|
26
|
-
"@dahrk/contracts": "0.
|
|
26
|
+
"@dahrk/contracts": "0.29.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"tsx": "^4.19.0"
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot a parent control issue as a deterministic child-sourced Batch (DHK-1154; ADRs 0016-0017).
|
|
3
|
+
*
|
|
4
|
+
* Assigning or @mentioning Dahrk on a PARENT issue launches its direct child work as one immutable
|
|
5
|
+
* Batch. This module takes ONE credential-resolved read of the parent's direct, nonterminal children
|
|
6
|
+
* (the control issue itself is never included - children only) and normalises it into a
|
|
7
|
+
* {@link ParentBatchSnapshot}: an ordered list of {@link BatchMember}s keyed by stable issue UUID, the
|
|
8
|
+
* explicit `blocks` edges BETWEEN members ({@link BatchBlockEdge}), and any unsettled blocker OUTSIDE
|
|
9
|
+
* the member set that must block creation (`externalBlockers`).
|
|
10
|
+
*
|
|
11
|
+
* Two rules pin the dependency model:
|
|
12
|
+
* - Containment is not a dependency. A parent/child relation NEVER produces an edge; only an explicit
|
|
13
|
+
* Linear `blocks` relation does. Children carry only their own `blocks` blockers, so containment is
|
|
14
|
+
* structurally incapable of creating one here.
|
|
15
|
+
* - "External" is relative to the SELECTED source. A blocker that is itself another selected child is
|
|
16
|
+
* an internal edge, not an external blocker, even when unsettled - that is a dependency to sequence,
|
|
17
|
+
* not a refusal. The membership test runs before the external-blocker test.
|
|
18
|
+
*
|
|
19
|
+
* The `ParentBatchSource` seam keeps the assembly pure and unit-testable (the `collectRelatedIssues`
|
|
20
|
+
* pattern from `issue-graph.ts`): the live impl wraps the SDK, tests inject a fake.
|
|
21
|
+
*/
|
|
22
|
+
import { LinearClient } from "@linear/sdk";
|
|
23
|
+
import type { BatchMember, BatchBlockEdge } from "@dahrk/contracts";
|
|
24
|
+
import { isBlockerSettled } from "./labels.js";
|
|
25
|
+
|
|
26
|
+
/** An issue that `blocks` a child, as read from the child's `inverseRelations`. `stateType` decides
|
|
27
|
+
* whether it has settled (terminal); `stateName` is carried for the decline note only, never matched. */
|
|
28
|
+
export interface RawBlocker {
|
|
29
|
+
id?: string;
|
|
30
|
+
identifier?: string;
|
|
31
|
+
stateType?: string;
|
|
32
|
+
stateName?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** A child issue as returned by Linear before normalisation, with its state and blockers resolved. */
|
|
36
|
+
export interface RawChild {
|
|
37
|
+
id?: string;
|
|
38
|
+
identifier?: string;
|
|
39
|
+
/** The child's workflow-state category (`state.type`); terminal children are dropped. */
|
|
40
|
+
stateType?: string;
|
|
41
|
+
/** Linear priority (`0` = none, `1` = urgent … `4` = low). */
|
|
42
|
+
priority?: number;
|
|
43
|
+
/** The child's rank within the parent (`subIssueSortOrder`, falling back to `sortOrder`). */
|
|
44
|
+
containerRank?: number;
|
|
45
|
+
/** The issues that `blocks` this child (its `inverseRelations` of type `blocks`). */
|
|
46
|
+
blockers: RawBlocker[];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The read seam the assembly depends on; the live impl wraps the SDK, tests inject a fake. */
|
|
50
|
+
export interface ParentBatchSource {
|
|
51
|
+
/** The parent's direct children, each with its state and its `blocks` blockers, in any order. */
|
|
52
|
+
children(parentIssueId: string): Promise<RawChild[]>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** One unsettled blocker outside the selected source that prevents Batch creation. Shaped like the
|
|
56
|
+
* hub's `OpenBlocker` so the decline note names it (`identifier` is the key; `stateName` is display). */
|
|
57
|
+
export interface ExternalBlocker {
|
|
58
|
+
identifier: string;
|
|
59
|
+
stateName: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** The normalised parent-Batch snapshot: the ordered members, the internal `blocks` edges between them,
|
|
63
|
+
* and any external blocker that must block creation. */
|
|
64
|
+
export interface ParentBatchSnapshot {
|
|
65
|
+
members: BatchMember[];
|
|
66
|
+
blocks: BatchBlockEdge[];
|
|
67
|
+
externalBlockers: ExternalBlocker[];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** How many children ride one snapshot. A parent with more direct children than this is unusual; the
|
|
71
|
+
* cap keeps the intake read bounded, mirroring the neighbours read in `issue-graph.ts`. */
|
|
72
|
+
export const MAX_BATCH_CHILDREN = 200;
|
|
73
|
+
|
|
74
|
+
/** Sort key for priority: urgent (1) first, none (0) last. Linear priority is `0=none,1=urgent..4=low`,
|
|
75
|
+
* so "order by priority" must map `0` to the end rather than the front. Pure, pinned by a test. */
|
|
76
|
+
function priorityRank(priority: number): number {
|
|
77
|
+
return priority === 0 ? Number.POSITIVE_INFINITY : priority;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Collect the parent's direct nonterminal children as a {@link ParentBatchSnapshot} from a source: drop
|
|
82
|
+
* children with no id/identifier; drop terminal (`completed`/`canceled`) children; classify each
|
|
83
|
+
* member's `blocks` blockers into internal edges (blocker is another member) or external blockers
|
|
84
|
+
* (blocker is outside the set and unsettled); order members by priority, then container rank, then
|
|
85
|
+
* identifier. Pure of any network.
|
|
86
|
+
*/
|
|
87
|
+
export async function collectParentBatchSource(
|
|
88
|
+
source: ParentBatchSource,
|
|
89
|
+
parentIssueId: string,
|
|
90
|
+
): Promise<ParentBatchSnapshot> {
|
|
91
|
+
const raw = await source.children(parentIssueId);
|
|
92
|
+
|
|
93
|
+
// Keep only real, nonterminal children. A child needs a stable id AND a human identifier; a terminal
|
|
94
|
+
// child (settled state) is finished work, not something to launch.
|
|
95
|
+
const kept: RawChild[] = [];
|
|
96
|
+
for (const c of raw) {
|
|
97
|
+
const id = c.id?.trim();
|
|
98
|
+
const identifier = c.identifier?.trim();
|
|
99
|
+
if (!id || !identifier) continue;
|
|
100
|
+
if (isBlockerSettled(c.stateType)) continue;
|
|
101
|
+
kept.push(c);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const memberIds = new Set(kept.map((c) => c.id!.trim()));
|
|
105
|
+
|
|
106
|
+
const members: BatchMember[] = kept.map((c) => ({
|
|
107
|
+
issueId: c.id!.trim(),
|
|
108
|
+
issueIdentifier: c.identifier!.trim(),
|
|
109
|
+
stateType: (c.stateType ?? "").trim() || "unknown",
|
|
110
|
+
priority: c.priority ?? 0,
|
|
111
|
+
containerRank: c.containerRank ?? 0,
|
|
112
|
+
}));
|
|
113
|
+
|
|
114
|
+
// Deterministic order: urgent priority first (none last), then container rank ascending, then the
|
|
115
|
+
// human identifier. Every downstream reader sees the same sequence, so admission is replayable.
|
|
116
|
+
members.sort(
|
|
117
|
+
(a, b) =>
|
|
118
|
+
priorityRank(a.priority) - priorityRank(b.priority) ||
|
|
119
|
+
a.containerRank - b.containerRank ||
|
|
120
|
+
a.issueIdentifier.localeCompare(b.issueIdentifier),
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
// Classify blockers in member order so edges and external blockers are deterministic. A blocker that
|
|
124
|
+
// is itself a selected member is an internal edge (a dependency to sequence); one outside the set that
|
|
125
|
+
// has not settled is an external blocker (a refusal); a settled external blocker is simply done.
|
|
126
|
+
const byId = new Map(kept.map((c) => [c.id!.trim(), c]));
|
|
127
|
+
const blocks: BatchBlockEdge[] = [];
|
|
128
|
+
const externalBlockers: ExternalBlocker[] = [];
|
|
129
|
+
const seenExternal = new Set<string>();
|
|
130
|
+
for (const m of members) {
|
|
131
|
+
const c = byId.get(m.issueId)!;
|
|
132
|
+
for (const b of c.blockers) {
|
|
133
|
+
const blockerId = b.id?.trim();
|
|
134
|
+
if (blockerId && memberIds.has(blockerId)) {
|
|
135
|
+
blocks.push({ blockerIssueId: blockerId, blockedIssueId: m.issueId });
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (isBlockerSettled(b.stateType)) continue;
|
|
139
|
+
const identifier = (b.identifier ?? "").trim() || "unknown";
|
|
140
|
+
if (seenExternal.has(identifier)) continue;
|
|
141
|
+
seenExternal.add(identifier);
|
|
142
|
+
externalBlockers.push({ identifier, stateName: (b.stateName ?? "").trim() || "unknown" });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return { members, blocks, externalBlockers };
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** The live `ParentBatchSource`, backed by a Linear bearer token. Uses the typed SDK: the parent's
|
|
150
|
+
* `children`, each child's `state`/`priority`/`subIssueSortOrder`/`sortOrder`, and each child's
|
|
151
|
+
* `inverseRelations` of type `blocks` resolved to `{id, identifier, state}`. Capped like the
|
|
152
|
+
* neighbours read. */
|
|
153
|
+
export function linearParentBatchSource(token: string): ParentBatchSource {
|
|
154
|
+
const client = new LinearClient({ accessToken: token });
|
|
155
|
+
return {
|
|
156
|
+
async children(parentIssueId) {
|
|
157
|
+
const parent = await client.issue(parentIssueId);
|
|
158
|
+
const conn = await parent.children({ first: MAX_BATCH_CHILDREN });
|
|
159
|
+
const children: RawChild[] = [];
|
|
160
|
+
for (const c of conn.nodes) {
|
|
161
|
+
const [state, inverse] = await Promise.all([
|
|
162
|
+
c.state,
|
|
163
|
+
// A `blocks` relation pointing AT the child means that issue is the child's blocker (the same
|
|
164
|
+
// direction `fetchOpenBlockers` reads). `relations` would return what the child blocks - the
|
|
165
|
+
// opposite question.
|
|
166
|
+
c.inverseRelations({ first: 25 }),
|
|
167
|
+
]);
|
|
168
|
+
const blockers: RawBlocker[] = [];
|
|
169
|
+
for (const rel of inverse.nodes) {
|
|
170
|
+
if (rel.type !== "blocks") continue;
|
|
171
|
+
const other = await rel.issue;
|
|
172
|
+
if (!other) continue;
|
|
173
|
+
const bState = await other.state;
|
|
174
|
+
blockers.push({
|
|
175
|
+
...(other.id ? { id: other.id } : {}),
|
|
176
|
+
...(other.identifier ? { identifier: other.identifier } : {}),
|
|
177
|
+
...(bState?.type ? { stateType: bState.type } : {}),
|
|
178
|
+
...(bState?.name ? { stateName: bState.name } : {}),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// `subIssueSortOrder` is the rank within the parent; fall back to `sortOrder` when absent.
|
|
182
|
+
const containerRank =
|
|
183
|
+
(c as { subIssueSortOrder?: number }).subIssueSortOrder ?? c.sortOrder ?? 0;
|
|
184
|
+
children.push({
|
|
185
|
+
...(c.id ? { id: c.id } : {}),
|
|
186
|
+
...(c.identifier ? { identifier: c.identifier } : {}),
|
|
187
|
+
...(state?.type ? { stateType: state.type } : {}),
|
|
188
|
+
...(typeof c.priority === "number" ? { priority: c.priority } : {}),
|
|
189
|
+
containerRank,
|
|
190
|
+
blockers,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return children;
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Take the parent-Batch snapshot for `parentIssueId` as a {@link ParentBatchSnapshot}, ready for the
|
|
200
|
+
* hub to persist. The single entry point the hub calls (mirrors `fetchRelatedIssues`). A hard failure
|
|
201
|
+
* (auth, network) propagates so the caller can log and proceed.
|
|
202
|
+
*/
|
|
203
|
+
export async function fetchParentBatchSource(
|
|
204
|
+
token: string,
|
|
205
|
+
parentIssueId: string,
|
|
206
|
+
): Promise<ParentBatchSnapshot> {
|
|
207
|
+
return collectParentBatchSource(linearParentBatchSource(token), parentIssueId);
|
|
208
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -83,6 +83,43 @@ function directiveFromPromptContext(promptContext: string): { commentId?: string
|
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Compute the NAMES of the labels newly added by an `Issue`/`update` webhook (DHK-93). Positive
|
|
88
|
+
* evidence only: `updatedFrom` must carry a `labelIds` array (the pre-change set) - a title/description
|
|
89
|
+
* edit that never touched labels carries none, so it yields []. The new set is read from `data.labelIds`
|
|
90
|
+
* (falling back to the ids on `data.labels`), the added ids are the new-set minus the old-set, and each
|
|
91
|
+
* added id is resolved to a name via `data.labels` (`[{id,name}]`). An added id with no resolvable name
|
|
92
|
+
* is dropped, so a payload we cannot name from produces no false trigger. Pure; no LLM.
|
|
93
|
+
*/
|
|
94
|
+
function addedLabelNames(
|
|
95
|
+
data: Record<string, unknown> | undefined,
|
|
96
|
+
updatedFrom: Record<string, unknown> | null | undefined,
|
|
97
|
+
): string[] {
|
|
98
|
+
if (!data || !updatedFrom) return [];
|
|
99
|
+
const oldIds = updatedFrom.labelIds;
|
|
100
|
+
if (!Array.isArray(oldIds)) return []; // labels were not part of this change
|
|
101
|
+
const oldSet = new Set(oldIds.filter((v): v is string => typeof v === "string"));
|
|
102
|
+
const labels = Array.isArray(data.labels)
|
|
103
|
+
? (data.labels as unknown[]).filter(
|
|
104
|
+
(l): l is { id?: string; name?: string } => !!l && typeof l === "object",
|
|
105
|
+
)
|
|
106
|
+
: [];
|
|
107
|
+
const nameById = new Map<string, string>();
|
|
108
|
+
for (const l of labels) {
|
|
109
|
+
if (typeof l.id === "string" && typeof l.name === "string") nameById.set(l.id, l.name);
|
|
110
|
+
}
|
|
111
|
+
const newIds = Array.isArray(data.labelIds)
|
|
112
|
+
? (data.labelIds as unknown[]).filter((v): v is string => typeof v === "string")
|
|
113
|
+
: labels.map((l) => l.id).filter((v): v is string => typeof v === "string");
|
|
114
|
+
const names: string[] = [];
|
|
115
|
+
for (const id of newIds) {
|
|
116
|
+
if (oldSet.has(id)) continue; // pre-existing, not part of the delta
|
|
117
|
+
const name = nameById.get(id);
|
|
118
|
+
if (name !== undefined) names.push(name);
|
|
119
|
+
}
|
|
120
|
+
return names;
|
|
121
|
+
}
|
|
122
|
+
|
|
86
123
|
/** Fixed 👍/👎 -> sentiment lookup. A reaction's sentiment comes from this table, never an LLM, so the
|
|
87
124
|
* determinism boundary holds. Returns undefined for any emoji we do not treat as feedback. */
|
|
88
125
|
function reactionSentiment(emoji: string | undefined): "positive" | "negative" | undefined {
|
|
@@ -194,13 +231,17 @@ export function normalise(payload: LinearWebhookPayload, connectionId: string, t
|
|
|
194
231
|
if (action === "issueUnassignedFromYou") {
|
|
195
232
|
return { ...base, type: "issue-unassigned", subject: { issueId } };
|
|
196
233
|
}
|
|
197
|
-
// Inbox notification: the issue's status changed.
|
|
198
|
-
// a disengagement signal (stop its run); any other status change falls through to ignored.
|
|
234
|
+
// Inbox notification: the issue's status changed. A move to a *canceled* or *completed* workflow-state
|
|
235
|
+
// type is a disengagement signal (stop its run); any other status change falls through to ignored.
|
|
236
|
+
// (A completed move only settles a run parked at a gate; that gate-open rule lives on the hub side.)
|
|
199
237
|
if (action === "issueStatusChanged") {
|
|
200
238
|
const stateType = n.issue?.state?.type ?? n.issueStatusType;
|
|
201
239
|
if (stateType === "canceled") {
|
|
202
240
|
return { ...base, type: "issue-canceled", subject: { issueId } };
|
|
203
241
|
}
|
|
242
|
+
if (stateType === "completed") {
|
|
243
|
+
return { ...base, type: "issue-completed", subject: { issueId } };
|
|
244
|
+
}
|
|
204
245
|
}
|
|
205
246
|
// Inbox notification: a 👍/👎 reaction on a Dahrk response -> a feedback signal. A non-thumb emoji
|
|
206
247
|
// falls through to ignored (never mis-dispatched).
|
|
@@ -261,7 +302,7 @@ export function normalise(payload: LinearWebhookPayload, connectionId: string, t
|
|
|
261
302
|
if (payload.type === "Issue") {
|
|
262
303
|
const p = payload as EntityWebhookPayloadWithIssueData & {
|
|
263
304
|
issue?: { id?: string } | null;
|
|
264
|
-
data?: { state?: { type?: string } | null } | null;
|
|
305
|
+
data?: (Record<string, unknown> & { state?: { type?: string } | null }) | null;
|
|
265
306
|
updatedFrom?: Record<string, unknown> | null;
|
|
266
307
|
};
|
|
267
308
|
// Live "Issue" entity webhooks carry the issue under `data`; tolerate a top-level `issue` too.
|
|
@@ -279,6 +320,13 @@ export function normalise(payload: LinearWebhookPayload, connectionId: string, t
|
|
|
279
320
|
if (p.data?.state?.type === "triage" && p.updatedFrom && "stateId" in p.updatedFrom) {
|
|
280
321
|
return { ...base, type: "triage-entry", subject: { issueId } };
|
|
281
322
|
}
|
|
323
|
+
// Label add (DHK-93): a workflow-trigger label was applied. Emit a distinct `label-added` only on
|
|
324
|
+
// positive evidence - `updatedFrom` carries `labelIds` and at least one added label name resolves -
|
|
325
|
+
// so a pure removal, or any edit that never touched labels, still falls through to `issue-created`.
|
|
326
|
+
const addedLabels = addedLabelNames(p.data ?? undefined, p.updatedFrom);
|
|
327
|
+
if (addedLabels.length > 0) {
|
|
328
|
+
return { ...base, type: "label-added", subject: { issueId }, addedLabels };
|
|
329
|
+
}
|
|
282
330
|
return { ...base, type: "issue-created", subject: { issueId } };
|
|
283
331
|
}
|
|
284
332
|
|
|
@@ -312,7 +360,7 @@ export type StartIssueSkip =
|
|
|
312
360
|
* silently sitting In Progress. `moved` is true only when the issue was actually transitioned into a
|
|
313
361
|
* review state; otherwise `reason` says why not - benign (`already-there`, e.g. a closed issue or one
|
|
314
362
|
* already in the review state) vs a real gap (`no-review-state`: this team has no state named
|
|
315
|
-
* review/in review/qa and `
|
|
363
|
+
* review/in review/qa and `DAHRK_REVIEW_STATE_NAME` is unset/unmatched). */
|
|
316
364
|
export type MoveToReviewOutcome =
|
|
317
365
|
| { moved: true; stateName: string }
|
|
318
366
|
| { moved: false; reason: MoveToReviewSkip };
|
|
@@ -470,7 +518,7 @@ export interface AgentSessionClient {
|
|
|
470
518
|
* instead of it vanishing (see `StartIssueOutcome`). */
|
|
471
519
|
startIssue(sessionId: string): Promise<StartIssueOutcome>;
|
|
472
520
|
/** Move the session's issue to a review-named state on run completion (configurable via
|
|
473
|
-
* `
|
|
521
|
+
* `DAHRK_REVIEW_STATE_NAME`). Leaves it unchanged when no such state exists - never
|
|
474
522
|
* auto-completes, so a human keeps iterating and can re-summon @Dahrk on the same PR. Returns an
|
|
475
523
|
* outcome so a caller can surface a no-op (no matching state) rather than have the ticket silently
|
|
476
524
|
* stay In Progress (see `MoveToReviewOutcome`). */
|
|
@@ -518,7 +566,7 @@ export type {
|
|
|
518
566
|
} from "./responding-client.js";
|
|
519
567
|
export { createLinearClient } from "./linear-client.js";
|
|
520
568
|
export { formatToolAction, formatToolResult, type ToolAction } from "./format-action.js";
|
|
521
|
-
export { authorizeUrl, exchangeCode, refreshTokens, mintAppToken, fetchOrganizationId, probeToken, DEFAULT_AGENT_SCOPES } from "./oauth.js";
|
|
569
|
+
export { authorizeUrl, exchangeCode, refreshTokens, revokeToken, mintAppToken, fetchOrganizationId, probeToken, DEFAULT_AGENT_SCOPES } from "./oauth.js";
|
|
522
570
|
export type { LinearTokens, LinearProbe } from "./oauth.js";
|
|
523
571
|
export {
|
|
524
572
|
provisionLabels,
|
|
@@ -535,8 +583,8 @@ export {
|
|
|
535
583
|
export type { LabelApi, ProvisionOptions, OpenBlocker } from "./labels.js";
|
|
536
584
|
export { linearTeamsApi, listWorkspaceTeams } from "./teams.js";
|
|
537
585
|
export type { Team, TeamsApi } from "./teams.js";
|
|
538
|
-
export { linearTriageApi, linearClientAuth } from "./issues.js";
|
|
539
|
-
export type { TriageApi } from "./issues.js";
|
|
586
|
+
export { linearTriageApi, linearClientAuth, linearCaptureApi } from "./issues.js";
|
|
587
|
+
export type { TriageApi, CaptureLinearApi, CaptureIssueResult } from "./issues.js";
|
|
540
588
|
export {
|
|
541
589
|
fetchAttachedDocuments,
|
|
542
590
|
collectAttachedDocuments,
|
|
@@ -554,3 +602,16 @@ export {
|
|
|
554
602
|
MAX_RELATED_ISSUES,
|
|
555
603
|
} from "./issue-graph.js";
|
|
556
604
|
export type { IssueGraphSource, RawEdge, RawRelatedIssue } from "./issue-graph.js";
|
|
605
|
+
export {
|
|
606
|
+
fetchParentBatchSource,
|
|
607
|
+
collectParentBatchSource,
|
|
608
|
+
linearParentBatchSource,
|
|
609
|
+
MAX_BATCH_CHILDREN,
|
|
610
|
+
} from "./batch-source.js";
|
|
611
|
+
export type {
|
|
612
|
+
ParentBatchSource,
|
|
613
|
+
ParentBatchSnapshot,
|
|
614
|
+
RawChild,
|
|
615
|
+
RawBlocker,
|
|
616
|
+
ExternalBlocker,
|
|
617
|
+
} from "./batch-source.js";
|