workweave 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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +254 -0
  3. package/dist/ai/local.d.ts +9 -0
  4. package/dist/ai/local.d.ts.map +1 -0
  5. package/dist/ai/local.js +148 -0
  6. package/dist/ai/local.js.map +1 -0
  7. package/dist/ai/provider.d.ts +43 -0
  8. package/dist/ai/provider.d.ts.map +1 -0
  9. package/dist/ai/provider.js +191 -0
  10. package/dist/ai/provider.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +193 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/connectors/github.d.ts +13 -0
  16. package/dist/connectors/github.d.ts.map +1 -0
  17. package/dist/connectors/github.js +212 -0
  18. package/dist/connectors/github.js.map +1 -0
  19. package/dist/connectors/linear.d.ts +12 -0
  20. package/dist/connectors/linear.d.ts.map +1 -0
  21. package/dist/connectors/linear.js +160 -0
  22. package/dist/connectors/linear.js.map +1 -0
  23. package/dist/connectors/registry.d.ts +10 -0
  24. package/dist/connectors/registry.d.ts.map +1 -0
  25. package/dist/connectors/registry.js +36 -0
  26. package/dist/connectors/registry.js.map +1 -0
  27. package/dist/connectors/slack.d.ts +11 -0
  28. package/dist/connectors/slack.d.ts.map +1 -0
  29. package/dist/connectors/slack.js +212 -0
  30. package/dist/connectors/slack.js.map +1 -0
  31. package/dist/connectors/types.d.ts +2 -0
  32. package/dist/connectors/types.d.ts.map +1 -0
  33. package/dist/connectors/types.js +3 -0
  34. package/dist/connectors/types.js.map +1 -0
  35. package/dist/display.d.ts +9 -0
  36. package/dist/display.d.ts.map +1 -0
  37. package/dist/display.js +216 -0
  38. package/dist/display.js.map +1 -0
  39. package/dist/env.d.ts +4 -0
  40. package/dist/env.d.ts.map +1 -0
  41. package/dist/env.js +64 -0
  42. package/dist/env.js.map +1 -0
  43. package/dist/pipeline/ai-synthesize.d.ts +11 -0
  44. package/dist/pipeline/ai-synthesize.d.ts.map +1 -0
  45. package/dist/pipeline/ai-synthesize.js +264 -0
  46. package/dist/pipeline/ai-synthesize.js.map +1 -0
  47. package/dist/pipeline/cluster-id.d.ts +5 -0
  48. package/dist/pipeline/cluster-id.d.ts.map +1 -0
  49. package/dist/pipeline/cluster-id.js +13 -0
  50. package/dist/pipeline/cluster-id.js.map +1 -0
  51. package/dist/pipeline/correlate.d.ts +7 -0
  52. package/dist/pipeline/correlate.d.ts.map +1 -0
  53. package/dist/pipeline/correlate.js +105 -0
  54. package/dist/pipeline/correlate.js.map +1 -0
  55. package/dist/pipeline/ingest.d.ts +17 -0
  56. package/dist/pipeline/ingest.d.ts.map +1 -0
  57. package/dist/pipeline/ingest.js +56 -0
  58. package/dist/pipeline/ingest.js.map +1 -0
  59. package/dist/pipeline/merge-plan.d.ts +14 -0
  60. package/dist/pipeline/merge-plan.d.ts.map +1 -0
  61. package/dist/pipeline/merge-plan.js +70 -0
  62. package/dist/pipeline/merge-plan.js.map +1 -0
  63. package/dist/pipeline/normalize.d.ts +3 -0
  64. package/dist/pipeline/normalize.d.ts.map +1 -0
  65. package/dist/pipeline/normalize.js +169 -0
  66. package/dist/pipeline/normalize.js.map +1 -0
  67. package/dist/pipeline/prioritize.d.ts +6 -0
  68. package/dist/pipeline/prioritize.d.ts.map +1 -0
  69. package/dist/pipeline/prioritize.js +453 -0
  70. package/dist/pipeline/prioritize.js.map +1 -0
  71. package/dist/pipeline/schedule.d.ts +11 -0
  72. package/dist/pipeline/schedule.d.ts.map +1 -0
  73. package/dist/pipeline/schedule.js +98 -0
  74. package/dist/pipeline/schedule.js.map +1 -0
  75. package/dist/setup.d.ts +2 -0
  76. package/dist/setup.d.ts.map +1 -0
  77. package/dist/setup.js +276 -0
  78. package/dist/setup.js.map +1 -0
  79. package/dist/types/index.d.ts +90 -0
  80. package/dist/types/index.d.ts.map +1 -0
  81. package/dist/types/index.js +3 -0
  82. package/dist/types/index.js.map +1 -0
  83. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,193 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const registry_1 = require("./connectors/registry");
5
+ const github_1 = require("./connectors/github");
6
+ const linear_1 = require("./connectors/linear");
7
+ const slack_1 = require("./connectors/slack");
8
+ const ingest_1 = require("./pipeline/ingest");
9
+ const normalize_1 = require("./pipeline/normalize");
10
+ const correlate_1 = require("./pipeline/correlate");
11
+ const prioritize_1 = require("./pipeline/prioritize");
12
+ const schedule_1 = require("./pipeline/schedule");
13
+ const ai_synthesize_1 = require("./pipeline/ai-synthesize");
14
+ const provider_1 = require("./ai/provider");
15
+ const local_1 = require("./ai/local");
16
+ const env_1 = require("./env");
17
+ const setup_1 = require("./setup");
18
+ const display_1 = require("./display");
19
+ function parseArgs(argv) {
20
+ const args = [...argv];
21
+ const first = args[0];
22
+ const command = first === "detect" || first === "setup" || first === "synth"
23
+ ? args.shift()
24
+ : "synth";
25
+ const opts = {
26
+ command,
27
+ connectors: ["github"],
28
+ workdayMinutes: Number(process.env.WORKDAY_MINUTES ?? "480"),
29
+ ai: false,
30
+ json: false,
31
+ };
32
+ for (let i = 0; i < args.length; i++) {
33
+ const a = args[i];
34
+ if (a === "--connectors")
35
+ opts.connectors = (args[++i] ?? "github").split(",").map((x) => x.trim()).filter(Boolean);
36
+ else if (a === "--workday-minutes")
37
+ opts.workdayMinutes = Number(args[++i] ?? "480");
38
+ else if (a === "--ai")
39
+ opts.ai = true;
40
+ else if (a === "--json")
41
+ opts.json = true;
42
+ else if (a === "--provider") {
43
+ const val = args[++i] ?? "";
44
+ if (val === "openai" || val === "anthropic" || val === "local")
45
+ opts.provider = val;
46
+ }
47
+ else if (a === "-h" || a === "--help") {
48
+ printHelp();
49
+ process.exit(0);
50
+ }
51
+ }
52
+ return opts;
53
+ }
54
+ function printHelp() {
55
+ console.log(`Workweave
56
+
57
+ Usage:
58
+ workweave setup
59
+ workweave detect [--connectors github,linear,slack] [--json]
60
+ workweave synth [--connectors github,linear,slack] [--workday-minutes 480]
61
+ [--ai] [--provider local|anthropic|openai] [--json]
62
+
63
+ Flags:
64
+ --json Machine-readable JSON output (default: formatted terminal)
65
+ --ai Enable AI synthesis
66
+ --provider <name> Force a specific AI provider (local | anthropic | openai)
67
+ --workday-minutes Available minutes in your workday (default: 480)
68
+ --connectors Comma-separated list of connectors to use
69
+
70
+ Environment variables:
71
+ GITHUB_TOKEN GitHub personal access token (repo scope)
72
+ ANTHROPIC_API_KEY Anthropic API key (fallback when local model unavailable)
73
+ ANTHROPIC_MODEL Model override (default: claude-haiku-4-5)
74
+ OPENAI_API_KEY OpenAI API key (fallback when Anthropic unavailable)
75
+ OPENAI_MODEL Model override (default: gpt-4o-mini)
76
+ LINEAR_API_KEY Linear personal API key
77
+ SLACK_USER_TOKEN Slack user token (xoxp-...)
78
+ `);
79
+ }
80
+ function buildRegistry() {
81
+ const registry = new registry_1.ConnectorRegistry();
82
+ registry.register(new github_1.GitHubConnector());
83
+ registry.register(new linear_1.LinearConnector());
84
+ registry.register(new slack_1.SlackConnector());
85
+ return registry;
86
+ }
87
+ async function resolveProvider(useAi, preferredProvider) {
88
+ if (!useAi)
89
+ return null;
90
+ const anthropicKey = process.env.ANTHROPIC_API_KEY;
91
+ const openaiKey = process.env.OPENAI_API_KEY;
92
+ if (preferredProvider === "local") {
93
+ if (!(0, local_1.modelExists)()) {
94
+ throw new Error("Local model not found. Run `workweave setup` to download it.");
95
+ }
96
+ return new provider_1.LlamaCppProvider((0, local_1.modelPath)());
97
+ }
98
+ if (preferredProvider === "anthropic") {
99
+ if (!anthropicKey)
100
+ throw new Error("ANTHROPIC_API_KEY is required when --provider anthropic is set.");
101
+ return new provider_1.AnthropicProvider({ apiKey: anthropicKey, model: process.env.ANTHROPIC_MODEL });
102
+ }
103
+ if (preferredProvider === "openai") {
104
+ if (!openaiKey)
105
+ throw new Error("OPENAI_API_KEY is required when --provider openai is set.");
106
+ return new provider_1.OpenAIProvider({ apiKey: openaiKey, model: process.env.OPENAI_MODEL });
107
+ }
108
+ // Auto-detect: local → Anthropic → OpenAI
109
+ if ((0, local_1.modelExists)())
110
+ return new provider_1.LlamaCppProvider((0, local_1.modelPath)());
111
+ if (anthropicKey)
112
+ return new provider_1.AnthropicProvider({ apiKey: anthropicKey, model: process.env.ANTHROPIC_MODEL });
113
+ if (openaiKey)
114
+ return new provider_1.OpenAIProvider({ apiKey: openaiKey, model: process.env.OPENAI_MODEL });
115
+ throw new Error("No AI provider found. Run `workweave setup` to download a local model or add an API key.");
116
+ }
117
+ (0, env_1.loadLocalEnv)();
118
+ async function run() {
119
+ const opts = parseArgs(process.argv.slice(2));
120
+ // In JSON mode suppress the [info]/[warn] progress logs so stdout stays clean
121
+ if (opts.json) {
122
+ ingest_1.log.info = () => { };
123
+ ingest_1.log.warn = () => { };
124
+ ingest_1.log.error = () => { };
125
+ }
126
+ if (!["detect", "setup", "synth"].includes(opts.command)) {
127
+ printHelp();
128
+ process.exit(1);
129
+ }
130
+ const registry = buildRegistry();
131
+ if (opts.command === "setup") {
132
+ await (0, setup_1.runSetup)();
133
+ return;
134
+ }
135
+ if (opts.command === "detect") {
136
+ if (!opts.json)
137
+ (0, display_1.startSpinner)("Checking connectors…");
138
+ const infos = await registry.detectAll();
139
+ (0, display_1.stopSpinner)();
140
+ if (opts.json) {
141
+ console.log(JSON.stringify({ connectors: infos }, null, 2));
142
+ }
143
+ else {
144
+ (0, display_1.printDetect)(infos);
145
+ }
146
+ return;
147
+ }
148
+ // synth
149
+ if (!opts.json)
150
+ (0, display_1.startSpinner)("Fetching from connectors…");
151
+ const ingestion = new ingest_1.IngestionOrchestrator(registry);
152
+ const { events, errors } = await ingestion.fetchAll(opts.connectors);
153
+ const artifacts = (0, normalize_1.normalize)(events);
154
+ const provider = await resolveProvider(opts.ai, opts.provider);
155
+ let clusters;
156
+ let synthesisMode = "rules";
157
+ if (provider) {
158
+ if (!opts.json)
159
+ (0, display_1.startSpinner)(`Synthesizing with ${provider.name}…`);
160
+ const out = await (0, ai_synthesize_1.aiSynthesize)(artifacts, provider, {
161
+ info: (msg) => process.stderr.write(`[info] ${msg}\n`),
162
+ warn: (msg) => process.stderr.write(`[warn] ${msg}\n`),
163
+ });
164
+ clusters = out.clusters;
165
+ synthesisMode = out.mode;
166
+ }
167
+ else {
168
+ clusters = (0, prioritize_1.prioritize)((0, correlate_1.correlate)(artifacts));
169
+ }
170
+ (0, display_1.stopSpinner)();
171
+ const plan = (0, schedule_1.schedule)(clusters, opts.workdayMinutes);
172
+ plan.synthesisMode = synthesisMode;
173
+ plan.synthesisProvider = provider?.id;
174
+ const meta = {
175
+ connectors: opts.connectors,
176
+ rawEvents: events.length,
177
+ artifacts: artifacts.length,
178
+ connectorErrors: errors,
179
+ };
180
+ if (opts.json) {
181
+ console.log(JSON.stringify({ plan, meta }, null, 2));
182
+ }
183
+ else {
184
+ (0, display_1.printPlan)(plan, meta);
185
+ }
186
+ }
187
+ run().catch((err) => {
188
+ (0, display_1.stopSpinner)();
189
+ const msg = err instanceof Error ? err.message : String(err);
190
+ console.error(msg);
191
+ process.exit(1);
192
+ });
193
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Connector, ConnectorStatus, ConnectorCapability, RawEvent } from "../types";
2
+ export declare class GitHubConnector implements Connector {
3
+ id: string;
4
+ name: string;
5
+ icon: string;
6
+ private _token;
7
+ private _username;
8
+ detect(): Promise<ConnectorStatus>;
9
+ authenticate(): Promise<boolean>;
10
+ getCapabilities(): ConnectorCapability[];
11
+ fetch(): Promise<RawEvent[]>;
12
+ }
13
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/connectors/github.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACT,MAAM,UAAU,CAAC;AAgDlB,qBAAa,eAAgB,YAAW,SAAS;IAC/C,EAAE,SAAY;IACd,IAAI,SAAY;IAChB,IAAI,SAAY;IAEhB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAuB;IAElC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IA6BlC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAatC,eAAe,IAAI,mBAAmB,EAAE;IAOlC,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CA6DnC"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GitHubConnector = void 0;
37
+ const https = __importStar(require("https"));
38
+ async function githubApi(token, path) {
39
+ return new Promise((resolve, reject) => {
40
+ const req = https.request({
41
+ hostname: "api.github.com",
42
+ path,
43
+ method: "GET",
44
+ headers: {
45
+ Authorization: `Bearer ${token}`,
46
+ Accept: "application/vnd.github+json",
47
+ "User-Agent": "workweave",
48
+ "X-GitHub-Api-Version": "2022-11-28",
49
+ },
50
+ }, (res) => {
51
+ let data = "";
52
+ res.on("data", (chunk) => (data += chunk));
53
+ res.on("end", () => {
54
+ if (res.statusCode === 401) {
55
+ reject(new Error("GitHub token is invalid or expired"));
56
+ return;
57
+ }
58
+ if (res.statusCode && res.statusCode >= 400) {
59
+ reject(new Error(`GitHub API error: HTTP ${res.statusCode}`));
60
+ return;
61
+ }
62
+ try {
63
+ resolve(JSON.parse(data));
64
+ }
65
+ catch {
66
+ reject(new Error("Failed to parse GitHub API response"));
67
+ }
68
+ });
69
+ });
70
+ req.on("error", reject);
71
+ req.setTimeout(15_000, () => {
72
+ req.destroy();
73
+ reject(new Error("GitHub API timeout"));
74
+ });
75
+ req.end();
76
+ });
77
+ }
78
+ class GitHubConnector {
79
+ id = "github";
80
+ name = "GitHub";
81
+ icon = "github";
82
+ _token = null;
83
+ _username = null;
84
+ async detect() {
85
+ const token = process.env.GITHUB_TOKEN;
86
+ if (!token) {
87
+ return {
88
+ available: false,
89
+ reason: "GITHUB_TOKEN is not set",
90
+ setupInstructions: [
91
+ "1. Go to github.com/settings/tokens → Generate new token (classic)",
92
+ "2. Name it 'Workweave', set expiration",
93
+ "3. Select scope: repo",
94
+ "4. Generate and copy the token",
95
+ "5. Run `workweave setup` and paste it when prompted",
96
+ ].join("\n"),
97
+ };
98
+ }
99
+ try {
100
+ const user = await githubApi(token, "/user");
101
+ if (!user.login)
102
+ throw new Error("No login in response");
103
+ return { available: true, authMethod: "token" };
104
+ }
105
+ catch (err) {
106
+ return {
107
+ available: false,
108
+ reason: err instanceof Error ? err.message : "GitHub token validation failed",
109
+ setupInstructions: "Run `workweave setup` to update your GITHUB_TOKEN.",
110
+ };
111
+ }
112
+ }
113
+ async authenticate() {
114
+ const token = process.env.GITHUB_TOKEN;
115
+ if (!token)
116
+ return false;
117
+ try {
118
+ const user = await githubApi(token, "/user");
119
+ this._token = token;
120
+ this._username = user.login;
121
+ return true;
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ }
127
+ getCapabilities() {
128
+ return [
129
+ { type: "pr", description: "Pull requests assigned or requesting your review" },
130
+ { type: "issue", description: "Issues assigned to you" },
131
+ ];
132
+ }
133
+ async fetch() {
134
+ if (!this._token || !this._username) {
135
+ const ok = await this.authenticate();
136
+ if (!ok)
137
+ throw new Error("GitHub authentication failed");
138
+ }
139
+ const token = this._token;
140
+ const username = this._username;
141
+ const events = [];
142
+ const now = new Date().toISOString();
143
+ const seen = new Set();
144
+ const errors = [];
145
+ const queries = [
146
+ {
147
+ label: "review-requested PRs",
148
+ q: `is:open+is:pr+review-requested:${username}+archived:false`,
149
+ sourceType: "pr",
150
+ },
151
+ {
152
+ label: "authored PRs",
153
+ q: `is:open+is:pr+author:${username}+archived:false`,
154
+ sourceType: "pr",
155
+ },
156
+ {
157
+ label: "assigned issues",
158
+ q: `is:open+is:issue+assignee:${username}+archived:false`,
159
+ sourceType: "issue",
160
+ },
161
+ ];
162
+ for (const { label, q, sourceType } of queries) {
163
+ try {
164
+ const result = await githubApi(token, `/search/issues?q=${q}&per_page=25`);
165
+ for (const item of result.items ?? []) {
166
+ const repo = repoFromUrl(item.repository_url);
167
+ const key = `github-${sourceType}-${item.number}-${repo}`;
168
+ if (seen.has(key))
169
+ continue;
170
+ seen.add(key);
171
+ events.push({
172
+ id: key,
173
+ connectorId: this.id,
174
+ sourceType,
175
+ rawPayload: toPayload(item, username),
176
+ fetchedAt: now,
177
+ });
178
+ }
179
+ }
180
+ catch (err) {
181
+ errors.push(`${label}: ${err instanceof Error ? err.message : err}`);
182
+ }
183
+ }
184
+ if (events.length === 0 && errors.length > 0) {
185
+ throw new Error(`GitHub fetch failed: ${errors.join("; ")}`);
186
+ }
187
+ return events;
188
+ }
189
+ }
190
+ exports.GitHubConnector = GitHubConnector;
191
+ function repoFromUrl(repositoryUrl) {
192
+ return repositoryUrl.replace("https://api.github.com/repos/", "");
193
+ }
194
+ function toPayload(item, currentUser) {
195
+ const authorLogin = item.user?.login ?? "unknown";
196
+ return {
197
+ number: item.number,
198
+ title: item.title,
199
+ url: item.html_url,
200
+ createdAt: item.created_at,
201
+ updatedAt: item.updated_at,
202
+ author: { login: authorLogin },
203
+ isAuthor: authorLogin.toLowerCase() === currentUser.toLowerCase(),
204
+ labels: (item.labels ?? []).map((l) => typeof l === "string" ? { name: l } : { name: l.name ?? "" }),
205
+ repository: { nameWithOwner: repoFromUrl(item.repository_url) },
206
+ headRefName: item.pull_request?.head?.ref ?? "",
207
+ additions: 0,
208
+ deletions: 0,
209
+ reviewRequests: [],
210
+ };
211
+ }
212
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/connectors/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Connector, ConnectorStatus, ConnectorCapability, RawEvent } from "../types";
2
+ export declare class LinearConnector implements Connector {
3
+ id: string;
4
+ name: string;
5
+ icon: string;
6
+ private _token;
7
+ detect(): Promise<ConnectorStatus>;
8
+ authenticate(): Promise<boolean>;
9
+ getCapabilities(): ConnectorCapability[];
10
+ fetch(): Promise<RawEvent[]>;
11
+ }
12
+ //# sourceMappingURL=linear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/connectors/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACT,MAAM,UAAU,CAAC;AAsDlB,qBAAa,eAAgB,YAAW,SAAS;IAC/C,EAAE,SAAY;IACd,IAAI,SAAY;IAChB,IAAI,SAAkB;IAEtB,OAAO,CAAC,MAAM,CAAuB;IAE/B,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAYlC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAWtC,eAAe,IAAI,mBAAmB,EAAE;IAIlC,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAoBnC"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LinearConnector = void 0;
37
+ const https = __importStar(require("https"));
38
+ const LINEAR_API = "https://api.linear.app/graphql";
39
+ async function linearQuery(token, query, variables) {
40
+ return new Promise((resolve, reject) => {
41
+ const body = JSON.stringify({ query, variables });
42
+ const url = new URL(LINEAR_API);
43
+ const req = https.request({
44
+ hostname: url.hostname,
45
+ path: url.pathname,
46
+ method: "POST",
47
+ headers: {
48
+ "Content-Type": "application/json",
49
+ Authorization: `Bearer ${token}`,
50
+ "Content-Length": Buffer.byteLength(body),
51
+ },
52
+ }, (res) => {
53
+ let data = "";
54
+ res.on("data", (chunk) => (data += chunk));
55
+ res.on("end", () => {
56
+ try {
57
+ const parsed = JSON.parse(data);
58
+ if (parsed.errors) {
59
+ reject(new Error(parsed.errors[0]?.message ?? "Linear API error"));
60
+ }
61
+ else if (!parsed.data) {
62
+ reject(new Error("Linear API returned no data"));
63
+ }
64
+ else {
65
+ resolve(parsed.data);
66
+ }
67
+ }
68
+ catch {
69
+ reject(new Error(`Failed to parse Linear response (HTTP ${res.statusCode})`));
70
+ }
71
+ });
72
+ });
73
+ req.on("error", reject);
74
+ req.setTimeout(15_000, () => {
75
+ req.destroy();
76
+ reject(new Error("Linear API timeout"));
77
+ });
78
+ req.write(body);
79
+ req.end();
80
+ });
81
+ }
82
+ class LinearConnector {
83
+ id = "linear";
84
+ name = "Linear";
85
+ icon = "list-ordered";
86
+ _token = null;
87
+ async detect() {
88
+ if (!process.env.LINEAR_API_KEY) {
89
+ return {
90
+ available: false,
91
+ reason: "LINEAR_API_KEY is not set",
92
+ setupInstructions: "Set LINEAR_API_KEY in your environment with a personal API key from Linear settings.",
93
+ };
94
+ }
95
+ return { available: true, authMethod: "token" };
96
+ }
97
+ async authenticate() {
98
+ this._token = process.env.LINEAR_API_KEY ?? null;
99
+ if (!this._token)
100
+ return false;
101
+ try {
102
+ await linearQuery(this._token, `query { viewer { id } }`);
103
+ return true;
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }
109
+ getCapabilities() {
110
+ return [{ type: "issue", description: "Issues assigned to you" }];
111
+ }
112
+ async fetch() {
113
+ if (!this._token) {
114
+ const ok = await this.authenticate();
115
+ if (!ok)
116
+ throw new Error("Linear authentication failed");
117
+ }
118
+ const now = new Date().toISOString();
119
+ const assigned = await linearQuery(this._token, ASSIGNED_ISSUES_QUERY);
120
+ return (assigned.viewer?.assignedIssues?.nodes ?? []).map((issue) => ({
121
+ id: `linear-issue-${issue.identifier}`,
122
+ connectorId: this.id,
123
+ sourceType: "issue",
124
+ rawPayload: issue,
125
+ fetchedAt: now,
126
+ }));
127
+ }
128
+ }
129
+ exports.LinearConnector = LinearConnector;
130
+ const ISSUE_FIELDS = `
131
+ id
132
+ identifier
133
+ title
134
+ description
135
+ url
136
+ priority
137
+ priorityLabel
138
+ estimate
139
+ dueDate
140
+ createdAt
141
+ updatedAt
142
+ state { name type }
143
+ labels { nodes { name } }
144
+ project { name }
145
+ cycle { name startsAt endsAt }
146
+ `;
147
+ const ASSIGNED_ISSUES_QUERY = `
148
+ query {
149
+ viewer {
150
+ assignedIssues(
151
+ filter: { state: { type: { nin: ["completed", "canceled"] } } }
152
+ first: 50
153
+ orderBy: updatedAt
154
+ ) {
155
+ nodes { ${ISSUE_FIELDS} }
156
+ }
157
+ }
158
+ }
159
+ `;
160
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/connectors/linear.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Connector, ConnectorInfo } from "../types";
2
+ export declare class ConnectorRegistry {
3
+ private _connectors;
4
+ register(connector: Connector): void;
5
+ get(id: string): Connector | undefined;
6
+ getAll(): Connector[];
7
+ getEnabled(enabledIds: string[]): Connector[];
8
+ detectAll(): Promise<ConnectorInfo[]>;
9
+ }
10
+ //# sourceMappingURL=registry.d.ts.map