@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.
@@ -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
- /** Absent on some refresh responses; callers keep the prior refresh token when so. */
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
- /** Rotate the access token using the stored refresh token (the hub calls this near expiry / on 401). */
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
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAcA,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,iEAAkE,CAAC;AAEpG,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,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,wGAAwG;AACxG,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,CAUvB;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"}
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
- /** Rotate the access token using the stored refresh token (the hub calls this near expiry / on 401). */
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":"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"}
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.1.1",
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.11.1"
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. Only a move to a *canceled* workflow-state type is
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 `SKAKEL_REVIEW_STATE_NAME` is unset/unmatched). */
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
- * `SKAKEL_REVIEW_STATE_NAME`). Leaves it unchanged when no such state exists - never
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";