@intentsolutions/blueprint 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/cli.js +360 -6
  2. package/dist/cli.js.map +1 -1
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +4 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/integrations/github/action.d.ts +27 -0
  8. package/dist/integrations/github/action.d.ts.map +1 -0
  9. package/dist/integrations/github/action.js +151 -0
  10. package/dist/integrations/github/action.js.map +1 -0
  11. package/dist/integrations/github/client.d.ts +78 -0
  12. package/dist/integrations/github/client.d.ts.map +1 -0
  13. package/dist/integrations/github/client.js +279 -0
  14. package/dist/integrations/github/client.js.map +1 -0
  15. package/dist/integrations/github/exporter.d.ts +53 -0
  16. package/dist/integrations/github/exporter.d.ts.map +1 -0
  17. package/dist/integrations/github/exporter.js +387 -0
  18. package/dist/integrations/github/exporter.js.map +1 -0
  19. package/dist/integrations/github/index.d.ts +10 -0
  20. package/dist/integrations/github/index.d.ts.map +1 -0
  21. package/dist/integrations/github/index.js +9 -0
  22. package/dist/integrations/github/index.js.map +1 -0
  23. package/dist/integrations/github/types.d.ts +70 -0
  24. package/dist/integrations/github/types.d.ts.map +1 -0
  25. package/dist/integrations/github/types.js +63 -0
  26. package/dist/integrations/github/types.js.map +1 -0
  27. package/dist/integrations/linear/client.d.ts +94 -0
  28. package/dist/integrations/linear/client.d.ts.map +1 -0
  29. package/dist/integrations/linear/client.js +398 -0
  30. package/dist/integrations/linear/client.js.map +1 -0
  31. package/dist/integrations/linear/exporter.d.ts +80 -0
  32. package/dist/integrations/linear/exporter.d.ts.map +1 -0
  33. package/dist/integrations/linear/exporter.js +438 -0
  34. package/dist/integrations/linear/exporter.js.map +1 -0
  35. package/dist/integrations/linear/index.d.ts +9 -0
  36. package/dist/integrations/linear/index.d.ts.map +1 -0
  37. package/dist/integrations/linear/index.js +8 -0
  38. package/dist/integrations/linear/index.js.map +1 -0
  39. package/dist/integrations/linear/types.d.ts +137 -0
  40. package/dist/integrations/linear/types.d.ts.map +1 -0
  41. package/dist/integrations/linear/types.js +40 -0
  42. package/dist/integrations/linear/types.js.map +1 -0
  43. package/dist/mcp/index.js +0 -0
  44. package/package.json +2 -1
@@ -0,0 +1,438 @@
1
+ /**
2
+ * Linear Exporter
3
+ * High-level export operations for Blueprint documents to Linear
4
+ */
5
+ import { LinearClient } from './client.js';
6
+ import { STANDARD_LABELS, CATEGORY_LABELS } from './types.js';
7
+ export class LinearExporter {
8
+ client;
9
+ teamId;
10
+ constructor(config) {
11
+ this.client = new LinearClient(config);
12
+ this.teamId = config.teamId;
13
+ }
14
+ /**
15
+ * Export Blueprint documents to Linear
16
+ */
17
+ async export(documents, options = {}) {
18
+ const result = {
19
+ cycles: [],
20
+ issues: [],
21
+ labels: [],
22
+ errors: [],
23
+ };
24
+ // Dry run - just preview
25
+ if (options.dryRun) {
26
+ return this.preview(documents, options);
27
+ }
28
+ try {
29
+ // Verify connection
30
+ await this.client.verify();
31
+ // Sync labels if requested
32
+ if (options.syncLabels !== false) {
33
+ const allLabels = [...STANDARD_LABELS, ...CATEGORY_LABELS];
34
+ result.labels = await this.client.ensureLabels(allLabels);
35
+ }
36
+ // Create project if requested
37
+ if (options.createProject && options.projectName) {
38
+ result.project = await this.client.createProject({
39
+ name: options.projectName,
40
+ description: this.extractDescription(documents),
41
+ teamIds: [this.teamId],
42
+ state: 'planned',
43
+ });
44
+ }
45
+ // Extract and create cycles from release phases
46
+ if (options.createCycles !== false) {
47
+ const phases = this.extractReleasePhases(documents);
48
+ result.cycles = await this.createCyclesFromPhases(phases);
49
+ }
50
+ // Extract and create issues from task breakdowns
51
+ const taskBreakdowns = this.extractTaskBreakdowns(documents);
52
+ const labelMap = this.buildLabelMap(result.labels);
53
+ for (const breakdown of taskBreakdowns) {
54
+ // Find matching cycle for this phase
55
+ const cycle = result.cycles.find(c => c.name?.toLowerCase().includes(breakdown.phase.toLowerCase()));
56
+ const issues = await this.createIssuesFromBreakdown(breakdown, {
57
+ projectId: result.project?.id,
58
+ cycleId: cycle?.id,
59
+ labelMap,
60
+ });
61
+ result.issues.push(...issues);
62
+ }
63
+ }
64
+ catch (error) {
65
+ result.errors.push(error instanceof Error ? error.message : String(error));
66
+ }
67
+ return result;
68
+ }
69
+ /**
70
+ * Preview what would be created (dry run)
71
+ */
72
+ async preview(documents, options = {}) {
73
+ const result = {
74
+ cycles: [],
75
+ issues: [],
76
+ labels: [],
77
+ errors: [],
78
+ };
79
+ // Preview labels
80
+ if (options.syncLabels !== false) {
81
+ const allLabels = [...STANDARD_LABELS, ...CATEGORY_LABELS];
82
+ result.labels = allLabels.map((l, i) => ({
83
+ id: `preview-label-${i}`,
84
+ name: l.name,
85
+ color: l.color,
86
+ teamId: this.teamId,
87
+ }));
88
+ }
89
+ // Preview project
90
+ if (options.createProject && options.projectName) {
91
+ result.project = {
92
+ id: 'preview-project',
93
+ name: options.projectName,
94
+ description: this.extractDescription(documents),
95
+ state: 'planned',
96
+ teamIds: [this.teamId],
97
+ };
98
+ }
99
+ // Preview cycles
100
+ if (options.createCycles !== false) {
101
+ const phases = this.extractReleasePhases(documents);
102
+ result.cycles = phases.map((phase, i) => ({
103
+ id: `preview-cycle-${i}`,
104
+ number: i + 1,
105
+ name: phase.name,
106
+ startsAt: phase.startDate || new Date().toISOString(),
107
+ endsAt: phase.endDate || new Date(Date.now() + 14 * 24 * 60 * 60 * 1000).toISOString(),
108
+ teamId: this.teamId,
109
+ }));
110
+ }
111
+ // Preview issues
112
+ const taskBreakdowns = this.extractTaskBreakdowns(documents);
113
+ let issueNum = 1;
114
+ for (const breakdown of taskBreakdowns) {
115
+ for (const task of breakdown.tasks) {
116
+ result.issues.push({
117
+ id: `preview-issue-${issueNum}`,
118
+ identifier: `PREVIEW-${issueNum}`,
119
+ title: task.title,
120
+ description: task.description,
121
+ priority: this.mapPriority(task.priority),
122
+ estimate: task.estimate,
123
+ state: { id: 'preview-state', name: 'Backlog' },
124
+ labels: (task.labels || []).map(l => ({
125
+ id: `preview-label-${l}`,
126
+ name: l,
127
+ color: '#888888',
128
+ })),
129
+ url: '#',
130
+ });
131
+ issueNum++;
132
+ // Add subtasks
133
+ if (task.subtasks) {
134
+ for (const subtask of task.subtasks) {
135
+ result.issues.push({
136
+ id: `preview-issue-${issueNum}`,
137
+ identifier: `PREVIEW-${issueNum}`,
138
+ title: subtask.title,
139
+ description: subtask.description,
140
+ priority: this.mapPriority(subtask.priority),
141
+ estimate: subtask.estimate,
142
+ state: { id: 'preview-state', name: 'Backlog' },
143
+ labels: [],
144
+ url: '#',
145
+ });
146
+ issueNum++;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+ /**
154
+ * Extract project description from documents
155
+ */
156
+ extractDescription(documents) {
157
+ // Look for PRD or overview document
158
+ const prd = documents.find(d => d.name.toLowerCase().includes('prd') ||
159
+ d.name.toLowerCase().includes('product'));
160
+ if (prd) {
161
+ // Extract first paragraph or executive summary
162
+ const lines = prd.content.split('\n');
163
+ const summaryStart = lines.findIndex(l => l.toLowerCase().includes('summary') ||
164
+ l.toLowerCase().includes('overview'));
165
+ if (summaryStart !== -1) {
166
+ const summaryLines = [];
167
+ for (let i = summaryStart + 1; i < lines.length && i < summaryStart + 10; i++) {
168
+ if (lines[i].startsWith('#'))
169
+ break;
170
+ if (lines[i].trim())
171
+ summaryLines.push(lines[i]);
172
+ }
173
+ return summaryLines.join('\n').slice(0, 500);
174
+ }
175
+ }
176
+ return documents[0]?.content.slice(0, 500) || '';
177
+ }
178
+ /**
179
+ * Extract release phases from documents
180
+ */
181
+ extractReleasePhases(documents) {
182
+ const phases = [];
183
+ for (const doc of documents) {
184
+ // Look for release plan sections
185
+ const phaseRegex = /##?\s*(phase|sprint|cycle|milestone)\s*(\d+|[ivx]+)?[:\s-]*([^\n]*)/gi;
186
+ let match;
187
+ while ((match = phaseRegex.exec(doc.content)) !== null) {
188
+ const phaseName = match[3]?.trim() || `${match[1]} ${match[2] || ''}`.trim();
189
+ // Try to extract dates
190
+ const dateRegex = /(\d{4}-\d{2}-\d{2}|\d{1,2}\/\d{1,2}\/\d{4})/g;
191
+ const contentAfterHeader = doc.content.slice(match.index, match.index + 500);
192
+ const dates = contentAfterHeader.match(dateRegex);
193
+ phases.push({
194
+ name: phaseName,
195
+ startDate: dates?.[0],
196
+ endDate: dates?.[1],
197
+ });
198
+ }
199
+ }
200
+ // If no phases found, create default phases
201
+ if (phases.length === 0) {
202
+ const now = new Date();
203
+ phases.push({
204
+ name: 'Phase 1 - Foundation',
205
+ startDate: now.toISOString(),
206
+ endDate: new Date(now.getTime() + 14 * 24 * 60 * 60 * 1000).toISOString(),
207
+ }, {
208
+ name: 'Phase 2 - Core Features',
209
+ startDate: new Date(now.getTime() + 14 * 24 * 60 * 60 * 1000).toISOString(),
210
+ endDate: new Date(now.getTime() + 28 * 24 * 60 * 60 * 1000).toISOString(),
211
+ });
212
+ }
213
+ return phases;
214
+ }
215
+ /**
216
+ * Extract task breakdowns from documents
217
+ */
218
+ extractTaskBreakdowns(documents) {
219
+ const breakdowns = [];
220
+ for (const doc of documents) {
221
+ const tasks = this.parseTasksFromMarkdown(doc.content);
222
+ if (tasks.length > 0) {
223
+ // Try to determine the phase from document context
224
+ const phaseMatch = doc.content.match(/##?\s*(phase|sprint|cycle)\s*(\d+|[ivx]+)?/i);
225
+ const phase = phaseMatch ? phaseMatch[0].replace(/^#+\s*/, '') : 'Backlog';
226
+ breakdowns.push({
227
+ phase,
228
+ tasks,
229
+ });
230
+ }
231
+ }
232
+ return breakdowns;
233
+ }
234
+ /**
235
+ * Parse tasks from markdown content
236
+ */
237
+ parseTasksFromMarkdown(content) {
238
+ const tasks = [];
239
+ const lines = content.split('\n');
240
+ let currentTask = null;
241
+ for (const line of lines) {
242
+ // Match task items: - [ ] Task or * [ ] Task or - Task
243
+ const taskMatch = line.match(/^[\s]*[-*]\s*(?:\[[ x]\])?\s*(.+)/);
244
+ if (taskMatch) {
245
+ const taskText = taskMatch[1].trim();
246
+ // Determine indentation level for subtasks
247
+ const indent = line.match(/^(\s*)/)?.[1].length || 0;
248
+ // Extract priority from markers like [P1], [HIGH], etc.
249
+ const priority = this.extractPriority(taskText);
250
+ // Extract estimate from markers like [2h], [3d], [5pt], etc.
251
+ const estimate = this.extractEstimate(taskText);
252
+ // Extract labels from markers like [feature], [bug], etc.
253
+ const labels = this.extractLabels(taskText);
254
+ // Clean task title
255
+ const title = this.cleanTaskTitle(taskText);
256
+ if (indent < 4 && title.length > 3) {
257
+ // Top-level task
258
+ currentTask = {
259
+ title,
260
+ priority,
261
+ estimate,
262
+ labels,
263
+ subtasks: [],
264
+ };
265
+ tasks.push(currentTask);
266
+ }
267
+ else if (currentTask && indent >= 4 && title.length > 3) {
268
+ // Subtask
269
+ currentTask.subtasks = currentTask.subtasks || [];
270
+ currentTask.subtasks.push({
271
+ title,
272
+ priority,
273
+ estimate,
274
+ });
275
+ }
276
+ }
277
+ }
278
+ // Also look for numbered lists
279
+ const numberedRegex = /^\d+\.\s+(.+)/gm;
280
+ let match;
281
+ while ((match = numberedRegex.exec(content)) !== null) {
282
+ const taskText = match[1].trim();
283
+ if (taskText.length > 3 && !tasks.some(t => t.title === taskText)) {
284
+ tasks.push({
285
+ title: this.cleanTaskTitle(taskText),
286
+ priority: this.extractPriority(taskText),
287
+ estimate: this.extractEstimate(taskText),
288
+ labels: this.extractLabels(taskText),
289
+ });
290
+ }
291
+ }
292
+ return tasks;
293
+ }
294
+ /**
295
+ * Extract priority from task text
296
+ */
297
+ extractPriority(text) {
298
+ const lower = text.toLowerCase();
299
+ if (lower.includes('[p0]') || lower.includes('[urgent]') || lower.includes('🔴'))
300
+ return 'urgent';
301
+ if (lower.includes('[p1]') || lower.includes('[high]') || lower.includes('🟠'))
302
+ return 'high';
303
+ if (lower.includes('[p2]') || lower.includes('[medium]') || lower.includes('🟡'))
304
+ return 'medium';
305
+ if (lower.includes('[p3]') || lower.includes('[low]') || lower.includes('🟢'))
306
+ return 'low';
307
+ return 'none';
308
+ }
309
+ /**
310
+ * Map priority string to Linear priority number
311
+ */
312
+ mapPriority(priority) {
313
+ const map = {
314
+ urgent: 1,
315
+ high: 2,
316
+ medium: 3,
317
+ low: 4,
318
+ none: 0,
319
+ };
320
+ return map[priority] || 0;
321
+ }
322
+ /**
323
+ * Extract estimate from task text
324
+ */
325
+ extractEstimate(text) {
326
+ // Match patterns like [2h], [3d], [5pt], [1w]
327
+ const match = text.match(/\[(\d+)(h|d|pt|w)\]/i);
328
+ if (!match)
329
+ return undefined;
330
+ const value = parseInt(match[1], 10);
331
+ const unit = match[2].toLowerCase();
332
+ // Convert to points (assuming 1 point = 1 hour, 1 day = 8 hours)
333
+ switch (unit) {
334
+ case 'h': return value;
335
+ case 'd': return value * 8;
336
+ case 'w': return value * 40;
337
+ case 'pt': return value;
338
+ default: return value;
339
+ }
340
+ }
341
+ /**
342
+ * Extract labels from task text
343
+ */
344
+ extractLabels(text) {
345
+ const labels = [];
346
+ const labelRegex = /\[(feature|bug|tech-debt|research|design|devops|security|testing|documentation)\]/gi;
347
+ let match;
348
+ while ((match = labelRegex.exec(text)) !== null) {
349
+ labels.push(match[1].toLowerCase());
350
+ }
351
+ return labels;
352
+ }
353
+ /**
354
+ * Clean task title by removing markers
355
+ */
356
+ cleanTaskTitle(text) {
357
+ return text
358
+ .replace(/\[p[0-3]\]/gi, '')
359
+ .replace(/\[(urgent|high|medium|low)\]/gi, '')
360
+ .replace(/\[\d+(h|d|pt|w)\]/gi, '')
361
+ .replace(/\[(feature|bug|tech-debt|research|design|devops|security|testing|documentation)\]/gi, '')
362
+ .replace(/[🔴🟠🟡🟢]/g, '')
363
+ .trim();
364
+ }
365
+ /**
366
+ * Build label ID map from labels
367
+ */
368
+ buildLabelMap(labels) {
369
+ const map = new Map();
370
+ for (const label of labels) {
371
+ map.set(label.name.toLowerCase(), label.id);
372
+ }
373
+ return map;
374
+ }
375
+ /**
376
+ * Create cycles from release phases
377
+ */
378
+ async createCyclesFromPhases(phases) {
379
+ const cycles = [];
380
+ let currentDate = new Date();
381
+ for (const phase of phases) {
382
+ const startsAt = phase.startDate || currentDate.toISOString();
383
+ const endsAt = phase.endDate || new Date(new Date(startsAt).getTime() + 14 * 24 * 60 * 60 * 1000).toISOString();
384
+ try {
385
+ const cycle = await this.client.createCycle({
386
+ name: phase.name,
387
+ teamId: this.teamId,
388
+ startsAt,
389
+ endsAt,
390
+ });
391
+ cycles.push(cycle);
392
+ currentDate = new Date(endsAt);
393
+ }
394
+ catch (error) {
395
+ // Cycle creation may fail if dates overlap - continue
396
+ console.warn(`Could not create cycle "${phase.name}": ${error}`);
397
+ }
398
+ }
399
+ return cycles;
400
+ }
401
+ /**
402
+ * Create issues from a task breakdown
403
+ */
404
+ async createIssuesFromBreakdown(breakdown, options) {
405
+ const tasks = breakdown.tasks.map(task => ({
406
+ title: task.title,
407
+ description: task.description,
408
+ priority: this.mapPriority(task.priority),
409
+ estimate: task.estimate,
410
+ labels: task.labels,
411
+ subtasks: task.subtasks?.map(st => ({
412
+ title: st.title,
413
+ description: st.description,
414
+ priority: this.mapPriority(st.priority),
415
+ estimate: st.estimate,
416
+ })),
417
+ }));
418
+ // Map label names to IDs
419
+ const labelIds = breakdown.tasks
420
+ .flatMap(t => t.labels || [])
421
+ .filter((v, i, a) => a.indexOf(v) === i)
422
+ .map(name => options.labelMap.get(name.toLowerCase()))
423
+ .filter((id) => !!id);
424
+ return this.client.createIssuesFromTasks(tasks, {
425
+ projectId: options.projectId,
426
+ cycleId: options.cycleId,
427
+ labelIds: labelIds.length > 0 ? labelIds : undefined,
428
+ });
429
+ }
430
+ }
431
+ /**
432
+ * Export documents to Linear (convenience function)
433
+ */
434
+ export async function exportToLinear(config, documents, options = {}) {
435
+ const exporter = new LinearExporter(config);
436
+ return exporter.export(documents, options);
437
+ }
438
+ //# sourceMappingURL=exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../src/integrations/linear/exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Linear Integration
3
+ * Export Blueprint documents to Linear (projects, cycles, issues)
4
+ */
5
+ export { LinearClient } from './client.js';
6
+ export { LinearExporter, exportToLinear } from './exporter.js';
7
+ export type { LinearConfig, LinearTeam, LinearProject, LinearCycle, LinearLabel, LinearIssue, LinearWorkflowState, CreateIssueInput, CreateProjectInput, CreateCycleInput, LinearTaskBreakdown, LinearTaskItem, LinearExportResult, LinearExportOptions, } from './types.js';
8
+ export { PRIORITY_MAP, STANDARD_LABELS, CATEGORY_LABELS, } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Linear Integration
3
+ * Export Blueprint documents to Linear (projects, cycles, issues)
4
+ */
5
+ export { LinearClient } from './client.js';
6
+ export { LinearExporter, exportToLinear } from './exporter.js';
7
+ export { PRIORITY_MAP, STANDARD_LABELS, CATEGORY_LABELS, } from './types.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/linear/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAiB/D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Linear Integration Types
3
+ * Types for Linear API integration
4
+ */
5
+ export interface LinearConfig {
6
+ /** Linear API key */
7
+ apiKey: string;
8
+ /** Team ID to create issues in */
9
+ teamId: string;
10
+ /** Optional project ID */
11
+ projectId?: string;
12
+ }
13
+ export interface LinearTeam {
14
+ id: string;
15
+ name: string;
16
+ key: string;
17
+ }
18
+ export interface LinearProject {
19
+ id: string;
20
+ name: string;
21
+ description?: string;
22
+ state: string;
23
+ teamIds: string[];
24
+ }
25
+ export interface LinearCycle {
26
+ id: string;
27
+ number: number;
28
+ name?: string;
29
+ startsAt: string;
30
+ endsAt: string;
31
+ teamId: string;
32
+ }
33
+ export interface LinearLabel {
34
+ id: string;
35
+ name: string;
36
+ color: string;
37
+ teamId?: string;
38
+ }
39
+ export interface LinearIssue {
40
+ id: string;
41
+ identifier: string;
42
+ title: string;
43
+ description?: string;
44
+ priority: number;
45
+ estimate?: number;
46
+ state: {
47
+ id: string;
48
+ name: string;
49
+ };
50
+ labels: LinearLabel[];
51
+ project?: LinearProject;
52
+ cycle?: LinearCycle;
53
+ url: string;
54
+ }
55
+ export interface LinearWorkflowState {
56
+ id: string;
57
+ name: string;
58
+ type: 'backlog' | 'unstarted' | 'started' | 'completed' | 'canceled';
59
+ teamId: string;
60
+ }
61
+ export interface CreateIssueInput {
62
+ title: string;
63
+ description?: string;
64
+ teamId: string;
65
+ projectId?: string;
66
+ cycleId?: string;
67
+ priority?: number;
68
+ estimate?: number;
69
+ labelIds?: string[];
70
+ stateId?: string;
71
+ parentId?: string;
72
+ }
73
+ export interface CreateProjectInput {
74
+ name: string;
75
+ description?: string;
76
+ teamIds: string[];
77
+ state?: 'planned' | 'started' | 'paused' | 'completed' | 'canceled';
78
+ }
79
+ export interface CreateCycleInput {
80
+ name?: string;
81
+ teamId: string;
82
+ startsAt: string;
83
+ endsAt: string;
84
+ description?: string;
85
+ }
86
+ export interface LinearTaskBreakdown {
87
+ phase: string;
88
+ tasks: LinearTaskItem[];
89
+ cycleWeeks?: number;
90
+ }
91
+ export interface LinearTaskItem {
92
+ title: string;
93
+ description?: string;
94
+ priority: 'urgent' | 'high' | 'medium' | 'low' | 'none';
95
+ estimate?: number;
96
+ labels?: string[];
97
+ subtasks?: LinearTaskItem[];
98
+ }
99
+ export interface LinearExportResult {
100
+ project?: LinearProject;
101
+ cycles: LinearCycle[];
102
+ issues: LinearIssue[];
103
+ labels: LinearLabel[];
104
+ errors: string[];
105
+ }
106
+ export interface LinearExportOptions {
107
+ /** Create a new project for the PRD */
108
+ createProject?: boolean;
109
+ /** Project name (if creating) */
110
+ projectName?: string;
111
+ /** Create cycles from release phases */
112
+ createCycles?: boolean;
113
+ /** Sync labels from document categories */
114
+ syncLabels?: boolean;
115
+ /** Dry run - preview without creating */
116
+ dryRun?: boolean;
117
+ }
118
+ /**
119
+ * Priority mapping between Blueprint and Linear
120
+ * Linear: 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low
121
+ */
122
+ export declare const PRIORITY_MAP: Record<string, number>;
123
+ /**
124
+ * Standard labels for Blueprint documents
125
+ */
126
+ export declare const STANDARD_LABELS: Array<{
127
+ name: string;
128
+ color: string;
129
+ }>;
130
+ /**
131
+ * Category labels for task organization
132
+ */
133
+ export declare const CATEGORY_LABELS: Array<{
134
+ name: string;
135
+ color: string;
136
+ }>;
137
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Linear Integration Types
3
+ * Types for Linear API integration
4
+ */
5
+ /**
6
+ * Priority mapping between Blueprint and Linear
7
+ * Linear: 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low
8
+ */
9
+ export const PRIORITY_MAP = {
10
+ urgent: 1,
11
+ high: 2,
12
+ medium: 3,
13
+ low: 4,
14
+ none: 0,
15
+ };
16
+ /**
17
+ * Standard labels for Blueprint documents
18
+ */
19
+ export const STANDARD_LABELS = [
20
+ { name: 'prd', color: '#6B5B95' },
21
+ { name: 'technical-spec', color: '#88B04B' },
22
+ { name: 'architecture', color: '#F7CAC9' },
23
+ { name: 'api-design', color: '#92A8D1' },
24
+ { name: 'security', color: '#DD4124' },
25
+ { name: 'infrastructure', color: '#45B8AC' },
26
+ { name: 'testing', color: '#EFC050' },
27
+ { name: 'documentation', color: '#5B5EA6' },
28
+ ];
29
+ /**
30
+ * Category labels for task organization
31
+ */
32
+ export const CATEGORY_LABELS = [
33
+ { name: 'feature', color: '#0052CC' },
34
+ { name: 'bug', color: '#DE350B' },
35
+ { name: 'tech-debt', color: '#FF8B00' },
36
+ { name: 'research', color: '#6554C0' },
37
+ { name: 'design', color: '#00B8D9' },
38
+ { name: 'devops', color: '#36B37E' },
39
+ ];
40
+ //# sourceMappingURL=types.js.map