@fractary/core 0.1.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/LICENSE +21 -0
- package/README.md +169 -0
- package/dist/__tests__/smoke.test.d.ts +7 -0
- package/dist/__tests__/smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke.test.js +132 -0
- package/dist/__tests__/smoke.test.js.map +1 -0
- package/dist/common/config.d.ts +30 -0
- package/dist/common/config.d.ts.map +1 -0
- package/dist/common/config.js +120 -0
- package/dist/common/config.js.map +1 -0
- package/dist/common/errors.d.ts +264 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +491 -0
- package/dist/common/errors.js.map +1 -0
- package/dist/common/index.d.ts +9 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +25 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/types.d.ts +622 -0
- package/dist/common/types.d.ts.map +1 -0
- package/dist/common/types.js +8 -0
- package/dist/common/types.js.map +1 -0
- package/dist/docs/index.d.ts +8 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +26 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/docs/manager.d.ts +47 -0
- package/dist/docs/manager.d.ts.map +1 -0
- package/dist/docs/manager.js +250 -0
- package/dist/docs/manager.js.map +1 -0
- package/dist/docs/types.d.ts +113 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/docs/types.js +8 -0
- package/dist/docs/types.js.map +1 -0
- package/dist/file/index.d.ts +9 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/index.js +28 -0
- package/dist/file/index.js.map +1 -0
- package/dist/file/local.d.ts +42 -0
- package/dist/file/local.d.ts.map +1 -0
- package/dist/file/local.js +137 -0
- package/dist/file/local.js.map +1 -0
- package/dist/file/manager.d.ts +42 -0
- package/dist/file/manager.d.ts.map +1 -0
- package/dist/file/manager.js +68 -0
- package/dist/file/manager.js.map +1 -0
- package/dist/file/types.d.ts +52 -0
- package/dist/file/types.d.ts.map +1 -0
- package/dist/file/types.js +8 -0
- package/dist/file/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/logs/index.d.ts +8 -0
- package/dist/logs/index.d.ts.map +1 -0
- package/dist/logs/index.js +26 -0
- package/dist/logs/index.js.map +1 -0
- package/dist/logs/manager.d.ts +97 -0
- package/dist/logs/manager.d.ts.map +1 -0
- package/dist/logs/manager.js +584 -0
- package/dist/logs/manager.js.map +1 -0
- package/dist/logs/types.d.ts +45 -0
- package/dist/logs/types.d.ts.map +1 -0
- package/dist/logs/types.js +8 -0
- package/dist/logs/types.js.map +1 -0
- package/dist/repo/git.d.ts +182 -0
- package/dist/repo/git.d.ts.map +1 -0
- package/dist/repo/git.js +496 -0
- package/dist/repo/git.js.map +1 -0
- package/dist/repo/index.d.ts +10 -0
- package/dist/repo/index.d.ts.map +1 -0
- package/dist/repo/index.js +29 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/manager.d.ts +179 -0
- package/dist/repo/manager.d.ts.map +1 -0
- package/dist/repo/manager.js +433 -0
- package/dist/repo/manager.js.map +1 -0
- package/dist/repo/providers/bitbucket.d.ts +48 -0
- package/dist/repo/providers/bitbucket.d.ts.map +1 -0
- package/dist/repo/providers/bitbucket.js +86 -0
- package/dist/repo/providers/bitbucket.js.map +1 -0
- package/dist/repo/providers/github.d.ts +30 -0
- package/dist/repo/providers/github.d.ts.map +1 -0
- package/dist/repo/providers/github.js +311 -0
- package/dist/repo/providers/github.js.map +1 -0
- package/dist/repo/providers/gitlab.d.ts +47 -0
- package/dist/repo/providers/gitlab.d.ts.map +1 -0
- package/dist/repo/providers/gitlab.js +84 -0
- package/dist/repo/providers/gitlab.js.map +1 -0
- package/dist/repo/providers/index.d.ts +9 -0
- package/dist/repo/providers/index.d.ts.map +1 -0
- package/dist/repo/providers/index.js +15 -0
- package/dist/repo/providers/index.js.map +1 -0
- package/dist/repo/types.d.ts +48 -0
- package/dist/repo/types.d.ts.map +1 -0
- package/dist/repo/types.js +8 -0
- package/dist/repo/types.js.map +1 -0
- package/dist/spec/index.d.ts +9 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +30 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/manager.d.ts +106 -0
- package/dist/spec/manager.d.ts.map +1 -0
- package/dist/spec/manager.js +672 -0
- package/dist/spec/manager.js.map +1 -0
- package/dist/spec/templates.d.ts +28 -0
- package/dist/spec/templates.d.ts.map +1 -0
- package/dist/spec/templates.js +357 -0
- package/dist/spec/templates.js.map +1 -0
- package/dist/spec/types.d.ts +53 -0
- package/dist/spec/types.d.ts.map +1 -0
- package/dist/spec/types.js +8 -0
- package/dist/spec/types.js.map +1 -0
- package/dist/work/index.d.ts +8 -0
- package/dist/work/index.d.ts.map +1 -0
- package/dist/work/index.js +26 -0
- package/dist/work/index.js.map +1 -0
- package/dist/work/manager.d.ts +112 -0
- package/dist/work/manager.d.ts.map +1 -0
- package/dist/work/manager.js +227 -0
- package/dist/work/manager.js.map +1 -0
- package/dist/work/providers/github.d.ts +40 -0
- package/dist/work/providers/github.d.ts.map +1 -0
- package/dist/work/providers/github.js +299 -0
- package/dist/work/providers/github.js.map +1 -0
- package/dist/work/providers/jira.d.ts +60 -0
- package/dist/work/providers/jira.d.ts.map +1 -0
- package/dist/work/providers/jira.js +109 -0
- package/dist/work/providers/jira.js.map +1 -0
- package/dist/work/providers/linear.d.ts +57 -0
- package/dist/work/providers/linear.d.ts.map +1 -0
- package/dist/work/providers/linear.js +103 -0
- package/dist/work/providers/linear.js.map +1 -0
- package/dist/work/types.d.ts +42 -0
- package/dist/work/types.d.ts.map +1 -0
- package/dist/work/types.js +8 -0
- package/dist/work/types.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fractary/faber - GitHub Work Provider
|
|
4
|
+
*
|
|
5
|
+
* Work tracking via GitHub Issues using the gh CLI.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.GitHubWorkProvider = void 0;
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
const errors_1 = require("../../common/errors");
|
|
11
|
+
/**
|
|
12
|
+
* Execute a command and return the output
|
|
13
|
+
*/
|
|
14
|
+
function exec(command, options) {
|
|
15
|
+
try {
|
|
16
|
+
const result = (0, child_process_1.execSync)(command, {
|
|
17
|
+
encoding: 'utf-8',
|
|
18
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB
|
|
19
|
+
...options,
|
|
20
|
+
});
|
|
21
|
+
return (typeof result === 'string' ? result : result.toString()).trim();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const err = error;
|
|
25
|
+
const exitCode = err.status || 1;
|
|
26
|
+
const stderr = err.stderr?.toString() || '';
|
|
27
|
+
if (stderr.includes('authentication') || stderr.includes('auth')) {
|
|
28
|
+
throw new errors_1.AuthenticationError('github', 'GitHub authentication failed. Run "gh auth login"');
|
|
29
|
+
}
|
|
30
|
+
throw new errors_1.CommandExecutionError(command, exitCode, stderr);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if gh CLI is available and authenticated
|
|
35
|
+
*/
|
|
36
|
+
function checkGhCli() {
|
|
37
|
+
try {
|
|
38
|
+
exec('gh auth status');
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
throw new errors_1.AuthenticationError('github', 'GitHub CLI not authenticated. Run "gh auth login" to authenticate.');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* GitHub Issues provider using gh CLI
|
|
46
|
+
*/
|
|
47
|
+
class GitHubWorkProvider {
|
|
48
|
+
platform = 'github';
|
|
49
|
+
owner;
|
|
50
|
+
repo;
|
|
51
|
+
constructor(config) {
|
|
52
|
+
if (!config.owner || !config.repo) {
|
|
53
|
+
throw new errors_1.ProviderError('github', 'init', 'GitHub work provider requires owner and repo in config');
|
|
54
|
+
}
|
|
55
|
+
this.owner = config.owner;
|
|
56
|
+
this.repo = config.repo;
|
|
57
|
+
checkGhCli();
|
|
58
|
+
}
|
|
59
|
+
getRepoArg() {
|
|
60
|
+
return `${this.owner}/${this.repo}`;
|
|
61
|
+
}
|
|
62
|
+
// =========================================================================
|
|
63
|
+
// ISSUES
|
|
64
|
+
// =========================================================================
|
|
65
|
+
async createIssue(options) {
|
|
66
|
+
const args = [`--repo ${this.getRepoArg()}`];
|
|
67
|
+
args.push(`--title "${options.title.replace(/"/g, '\\"')}"`);
|
|
68
|
+
if (options.body) {
|
|
69
|
+
args.push(`--body "${options.body.replace(/"/g, '\\"')}"`);
|
|
70
|
+
}
|
|
71
|
+
if (options.labels && options.labels.length > 0) {
|
|
72
|
+
args.push(`--label "${options.labels.join(',')}"`);
|
|
73
|
+
}
|
|
74
|
+
if (options.assignees && options.assignees.length > 0) {
|
|
75
|
+
args.push(`--assignee "${options.assignees.join(',')}"`);
|
|
76
|
+
}
|
|
77
|
+
if (options.milestone) {
|
|
78
|
+
args.push(`--milestone "${options.milestone}"`);
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const result = exec(`gh issue create ${args.join(' ')} --json number,title,body,state,labels,assignees,milestone,createdAt,updatedAt,url`);
|
|
82
|
+
return this.parseIssue(JSON.parse(result));
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
if (error instanceof errors_1.CommandExecutionError) {
|
|
86
|
+
throw new errors_1.IssueCreateError(error.stderr);
|
|
87
|
+
}
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async fetchIssue(issueId) {
|
|
92
|
+
try {
|
|
93
|
+
const result = exec(`gh issue view ${issueId} --repo ${this.getRepoArg()} --json number,title,body,state,labels,assignees,milestone,createdAt,updatedAt,closedAt,url`);
|
|
94
|
+
return this.parseIssue(JSON.parse(result));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error instanceof errors_1.CommandExecutionError) {
|
|
98
|
+
if (error.stderr.includes('not found') || error.stderr.includes('Could not resolve')) {
|
|
99
|
+
throw new errors_1.IssueNotFoundError(issueId);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async updateIssue(issueId, options) {
|
|
106
|
+
const args = [`--repo ${this.getRepoArg()}`];
|
|
107
|
+
if (options.title) {
|
|
108
|
+
args.push(`--title "${options.title.replace(/"/g, '\\"')}"`);
|
|
109
|
+
}
|
|
110
|
+
if (options.body) {
|
|
111
|
+
args.push(`--body "${options.body.replace(/"/g, '\\"')}"`);
|
|
112
|
+
}
|
|
113
|
+
if (args.length > 1) {
|
|
114
|
+
exec(`gh issue edit ${issueId} ${args.join(' ')}`);
|
|
115
|
+
}
|
|
116
|
+
return this.fetchIssue(issueId);
|
|
117
|
+
}
|
|
118
|
+
async closeIssue(issueId) {
|
|
119
|
+
exec(`gh issue close ${issueId} --repo ${this.getRepoArg()}`);
|
|
120
|
+
return this.fetchIssue(issueId);
|
|
121
|
+
}
|
|
122
|
+
async reopenIssue(issueId) {
|
|
123
|
+
exec(`gh issue reopen ${issueId} --repo ${this.getRepoArg()}`);
|
|
124
|
+
return this.fetchIssue(issueId);
|
|
125
|
+
}
|
|
126
|
+
async searchIssues(query, filters) {
|
|
127
|
+
const args = [`--repo ${this.getRepoArg()}`];
|
|
128
|
+
if (filters?.state && filters.state !== 'all') {
|
|
129
|
+
args.push(`--state ${filters.state}`);
|
|
130
|
+
}
|
|
131
|
+
if (filters?.labels && filters.labels.length > 0) {
|
|
132
|
+
args.push(`--label "${filters.labels.join(',')}"`);
|
|
133
|
+
}
|
|
134
|
+
if (filters?.assignee) {
|
|
135
|
+
args.push(`--assignee ${filters.assignee}`);
|
|
136
|
+
}
|
|
137
|
+
if (filters?.milestone) {
|
|
138
|
+
args.push(`--milestone "${filters.milestone}"`);
|
|
139
|
+
}
|
|
140
|
+
args.push(`--search "${query}"`);
|
|
141
|
+
args.push('--json number,title,body,state,labels,assignees,milestone,createdAt,updatedAt,closedAt,url');
|
|
142
|
+
const result = exec(`gh issue list ${args.join(' ')}`);
|
|
143
|
+
const issues = JSON.parse(result || '[]');
|
|
144
|
+
return issues.map(i => this.parseIssue(i));
|
|
145
|
+
}
|
|
146
|
+
async assignIssue(issueId, assignee) {
|
|
147
|
+
exec(`gh issue edit ${issueId} --repo ${this.getRepoArg()} --add-assignee ${assignee}`);
|
|
148
|
+
return this.fetchIssue(issueId);
|
|
149
|
+
}
|
|
150
|
+
async unassignIssue(issueId) {
|
|
151
|
+
// Get current assignees and remove them
|
|
152
|
+
const issue = await this.fetchIssue(issueId);
|
|
153
|
+
if (issue.assignees.length > 0) {
|
|
154
|
+
exec(`gh issue edit ${issueId} --repo ${this.getRepoArg()} --remove-assignee ${issue.assignees.join(',')}`);
|
|
155
|
+
}
|
|
156
|
+
return this.fetchIssue(issueId);
|
|
157
|
+
}
|
|
158
|
+
// =========================================================================
|
|
159
|
+
// COMMENTS
|
|
160
|
+
// =========================================================================
|
|
161
|
+
async createComment(issueId, body, faberContext) {
|
|
162
|
+
// Add FABER context to comment if provided
|
|
163
|
+
let finalBody = body;
|
|
164
|
+
if (faberContext) {
|
|
165
|
+
finalBody = `<!-- faber:${faberContext} -->\n${body}`;
|
|
166
|
+
}
|
|
167
|
+
exec(`gh issue comment ${issueId} --repo ${this.getRepoArg()} --body "${finalBody.replace(/"/g, '\\"')}"`);
|
|
168
|
+
// gh doesn't return JSON for comment creation, so we fetch latest
|
|
169
|
+
const comments = await this.listComments(issueId, { limit: 1 });
|
|
170
|
+
return comments[0];
|
|
171
|
+
}
|
|
172
|
+
async listComments(issueId, options) {
|
|
173
|
+
const result = exec(`gh api repos/${this.getRepoArg()}/issues/${issueId}/comments --jq '.[] | {id: .id, body: .body, author: .user.login, createdAt: .created_at, updatedAt: .updated_at}'`);
|
|
174
|
+
if (!result)
|
|
175
|
+
return [];
|
|
176
|
+
const lines = result.split('\n').filter(l => l.trim());
|
|
177
|
+
let comments = lines.map(line => {
|
|
178
|
+
const c = JSON.parse(line);
|
|
179
|
+
return {
|
|
180
|
+
id: String(c.id),
|
|
181
|
+
body: c.body,
|
|
182
|
+
author: c.author,
|
|
183
|
+
created_at: c.createdAt,
|
|
184
|
+
updated_at: c.updatedAt,
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
if (options?.since) {
|
|
188
|
+
const sinceDate = new Date(options.since);
|
|
189
|
+
comments = comments.filter(c => new Date(c.created_at) > sinceDate);
|
|
190
|
+
}
|
|
191
|
+
if (options?.limit) {
|
|
192
|
+
comments = comments.slice(-options.limit);
|
|
193
|
+
}
|
|
194
|
+
return comments;
|
|
195
|
+
}
|
|
196
|
+
// =========================================================================
|
|
197
|
+
// LABELS
|
|
198
|
+
// =========================================================================
|
|
199
|
+
async addLabels(issueId, labels) {
|
|
200
|
+
exec(`gh issue edit ${issueId} --repo ${this.getRepoArg()} --add-label "${labels.join(',')}"`);
|
|
201
|
+
const issue = await this.fetchIssue(issueId);
|
|
202
|
+
return issue.labels;
|
|
203
|
+
}
|
|
204
|
+
async removeLabels(issueId, labels) {
|
|
205
|
+
exec(`gh issue edit ${issueId} --repo ${this.getRepoArg()} --remove-label "${labels.join(',')}"`);
|
|
206
|
+
}
|
|
207
|
+
async setLabels(issueId, labels) {
|
|
208
|
+
// First remove all labels, then add new ones
|
|
209
|
+
const issue = await this.fetchIssue(issueId);
|
|
210
|
+
if (issue.labels.length > 0) {
|
|
211
|
+
await this.removeLabels(issueId, issue.labels.map(l => l.name));
|
|
212
|
+
}
|
|
213
|
+
if (labels.length > 0) {
|
|
214
|
+
return this.addLabels(issueId, labels);
|
|
215
|
+
}
|
|
216
|
+
return [];
|
|
217
|
+
}
|
|
218
|
+
async listLabels(issueId) {
|
|
219
|
+
if (issueId) {
|
|
220
|
+
const issue = await this.fetchIssue(issueId);
|
|
221
|
+
return issue.labels;
|
|
222
|
+
}
|
|
223
|
+
const result = exec(`gh label list --repo ${this.getRepoArg()} --json name,color,description`);
|
|
224
|
+
return JSON.parse(result || '[]');
|
|
225
|
+
}
|
|
226
|
+
// =========================================================================
|
|
227
|
+
// MILESTONES
|
|
228
|
+
// =========================================================================
|
|
229
|
+
async createMilestone(options) {
|
|
230
|
+
const args = [`--title "${options.title}"`];
|
|
231
|
+
if (options.description) {
|
|
232
|
+
args.push(`--description "${options.description.replace(/"/g, '\\"')}"`);
|
|
233
|
+
}
|
|
234
|
+
if (options.due_on) {
|
|
235
|
+
args.push(`--due-date "${options.due_on}"`);
|
|
236
|
+
}
|
|
237
|
+
const result = exec(`gh api repos/${this.getRepoArg()}/milestones -f title="${options.title}" ${options.description ? `-f description="${options.description}"` : ''} ${options.due_on ? `-f due_on="${options.due_on}"` : ''}`);
|
|
238
|
+
const m = JSON.parse(result);
|
|
239
|
+
return {
|
|
240
|
+
id: String(m.number),
|
|
241
|
+
title: m.title,
|
|
242
|
+
description: m.description,
|
|
243
|
+
due_on: m.due_on,
|
|
244
|
+
state: m.state,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
async setMilestone(issueId, milestone) {
|
|
248
|
+
exec(`gh issue edit ${issueId} --repo ${this.getRepoArg()} --milestone "${milestone}"`);
|
|
249
|
+
return this.fetchIssue(issueId);
|
|
250
|
+
}
|
|
251
|
+
async removeMilestone(issueId) {
|
|
252
|
+
exec(`gh issue edit ${issueId} --repo ${this.getRepoArg()} --milestone ""`);
|
|
253
|
+
return this.fetchIssue(issueId);
|
|
254
|
+
}
|
|
255
|
+
async listMilestones(state) {
|
|
256
|
+
const stateArg = state && state !== 'all' ? `?state=${state}` : '';
|
|
257
|
+
const result = exec(`gh api repos/${this.getRepoArg()}/milestones${stateArg}`);
|
|
258
|
+
const milestones = JSON.parse(result || '[]');
|
|
259
|
+
return milestones.map(m => ({
|
|
260
|
+
id: String(m.number),
|
|
261
|
+
title: m.title,
|
|
262
|
+
description: m.description,
|
|
263
|
+
due_on: m.due_on,
|
|
264
|
+
state: m.state,
|
|
265
|
+
}));
|
|
266
|
+
}
|
|
267
|
+
// =========================================================================
|
|
268
|
+
// HELPERS
|
|
269
|
+
// =========================================================================
|
|
270
|
+
parseIssue(raw) {
|
|
271
|
+
const data = raw;
|
|
272
|
+
return {
|
|
273
|
+
id: String(data['number']),
|
|
274
|
+
number: data['number'],
|
|
275
|
+
title: data['title'],
|
|
276
|
+
body: data['body'] || '',
|
|
277
|
+
state: data['state']?.toLowerCase() === 'open' ? 'open' : 'closed',
|
|
278
|
+
labels: (data['labels'] || []).map(l => ({
|
|
279
|
+
name: l.name,
|
|
280
|
+
color: l.color,
|
|
281
|
+
description: l.description,
|
|
282
|
+
})),
|
|
283
|
+
assignees: (data['assignees'] || []).map(a => a.login),
|
|
284
|
+
milestone: data['milestone'] ? {
|
|
285
|
+
id: String(data['milestone']['number']),
|
|
286
|
+
title: data['milestone']['title'],
|
|
287
|
+
description: data['milestone']['description'],
|
|
288
|
+
due_on: data['milestone']['dueOn'],
|
|
289
|
+
state: data['milestone']['state']?.toLowerCase() === 'open' ? 'open' : 'closed',
|
|
290
|
+
} : undefined,
|
|
291
|
+
created_at: data['createdAt'],
|
|
292
|
+
updated_at: data['updatedAt'],
|
|
293
|
+
closed_at: data['closedAt'],
|
|
294
|
+
url: data['url'],
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
exports.GitHubWorkProvider = GitHubWorkProvider;
|
|
299
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/work/providers/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fractary/core - Jira Work Provider
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ STUB IMPLEMENTATION - NOT YET FUNCTIONAL
|
|
5
|
+
*
|
|
6
|
+
* This provider is included for future compatibility but is not currently implemented.
|
|
7
|
+
* All methods will throw ProviderError when called.
|
|
8
|
+
*
|
|
9
|
+
* Use GitHubWorkProvider for a fully functional work tracking provider.
|
|
10
|
+
*
|
|
11
|
+
* Future implementation will include:
|
|
12
|
+
* - Jira Cloud REST API v3 integration
|
|
13
|
+
* - Issue creation and management
|
|
14
|
+
* - Custom field mapping
|
|
15
|
+
* - Sprint and epic support
|
|
16
|
+
*/
|
|
17
|
+
import { WorkConfig, Issue, IssueCreateOptions, IssueUpdateOptions, IssueFilters, Comment, Label, Milestone, MilestoneCreateOptions, FaberContext } from '../../common/types';
|
|
18
|
+
import { WorkProvider } from '../types';
|
|
19
|
+
/**
|
|
20
|
+
* Jira Issues provider
|
|
21
|
+
*
|
|
22
|
+
* Note: This is a stub implementation. Full Jira support requires:
|
|
23
|
+
* - Jira REST API v3 integration
|
|
24
|
+
* - JQL query support
|
|
25
|
+
* - ADF (Atlassian Document Format) for rich text
|
|
26
|
+
* - Project/board configuration
|
|
27
|
+
*/
|
|
28
|
+
export declare class JiraWorkProvider implements WorkProvider {
|
|
29
|
+
readonly platform: "jira";
|
|
30
|
+
private baseUrl;
|
|
31
|
+
private projectKey;
|
|
32
|
+
constructor(config: WorkConfig);
|
|
33
|
+
/** Get the API base URL */
|
|
34
|
+
protected getBaseUrl(): string;
|
|
35
|
+
/** Get the project key for API calls */
|
|
36
|
+
protected getProjectKey(): string;
|
|
37
|
+
private notImplemented;
|
|
38
|
+
createIssue(_options: IssueCreateOptions): Promise<Issue>;
|
|
39
|
+
fetchIssue(_issueId: string | number): Promise<Issue>;
|
|
40
|
+
updateIssue(_issueId: string | number, _options: IssueUpdateOptions): Promise<Issue>;
|
|
41
|
+
closeIssue(_issueId: string | number): Promise<Issue>;
|
|
42
|
+
reopenIssue(_issueId: string | number): Promise<Issue>;
|
|
43
|
+
searchIssues(_query: string, _filters?: IssueFilters): Promise<Issue[]>;
|
|
44
|
+
assignIssue(_issueId: string | number, _assignee: string): Promise<Issue>;
|
|
45
|
+
unassignIssue(_issueId: string | number): Promise<Issue>;
|
|
46
|
+
createComment(_issueId: string | number, _body: string, _faberContext?: FaberContext): Promise<Comment>;
|
|
47
|
+
listComments(_issueId: string | number, _options?: {
|
|
48
|
+
limit?: number;
|
|
49
|
+
since?: string;
|
|
50
|
+
}): Promise<Comment[]>;
|
|
51
|
+
addLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
|
|
52
|
+
removeLabels(_issueId: string | number, _labels: string[]): Promise<void>;
|
|
53
|
+
setLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
|
|
54
|
+
listLabels(_issueId?: string | number): Promise<Label[]>;
|
|
55
|
+
createMilestone(_options: MilestoneCreateOptions): Promise<Milestone>;
|
|
56
|
+
setMilestone(_issueId: string | number, _milestone: string): Promise<Issue>;
|
|
57
|
+
removeMilestone(_issueId: string | number): Promise<Issue>;
|
|
58
|
+
listMilestones(_state?: 'open' | 'closed' | 'all'): Promise<Milestone[]>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=jira.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../src/work/providers/jira.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,UAAU;IAY9B,2BAA2B;IAC3B,SAAS,CAAC,UAAU,IAAI,MAAM;IAI9B,wCAAwC;IACxC,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC,OAAO,CAAC,cAAc;IAQhB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;IAIzD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIrD,WAAW,CACf,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,KAAK,CAAC;IAIX,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIrD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAItD,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,KAAK,EAAE,CAAC;IAIb,WAAW,CACf,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;IAIX,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIxD,aAAa,CACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,YAAY,GAC3B,OAAO,CAAC,OAAO,CAAC;IAIb,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,OAAO,EAAE,CAAC;IAIf,SAAS,CACb,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,KAAK,EAAE,CAAC;IAIb,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC;IAIV,SAAS,CACb,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,KAAK,EAAE,CAAC;IAIb,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIxD,eAAe,CACnB,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,SAAS,CAAC;IAIf,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,CAAC;IAIX,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAI1D,cAAc,CAClB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GACjC,OAAO,CAAC,SAAS,EAAE,CAAC;CAGxB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fractary/core - Jira Work Provider
|
|
4
|
+
*
|
|
5
|
+
* ⚠️ STUB IMPLEMENTATION - NOT YET FUNCTIONAL
|
|
6
|
+
*
|
|
7
|
+
* This provider is included for future compatibility but is not currently implemented.
|
|
8
|
+
* All methods will throw ProviderError when called.
|
|
9
|
+
*
|
|
10
|
+
* Use GitHubWorkProvider for a fully functional work tracking provider.
|
|
11
|
+
*
|
|
12
|
+
* Future implementation will include:
|
|
13
|
+
* - Jira Cloud REST API v3 integration
|
|
14
|
+
* - Issue creation and management
|
|
15
|
+
* - Custom field mapping
|
|
16
|
+
* - Sprint and epic support
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.JiraWorkProvider = void 0;
|
|
20
|
+
const errors_1 = require("../../common/errors");
|
|
21
|
+
/**
|
|
22
|
+
* Jira Issues provider
|
|
23
|
+
*
|
|
24
|
+
* Note: This is a stub implementation. Full Jira support requires:
|
|
25
|
+
* - Jira REST API v3 integration
|
|
26
|
+
* - JQL query support
|
|
27
|
+
* - ADF (Atlassian Document Format) for rich text
|
|
28
|
+
* - Project/board configuration
|
|
29
|
+
*/
|
|
30
|
+
class JiraWorkProvider {
|
|
31
|
+
platform = 'jira';
|
|
32
|
+
// Stored for future API implementation
|
|
33
|
+
baseUrl;
|
|
34
|
+
projectKey;
|
|
35
|
+
constructor(config) {
|
|
36
|
+
if (!config.project) {
|
|
37
|
+
throw new errors_1.ProviderError('jira', 'init', 'Jira work provider requires project in config');
|
|
38
|
+
}
|
|
39
|
+
this.baseUrl = ''; // TODO: Load from config
|
|
40
|
+
this.projectKey = config.project;
|
|
41
|
+
}
|
|
42
|
+
/** Get the API base URL */
|
|
43
|
+
getBaseUrl() {
|
|
44
|
+
return this.baseUrl;
|
|
45
|
+
}
|
|
46
|
+
/** Get the project key for API calls */
|
|
47
|
+
getProjectKey() {
|
|
48
|
+
return this.projectKey;
|
|
49
|
+
}
|
|
50
|
+
notImplemented(operation) {
|
|
51
|
+
throw new errors_1.ProviderError('jira', operation, `Jira ${operation} not yet implemented`);
|
|
52
|
+
}
|
|
53
|
+
async createIssue(_options) {
|
|
54
|
+
this.notImplemented('createIssue');
|
|
55
|
+
}
|
|
56
|
+
async fetchIssue(_issueId) {
|
|
57
|
+
this.notImplemented('fetchIssue');
|
|
58
|
+
}
|
|
59
|
+
async updateIssue(_issueId, _options) {
|
|
60
|
+
this.notImplemented('updateIssue');
|
|
61
|
+
}
|
|
62
|
+
async closeIssue(_issueId) {
|
|
63
|
+
this.notImplemented('closeIssue');
|
|
64
|
+
}
|
|
65
|
+
async reopenIssue(_issueId) {
|
|
66
|
+
this.notImplemented('reopenIssue');
|
|
67
|
+
}
|
|
68
|
+
async searchIssues(_query, _filters) {
|
|
69
|
+
this.notImplemented('searchIssues');
|
|
70
|
+
}
|
|
71
|
+
async assignIssue(_issueId, _assignee) {
|
|
72
|
+
this.notImplemented('assignIssue');
|
|
73
|
+
}
|
|
74
|
+
async unassignIssue(_issueId) {
|
|
75
|
+
this.notImplemented('unassignIssue');
|
|
76
|
+
}
|
|
77
|
+
async createComment(_issueId, _body, _faberContext) {
|
|
78
|
+
this.notImplemented('createComment');
|
|
79
|
+
}
|
|
80
|
+
async listComments(_issueId, _options) {
|
|
81
|
+
this.notImplemented('listComments');
|
|
82
|
+
}
|
|
83
|
+
async addLabels(_issueId, _labels) {
|
|
84
|
+
this.notImplemented('addLabels');
|
|
85
|
+
}
|
|
86
|
+
async removeLabels(_issueId, _labels) {
|
|
87
|
+
this.notImplemented('removeLabels');
|
|
88
|
+
}
|
|
89
|
+
async setLabels(_issueId, _labels) {
|
|
90
|
+
this.notImplemented('setLabels');
|
|
91
|
+
}
|
|
92
|
+
async listLabels(_issueId) {
|
|
93
|
+
this.notImplemented('listLabels');
|
|
94
|
+
}
|
|
95
|
+
async createMilestone(_options) {
|
|
96
|
+
this.notImplemented('createMilestone');
|
|
97
|
+
}
|
|
98
|
+
async setMilestone(_issueId, _milestone) {
|
|
99
|
+
this.notImplemented('setMilestone');
|
|
100
|
+
}
|
|
101
|
+
async removeMilestone(_issueId) {
|
|
102
|
+
this.notImplemented('removeMilestone');
|
|
103
|
+
}
|
|
104
|
+
async listMilestones(_state) {
|
|
105
|
+
this.notImplemented('listMilestones');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.JiraWorkProvider = JiraWorkProvider;
|
|
109
|
+
//# sourceMappingURL=jira.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../src/work/providers/jira.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAeH,gDAAoD;AAEpD;;;;;;;;GAQG;AACH,MAAa,gBAAgB;IAClB,QAAQ,GAAG,MAAe,CAAC;IACpC,uCAAuC;IAC/B,OAAO,CAAS;IAChB,UAAU,CAAS;IAE3B,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,sBAAa,CACrB,MAAM,EACN,MAAM,EACN,+CAA+C,CAChD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,yBAAyB;QAC5C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,2BAA2B;IACjB,UAAU;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,wCAAwC;IAC9B,aAAa;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,cAAc,CAAC,SAAiB;QACtC,MAAM,IAAI,sBAAa,CACrB,MAAM,EACN,SAAS,EACT,QAAQ,SAAS,sBAAsB,CACxC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAA4B;QAC5C,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAyB;QACxC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAyB,EACzB,QAA4B;QAE5B,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAyB;QACxC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAyB;QACzC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,MAAc,EACd,QAAuB;QAEvB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAyB,EACzB,SAAiB;QAEjB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAyB;QAC3C,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,QAAyB,EACzB,KAAa,EACb,aAA4B;QAE5B,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAAyB,EACzB,QAA6C;QAE7C,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,QAAyB,EACzB,OAAiB;QAEjB,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAAyB,EACzB,OAAiB;QAEjB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,QAAyB,EACzB,OAAiB;QAEjB,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAA0B;QACzC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,QAAgC;QAEhC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAAyB,EACzB,UAAkB;QAElB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAyB;QAC7C,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAAkC;QAElC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;CACF;AA3ID,4CA2IC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fractary/core - Linear Work Provider
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ STUB IMPLEMENTATION - NOT YET FUNCTIONAL
|
|
5
|
+
*
|
|
6
|
+
* This provider is included for future compatibility but is not currently implemented.
|
|
7
|
+
* All methods will throw ProviderError when called.
|
|
8
|
+
*
|
|
9
|
+
* Use GitHubWorkProvider for a fully functional work tracking provider.
|
|
10
|
+
*
|
|
11
|
+
* Future implementation will include:
|
|
12
|
+
* - Linear GraphQL API integration
|
|
13
|
+
* - Issue creation and management
|
|
14
|
+
* - Project and team support
|
|
15
|
+
* - Cycle management
|
|
16
|
+
*/
|
|
17
|
+
import { WorkConfig, Issue, IssueCreateOptions, IssueUpdateOptions, IssueFilters, Comment, Label, Milestone, MilestoneCreateOptions, FaberContext } from '../../common/types';
|
|
18
|
+
import { WorkProvider } from '../types';
|
|
19
|
+
/**
|
|
20
|
+
* Linear Issues provider
|
|
21
|
+
*
|
|
22
|
+
* Note: This is a stub implementation. Full Linear support requires:
|
|
23
|
+
* - Linear GraphQL API integration
|
|
24
|
+
* - Team/workspace configuration
|
|
25
|
+
* - Cycle support (Linear's equivalent of milestones)
|
|
26
|
+
* - Label management
|
|
27
|
+
*/
|
|
28
|
+
export declare class LinearWorkProvider implements WorkProvider {
|
|
29
|
+
readonly platform: "linear";
|
|
30
|
+
private teamId;
|
|
31
|
+
constructor(config: WorkConfig);
|
|
32
|
+
/** Get the team ID for API calls */
|
|
33
|
+
protected getTeamId(): string;
|
|
34
|
+
private notImplemented;
|
|
35
|
+
createIssue(_options: IssueCreateOptions): Promise<Issue>;
|
|
36
|
+
fetchIssue(_issueId: string | number): Promise<Issue>;
|
|
37
|
+
updateIssue(_issueId: string | number, _options: IssueUpdateOptions): Promise<Issue>;
|
|
38
|
+
closeIssue(_issueId: string | number): Promise<Issue>;
|
|
39
|
+
reopenIssue(_issueId: string | number): Promise<Issue>;
|
|
40
|
+
searchIssues(_query: string, _filters?: IssueFilters): Promise<Issue[]>;
|
|
41
|
+
assignIssue(_issueId: string | number, _assignee: string): Promise<Issue>;
|
|
42
|
+
unassignIssue(_issueId: string | number): Promise<Issue>;
|
|
43
|
+
createComment(_issueId: string | number, _body: string, _faberContext?: FaberContext): Promise<Comment>;
|
|
44
|
+
listComments(_issueId: string | number, _options?: {
|
|
45
|
+
limit?: number;
|
|
46
|
+
since?: string;
|
|
47
|
+
}): Promise<Comment[]>;
|
|
48
|
+
addLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
|
|
49
|
+
removeLabels(_issueId: string | number, _labels: string[]): Promise<void>;
|
|
50
|
+
setLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
|
|
51
|
+
listLabels(_issueId?: string | number): Promise<Label[]>;
|
|
52
|
+
createMilestone(_options: MilestoneCreateOptions): Promise<Milestone>;
|
|
53
|
+
setMilestone(_issueId: string | number, _milestone: string): Promise<Issue>;
|
|
54
|
+
removeMilestone(_issueId: string | number): Promise<Issue>;
|
|
55
|
+
listMilestones(_state?: 'open' | 'closed' | 'all'): Promise<Milestone[]>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=linear.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/work/providers/linear.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IAEtC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,UAAU;IAW9B,oCAAoC;IACpC,SAAS,CAAC,SAAS,IAAI,MAAM;IAI7B,OAAO,CAAC,cAAc;IAQhB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;IAIzD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIrD,WAAW,CACf,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,KAAK,CAAC;IAIX,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIrD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAItD,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,KAAK,EAAE,CAAC;IAIb,WAAW,CACf,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;IAIX,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIxD,aAAa,CACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,YAAY,GAC3B,OAAO,CAAC,OAAO,CAAC;IAIb,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,OAAO,EAAE,CAAC;IAIf,SAAS,CACb,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,KAAK,EAAE,CAAC;IAIb,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC;IAIV,SAAS,CACb,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,KAAK,EAAE,CAAC;IAIb,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIxD,eAAe,CACnB,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,SAAS,CAAC;IAIf,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,CAAC;IAIX,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAI1D,cAAc,CAClB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GACjC,OAAO,CAAC,SAAS,EAAE,CAAC;CAGxB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fractary/core - Linear Work Provider
|
|
4
|
+
*
|
|
5
|
+
* ⚠️ STUB IMPLEMENTATION - NOT YET FUNCTIONAL
|
|
6
|
+
*
|
|
7
|
+
* This provider is included for future compatibility but is not currently implemented.
|
|
8
|
+
* All methods will throw ProviderError when called.
|
|
9
|
+
*
|
|
10
|
+
* Use GitHubWorkProvider for a fully functional work tracking provider.
|
|
11
|
+
*
|
|
12
|
+
* Future implementation will include:
|
|
13
|
+
* - Linear GraphQL API integration
|
|
14
|
+
* - Issue creation and management
|
|
15
|
+
* - Project and team support
|
|
16
|
+
* - Cycle management
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.LinearWorkProvider = void 0;
|
|
20
|
+
const errors_1 = require("../../common/errors");
|
|
21
|
+
/**
|
|
22
|
+
* Linear Issues provider
|
|
23
|
+
*
|
|
24
|
+
* Note: This is a stub implementation. Full Linear support requires:
|
|
25
|
+
* - Linear GraphQL API integration
|
|
26
|
+
* - Team/workspace configuration
|
|
27
|
+
* - Cycle support (Linear's equivalent of milestones)
|
|
28
|
+
* - Label management
|
|
29
|
+
*/
|
|
30
|
+
class LinearWorkProvider {
|
|
31
|
+
platform = 'linear';
|
|
32
|
+
// Stored for future API implementation
|
|
33
|
+
teamId;
|
|
34
|
+
constructor(config) {
|
|
35
|
+
if (!config.project) {
|
|
36
|
+
throw new errors_1.ProviderError('linear', 'init', 'Linear work provider requires project (team_id) in config');
|
|
37
|
+
}
|
|
38
|
+
this.teamId = config.project;
|
|
39
|
+
}
|
|
40
|
+
/** Get the team ID for API calls */
|
|
41
|
+
getTeamId() {
|
|
42
|
+
return this.teamId;
|
|
43
|
+
}
|
|
44
|
+
notImplemented(operation) {
|
|
45
|
+
throw new errors_1.ProviderError('linear', operation, `Linear ${operation} not yet implemented`);
|
|
46
|
+
}
|
|
47
|
+
async createIssue(_options) {
|
|
48
|
+
this.notImplemented('createIssue');
|
|
49
|
+
}
|
|
50
|
+
async fetchIssue(_issueId) {
|
|
51
|
+
this.notImplemented('fetchIssue');
|
|
52
|
+
}
|
|
53
|
+
async updateIssue(_issueId, _options) {
|
|
54
|
+
this.notImplemented('updateIssue');
|
|
55
|
+
}
|
|
56
|
+
async closeIssue(_issueId) {
|
|
57
|
+
this.notImplemented('closeIssue');
|
|
58
|
+
}
|
|
59
|
+
async reopenIssue(_issueId) {
|
|
60
|
+
this.notImplemented('reopenIssue');
|
|
61
|
+
}
|
|
62
|
+
async searchIssues(_query, _filters) {
|
|
63
|
+
this.notImplemented('searchIssues');
|
|
64
|
+
}
|
|
65
|
+
async assignIssue(_issueId, _assignee) {
|
|
66
|
+
this.notImplemented('assignIssue');
|
|
67
|
+
}
|
|
68
|
+
async unassignIssue(_issueId) {
|
|
69
|
+
this.notImplemented('unassignIssue');
|
|
70
|
+
}
|
|
71
|
+
async createComment(_issueId, _body, _faberContext) {
|
|
72
|
+
this.notImplemented('createComment');
|
|
73
|
+
}
|
|
74
|
+
async listComments(_issueId, _options) {
|
|
75
|
+
this.notImplemented('listComments');
|
|
76
|
+
}
|
|
77
|
+
async addLabels(_issueId, _labels) {
|
|
78
|
+
this.notImplemented('addLabels');
|
|
79
|
+
}
|
|
80
|
+
async removeLabels(_issueId, _labels) {
|
|
81
|
+
this.notImplemented('removeLabels');
|
|
82
|
+
}
|
|
83
|
+
async setLabels(_issueId, _labels) {
|
|
84
|
+
this.notImplemented('setLabels');
|
|
85
|
+
}
|
|
86
|
+
async listLabels(_issueId) {
|
|
87
|
+
this.notImplemented('listLabels');
|
|
88
|
+
}
|
|
89
|
+
async createMilestone(_options) {
|
|
90
|
+
this.notImplemented('createMilestone');
|
|
91
|
+
}
|
|
92
|
+
async setMilestone(_issueId, _milestone) {
|
|
93
|
+
this.notImplemented('setMilestone');
|
|
94
|
+
}
|
|
95
|
+
async removeMilestone(_issueId) {
|
|
96
|
+
this.notImplemented('removeMilestone');
|
|
97
|
+
}
|
|
98
|
+
async listMilestones(_state) {
|
|
99
|
+
this.notImplemented('listMilestones');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.LinearWorkProvider = LinearWorkProvider;
|
|
103
|
+
//# sourceMappingURL=linear.js.map
|