@fractary/faber 0.1.1 → 1.0.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 (261) hide show
  1. package/README.md +366 -76
  2. package/dist/cli/commands/logs.d.ts +6 -0
  3. package/dist/cli/commands/logs.d.ts.map +1 -0
  4. package/dist/cli/commands/logs.js +215 -0
  5. package/dist/cli/commands/logs.js.map +1 -0
  6. package/dist/cli/commands/repo.d.ts +6 -0
  7. package/dist/cli/commands/repo.d.ts.map +1 -0
  8. package/dist/cli/commands/repo.js +260 -0
  9. package/dist/cli/commands/repo.js.map +1 -0
  10. package/dist/cli/commands/spec.d.ts +6 -0
  11. package/dist/cli/commands/spec.d.ts.map +1 -0
  12. package/dist/cli/commands/spec.js +184 -0
  13. package/dist/cli/commands/spec.js.map +1 -0
  14. package/dist/cli/commands/work.d.ts +6 -0
  15. package/dist/cli/commands/work.d.ts.map +1 -0
  16. package/dist/cli/commands/work.js +113 -0
  17. package/dist/cli/commands/work.js.map +1 -0
  18. package/dist/cli/commands/workflow.d.ts +6 -0
  19. package/dist/cli/commands/workflow.d.ts.map +1 -0
  20. package/dist/cli/commands/workflow.js +214 -0
  21. package/dist/cli/commands/workflow.js.map +1 -0
  22. package/dist/cli/index.d.ts +8 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +27 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/config.d.ts +814 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +438 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/errors.d.ts +264 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +491 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/index.d.ts +21 -16
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +23 -36
  37. package/dist/index.js.map +1 -1
  38. package/dist/logs/index.d.ts +8 -0
  39. package/dist/logs/index.d.ts.map +1 -0
  40. package/dist/{types → logs}/index.js +7 -11
  41. package/dist/logs/index.js.map +1 -0
  42. package/dist/logs/manager.d.ts +97 -0
  43. package/dist/logs/manager.d.ts.map +1 -0
  44. package/dist/logs/manager.js +581 -0
  45. package/dist/logs/manager.js.map +1 -0
  46. package/dist/logs/types.d.ts +45 -0
  47. package/dist/logs/types.d.ts.map +1 -0
  48. package/dist/logs/types.js +8 -0
  49. package/dist/logs/types.js.map +1 -0
  50. package/dist/repo/git.d.ts +182 -0
  51. package/dist/repo/git.d.ts.map +1 -0
  52. package/dist/repo/git.js +496 -0
  53. package/dist/repo/git.js.map +1 -0
  54. package/dist/repo/index.d.ts +10 -0
  55. package/dist/repo/index.d.ts.map +1 -0
  56. package/dist/repo/index.js +29 -0
  57. package/dist/repo/index.js.map +1 -0
  58. package/dist/repo/manager.d.ts +179 -0
  59. package/dist/repo/manager.d.ts.map +1 -0
  60. package/dist/repo/manager.js +433 -0
  61. package/dist/repo/manager.js.map +1 -0
  62. package/dist/repo/providers/bitbucket.d.ts +38 -0
  63. package/dist/repo/providers/bitbucket.d.ts.map +1 -0
  64. package/dist/repo/providers/bitbucket.js +76 -0
  65. package/dist/repo/providers/bitbucket.js.map +1 -0
  66. package/dist/repo/providers/github.d.ts +30 -0
  67. package/dist/repo/providers/github.d.ts.map +1 -0
  68. package/dist/repo/providers/github.js +311 -0
  69. package/dist/repo/providers/github.js.map +1 -0
  70. package/dist/repo/providers/gitlab.d.ts +37 -0
  71. package/dist/repo/providers/gitlab.d.ts.map +1 -0
  72. package/dist/repo/providers/gitlab.js +74 -0
  73. package/dist/repo/providers/gitlab.js.map +1 -0
  74. package/dist/repo/providers/index.d.ts +9 -0
  75. package/dist/repo/providers/index.d.ts.map +1 -0
  76. package/dist/repo/providers/index.js +15 -0
  77. package/dist/repo/providers/index.js.map +1 -0
  78. package/dist/repo/types.d.ts +47 -0
  79. package/dist/repo/types.d.ts.map +1 -0
  80. package/dist/repo/types.js +8 -0
  81. package/dist/repo/types.js.map +1 -0
  82. package/dist/spec/index.d.ts +9 -0
  83. package/dist/spec/index.d.ts.map +1 -0
  84. package/dist/spec/index.js +30 -0
  85. package/dist/spec/index.js.map +1 -0
  86. package/dist/spec/manager.d.ts +98 -0
  87. package/dist/spec/manager.d.ts.map +1 -0
  88. package/dist/spec/manager.js +650 -0
  89. package/dist/spec/manager.js.map +1 -0
  90. package/dist/spec/templates.d.ts +28 -0
  91. package/dist/spec/templates.d.ts.map +1 -0
  92. package/dist/spec/templates.js +357 -0
  93. package/dist/spec/templates.js.map +1 -0
  94. package/dist/spec/types.d.ts +53 -0
  95. package/dist/spec/types.d.ts.map +1 -0
  96. package/dist/spec/types.js +8 -0
  97. package/dist/spec/types.js.map +1 -0
  98. package/dist/state/index.d.ts +8 -0
  99. package/dist/state/index.d.ts.map +1 -0
  100. package/dist/state/index.js +26 -0
  101. package/dist/state/index.js.map +1 -0
  102. package/dist/state/manager.d.ts +132 -0
  103. package/dist/state/manager.d.ts.map +1 -0
  104. package/dist/state/manager.js +517 -0
  105. package/dist/state/manager.js.map +1 -0
  106. package/dist/state/types.d.ts +46 -0
  107. package/dist/state/types.d.ts.map +1 -0
  108. package/dist/state/types.js +8 -0
  109. package/dist/state/types.js.map +1 -0
  110. package/dist/storage/codex-adapter.d.ts +62 -0
  111. package/dist/storage/codex-adapter.d.ts.map +1 -0
  112. package/dist/storage/codex-adapter.js +177 -0
  113. package/dist/storage/codex-adapter.js.map +1 -0
  114. package/dist/storage/index.d.ts +9 -0
  115. package/dist/storage/index.d.ts.map +1 -0
  116. package/dist/storage/index.js +15 -0
  117. package/dist/storage/index.js.map +1 -0
  118. package/dist/storage/local.d.ts +42 -0
  119. package/dist/storage/local.d.ts.map +1 -0
  120. package/dist/storage/local.js +137 -0
  121. package/dist/storage/local.js.map +1 -0
  122. package/dist/types.d.ts +603 -0
  123. package/dist/types.d.ts.map +1 -0
  124. package/dist/types.js +8 -0
  125. package/dist/types.js.map +1 -0
  126. package/dist/work/index.d.ts +8 -0
  127. package/dist/work/index.d.ts.map +1 -0
  128. package/dist/work/index.js +26 -0
  129. package/dist/work/index.js.map +1 -0
  130. package/dist/work/manager.d.ts +112 -0
  131. package/dist/work/manager.d.ts.map +1 -0
  132. package/dist/work/manager.js +227 -0
  133. package/dist/work/manager.js.map +1 -0
  134. package/dist/work/providers/github.d.ts +40 -0
  135. package/dist/work/providers/github.d.ts.map +1 -0
  136. package/dist/work/providers/github.js +299 -0
  137. package/dist/work/providers/github.js.map +1 -0
  138. package/dist/work/providers/jira.d.ts +50 -0
  139. package/dist/work/providers/jira.d.ts.map +1 -0
  140. package/dist/work/providers/jira.js +99 -0
  141. package/dist/work/providers/jira.js.map +1 -0
  142. package/dist/work/providers/linear.d.ts +47 -0
  143. package/dist/work/providers/linear.d.ts.map +1 -0
  144. package/dist/work/providers/linear.js +93 -0
  145. package/dist/work/providers/linear.js.map +1 -0
  146. package/dist/work/types.d.ts +41 -0
  147. package/dist/work/types.d.ts.map +1 -0
  148. package/dist/work/types.js +8 -0
  149. package/dist/work/types.js.map +1 -0
  150. package/dist/workflow/faber.d.ts +107 -0
  151. package/dist/workflow/faber.d.ts.map +1 -0
  152. package/dist/workflow/faber.js +606 -0
  153. package/dist/workflow/faber.js.map +1 -0
  154. package/dist/workflow/index.d.ts +8 -0
  155. package/dist/workflow/index.d.ts.map +1 -0
  156. package/dist/workflow/index.js +26 -0
  157. package/dist/workflow/index.js.map +1 -0
  158. package/dist/workflow/types.d.ts +54 -0
  159. package/dist/workflow/types.d.ts.map +1 -0
  160. package/dist/workflow/types.js +8 -0
  161. package/dist/workflow/types.js.map +1 -0
  162. package/package.json +42 -28
  163. package/dist/api.d.ts +0 -81
  164. package/dist/api.d.ts.map +0 -1
  165. package/dist/api.js +0 -261
  166. package/dist/api.js.map +0 -1
  167. package/dist/bindings/claude-code/transformer.d.ts +0 -55
  168. package/dist/bindings/claude-code/transformer.d.ts.map +0 -1
  169. package/dist/bindings/claude-code/transformer.js +0 -271
  170. package/dist/bindings/claude-code/transformer.js.map +0 -1
  171. package/dist/bindings/index.d.ts +0 -21
  172. package/dist/bindings/index.d.ts.map +0 -1
  173. package/dist/bindings/index.js +0 -43
  174. package/dist/bindings/index.js.map +0 -1
  175. package/dist/core/concepts/base.d.ts +0 -89
  176. package/dist/core/concepts/base.d.ts.map +0 -1
  177. package/dist/core/concepts/base.js +0 -230
  178. package/dist/core/concepts/base.js.map +0 -1
  179. package/dist/core/concepts/eval.d.ts +0 -90
  180. package/dist/core/concepts/eval.d.ts.map +0 -1
  181. package/dist/core/concepts/eval.js +0 -118
  182. package/dist/core/concepts/eval.js.map +0 -1
  183. package/dist/core/concepts/index.d.ts +0 -9
  184. package/dist/core/concepts/index.d.ts.map +0 -1
  185. package/dist/core/concepts/index.js +0 -36
  186. package/dist/core/concepts/index.js.map +0 -1
  187. package/dist/core/concepts/role.d.ts +0 -19
  188. package/dist/core/concepts/role.d.ts.map +0 -1
  189. package/dist/core/concepts/role.js +0 -227
  190. package/dist/core/concepts/role.js.map +0 -1
  191. package/dist/core/concepts/team.d.ts +0 -57
  192. package/dist/core/concepts/team.d.ts.map +0 -1
  193. package/dist/core/concepts/team.js +0 -106
  194. package/dist/core/concepts/team.js.map +0 -1
  195. package/dist/core/concepts/tool.d.ts +0 -43
  196. package/dist/core/concepts/tool.d.ts.map +0 -1
  197. package/dist/core/concepts/tool.js +0 -104
  198. package/dist/core/concepts/tool.js.map +0 -1
  199. package/dist/core/concepts/workflow.d.ts +0 -87
  200. package/dist/core/concepts/workflow.d.ts.map +0 -1
  201. package/dist/core/concepts/workflow.js +0 -114
  202. package/dist/core/concepts/workflow.js.map +0 -1
  203. package/dist/core/config/index.d.ts +0 -34
  204. package/dist/core/config/index.d.ts.map +0 -1
  205. package/dist/core/config/index.js +0 -80
  206. package/dist/core/config/index.js.map +0 -1
  207. package/dist/core/config/loader.d.ts +0 -53
  208. package/dist/core/config/loader.d.ts.map +0 -1
  209. package/dist/core/config/loader.js +0 -234
  210. package/dist/core/config/loader.js.map +0 -1
  211. package/dist/core/contexts/index.d.ts +0 -36
  212. package/dist/core/contexts/index.d.ts.map +0 -1
  213. package/dist/core/contexts/index.js +0 -75
  214. package/dist/core/contexts/index.js.map +0 -1
  215. package/dist/core/contexts/loader.d.ts +0 -66
  216. package/dist/core/contexts/loader.d.ts.map +0 -1
  217. package/dist/core/contexts/loader.js +0 -261
  218. package/dist/core/contexts/loader.js.map +0 -1
  219. package/dist/core/overlays/index.d.ts +0 -31
  220. package/dist/core/overlays/index.d.ts.map +0 -1
  221. package/dist/core/overlays/index.js +0 -82
  222. package/dist/core/overlays/index.js.map +0 -1
  223. package/dist/core/overlays/resolver.d.ts +0 -65
  224. package/dist/core/overlays/resolver.d.ts.map +0 -1
  225. package/dist/core/overlays/resolver.js +0 -249
  226. package/dist/core/overlays/resolver.js.map +0 -1
  227. package/dist/types/bindings.d.ts +0 -59
  228. package/dist/types/bindings.d.ts.map +0 -1
  229. package/dist/types/bindings.js +0 -6
  230. package/dist/types/bindings.js.map +0 -1
  231. package/dist/types/concepts.d.ts +0 -131
  232. package/dist/types/concepts.d.ts.map +0 -1
  233. package/dist/types/concepts.js +0 -29
  234. package/dist/types/concepts.js.map +0 -1
  235. package/dist/types/config.d.ts +0 -42
  236. package/dist/types/config.d.ts.map +0 -1
  237. package/dist/types/config.js +0 -6
  238. package/dist/types/config.js.map +0 -1
  239. package/dist/types/contexts.d.ts +0 -59
  240. package/dist/types/contexts.d.ts.map +0 -1
  241. package/dist/types/contexts.js +0 -17
  242. package/dist/types/contexts.js.map +0 -1
  243. package/dist/types/index.d.ts +0 -17
  244. package/dist/types/index.d.ts.map +0 -1
  245. package/dist/types/index.js.map +0 -1
  246. package/dist/types/overlays.d.ts +0 -28
  247. package/dist/types/overlays.d.ts.map +0 -1
  248. package/dist/types/overlays.js +0 -15
  249. package/dist/types/overlays.js.map +0 -1
  250. package/dist/utils/file-system.d.ts +0 -40
  251. package/dist/utils/file-system.d.ts.map +0 -1
  252. package/dist/utils/file-system.js +0 -105
  253. package/dist/utils/file-system.js.map +0 -1
  254. package/dist/utils/template.d.ts +0 -28
  255. package/dist/utils/template.d.ts.map +0 -1
  256. package/dist/utils/template.js +0 -107
  257. package/dist/utils/template.js.map +0 -1
  258. package/dist/utils/validation.d.ts +0 -42
  259. package/dist/utils/validation.d.ts.map +0 -1
  260. package/dist/utils/validation.js +0 -94
  261. package/dist/utils/validation.js.map +0 -1
@@ -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("../../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,50 @@
1
+ /**
2
+ * @fractary/faber - Jira Work Provider
3
+ *
4
+ * Work tracking via Jira REST API.
5
+ * TODO: Full implementation
6
+ */
7
+ import { WorkConfig, Issue, IssueCreateOptions, IssueUpdateOptions, IssueFilters, Comment, Label, Milestone, MilestoneCreateOptions, FaberContext } from '../../types';
8
+ import { WorkProvider } from '../types';
9
+ /**
10
+ * Jira Issues provider
11
+ *
12
+ * Note: This is a stub implementation. Full Jira support requires:
13
+ * - Jira REST API v3 integration
14
+ * - JQL query support
15
+ * - ADF (Atlassian Document Format) for rich text
16
+ * - Project/board configuration
17
+ */
18
+ export declare class JiraWorkProvider implements WorkProvider {
19
+ readonly platform: "jira";
20
+ private baseUrl;
21
+ private projectKey;
22
+ constructor(config: WorkConfig);
23
+ /** Get the API base URL */
24
+ protected getBaseUrl(): string;
25
+ /** Get the project key for API calls */
26
+ protected getProjectKey(): string;
27
+ private notImplemented;
28
+ createIssue(_options: IssueCreateOptions): Promise<Issue>;
29
+ fetchIssue(_issueId: string | number): Promise<Issue>;
30
+ updateIssue(_issueId: string | number, _options: IssueUpdateOptions): Promise<Issue>;
31
+ closeIssue(_issueId: string | number): Promise<Issue>;
32
+ reopenIssue(_issueId: string | number): Promise<Issue>;
33
+ searchIssues(_query: string, _filters?: IssueFilters): Promise<Issue[]>;
34
+ assignIssue(_issueId: string | number, _assignee: string): Promise<Issue>;
35
+ unassignIssue(_issueId: string | number): Promise<Issue>;
36
+ createComment(_issueId: string | number, _body: string, _faberContext?: FaberContext): Promise<Comment>;
37
+ listComments(_issueId: string | number, _options?: {
38
+ limit?: number;
39
+ since?: string;
40
+ }): Promise<Comment[]>;
41
+ addLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
42
+ removeLabels(_issueId: string | number, _labels: string[]): Promise<void>;
43
+ setLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
44
+ listLabels(_issueId?: string | number): Promise<Label[]>;
45
+ createMilestone(_options: MilestoneCreateOptions): Promise<Milestone>;
46
+ setMilestone(_issueId: string | number, _milestone: string): Promise<Issue>;
47
+ removeMilestone(_issueId: string | number): Promise<Issue>;
48
+ listMilestones(_state?: 'open' | 'closed' | 'all'): Promise<Milestone[]>;
49
+ }
50
+ //# 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;;;;;GAKG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,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,99 @@
1
+ "use strict";
2
+ /**
3
+ * @fractary/faber - Jira Work Provider
4
+ *
5
+ * Work tracking via Jira REST API.
6
+ * TODO: Full implementation
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.JiraWorkProvider = void 0;
10
+ const errors_1 = require("../../errors");
11
+ /**
12
+ * Jira Issues provider
13
+ *
14
+ * Note: This is a stub implementation. Full Jira support requires:
15
+ * - Jira REST API v3 integration
16
+ * - JQL query support
17
+ * - ADF (Atlassian Document Format) for rich text
18
+ * - Project/board configuration
19
+ */
20
+ class JiraWorkProvider {
21
+ platform = 'jira';
22
+ // Stored for future API implementation
23
+ baseUrl;
24
+ projectKey;
25
+ constructor(config) {
26
+ if (!config.project) {
27
+ throw new errors_1.ProviderError('jira', 'init', 'Jira work provider requires project in config');
28
+ }
29
+ this.baseUrl = ''; // TODO: Load from config
30
+ this.projectKey = config.project;
31
+ }
32
+ /** Get the API base URL */
33
+ getBaseUrl() {
34
+ return this.baseUrl;
35
+ }
36
+ /** Get the project key for API calls */
37
+ getProjectKey() {
38
+ return this.projectKey;
39
+ }
40
+ notImplemented(operation) {
41
+ throw new errors_1.ProviderError('jira', operation, `Jira ${operation} not yet implemented`);
42
+ }
43
+ async createIssue(_options) {
44
+ this.notImplemented('createIssue');
45
+ }
46
+ async fetchIssue(_issueId) {
47
+ this.notImplemented('fetchIssue');
48
+ }
49
+ async updateIssue(_issueId, _options) {
50
+ this.notImplemented('updateIssue');
51
+ }
52
+ async closeIssue(_issueId) {
53
+ this.notImplemented('closeIssue');
54
+ }
55
+ async reopenIssue(_issueId) {
56
+ this.notImplemented('reopenIssue');
57
+ }
58
+ async searchIssues(_query, _filters) {
59
+ this.notImplemented('searchIssues');
60
+ }
61
+ async assignIssue(_issueId, _assignee) {
62
+ this.notImplemented('assignIssue');
63
+ }
64
+ async unassignIssue(_issueId) {
65
+ this.notImplemented('unassignIssue');
66
+ }
67
+ async createComment(_issueId, _body, _faberContext) {
68
+ this.notImplemented('createComment');
69
+ }
70
+ async listComments(_issueId, _options) {
71
+ this.notImplemented('listComments');
72
+ }
73
+ async addLabels(_issueId, _labels) {
74
+ this.notImplemented('addLabels');
75
+ }
76
+ async removeLabels(_issueId, _labels) {
77
+ this.notImplemented('removeLabels');
78
+ }
79
+ async setLabels(_issueId, _labels) {
80
+ this.notImplemented('setLabels');
81
+ }
82
+ async listLabels(_issueId) {
83
+ this.notImplemented('listLabels');
84
+ }
85
+ async createMilestone(_options) {
86
+ this.notImplemented('createMilestone');
87
+ }
88
+ async setMilestone(_issueId, _milestone) {
89
+ this.notImplemented('setMilestone');
90
+ }
91
+ async removeMilestone(_issueId) {
92
+ this.notImplemented('removeMilestone');
93
+ }
94
+ async listMilestones(_state) {
95
+ this.notImplemented('listMilestones');
96
+ }
97
+ }
98
+ exports.JiraWorkProvider = JiraWorkProvider;
99
+ //# sourceMappingURL=jira.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../src/work/providers/jira.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @fractary/faber - Linear Work Provider
3
+ *
4
+ * Work tracking via Linear GraphQL API.
5
+ * TODO: Full implementation
6
+ */
7
+ import { WorkConfig, Issue, IssueCreateOptions, IssueUpdateOptions, IssueFilters, Comment, Label, Milestone, MilestoneCreateOptions, FaberContext } from '../../types';
8
+ import { WorkProvider } from '../types';
9
+ /**
10
+ * Linear Issues provider
11
+ *
12
+ * Note: This is a stub implementation. Full Linear support requires:
13
+ * - Linear GraphQL API integration
14
+ * - Team/workspace configuration
15
+ * - Cycle support (Linear's equivalent of milestones)
16
+ * - Label management
17
+ */
18
+ export declare class LinearWorkProvider implements WorkProvider {
19
+ readonly platform: "linear";
20
+ private teamId;
21
+ constructor(config: WorkConfig);
22
+ /** Get the team ID for API calls */
23
+ protected getTeamId(): string;
24
+ private notImplemented;
25
+ createIssue(_options: IssueCreateOptions): Promise<Issue>;
26
+ fetchIssue(_issueId: string | number): Promise<Issue>;
27
+ updateIssue(_issueId: string | number, _options: IssueUpdateOptions): Promise<Issue>;
28
+ closeIssue(_issueId: string | number): Promise<Issue>;
29
+ reopenIssue(_issueId: string | number): Promise<Issue>;
30
+ searchIssues(_query: string, _filters?: IssueFilters): Promise<Issue[]>;
31
+ assignIssue(_issueId: string | number, _assignee: string): Promise<Issue>;
32
+ unassignIssue(_issueId: string | number): Promise<Issue>;
33
+ createComment(_issueId: string | number, _body: string, _faberContext?: FaberContext): Promise<Comment>;
34
+ listComments(_issueId: string | number, _options?: {
35
+ limit?: number;
36
+ since?: string;
37
+ }): Promise<Comment[]>;
38
+ addLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
39
+ removeLabels(_issueId: string | number, _labels: string[]): Promise<void>;
40
+ setLabels(_issueId: string | number, _labels: string[]): Promise<Label[]>;
41
+ listLabels(_issueId?: string | number): Promise<Label[]>;
42
+ createMilestone(_options: MilestoneCreateOptions): Promise<Milestone>;
43
+ setMilestone(_issueId: string | number, _milestone: string): Promise<Issue>;
44
+ removeMilestone(_issueId: string | number): Promise<Issue>;
45
+ listMilestones(_state?: 'open' | 'closed' | 'all'): Promise<Milestone[]>;
46
+ }
47
+ //# 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;;;;;GAKG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,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,93 @@
1
+ "use strict";
2
+ /**
3
+ * @fractary/faber - Linear Work Provider
4
+ *
5
+ * Work tracking via Linear GraphQL API.
6
+ * TODO: Full implementation
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LinearWorkProvider = void 0;
10
+ const errors_1 = require("../../errors");
11
+ /**
12
+ * Linear Issues provider
13
+ *
14
+ * Note: This is a stub implementation. Full Linear support requires:
15
+ * - Linear GraphQL API integration
16
+ * - Team/workspace configuration
17
+ * - Cycle support (Linear's equivalent of milestones)
18
+ * - Label management
19
+ */
20
+ class LinearWorkProvider {
21
+ platform = 'linear';
22
+ // Stored for future API implementation
23
+ teamId;
24
+ constructor(config) {
25
+ if (!config.project) {
26
+ throw new errors_1.ProviderError('linear', 'init', 'Linear work provider requires project (team_id) in config');
27
+ }
28
+ this.teamId = config.project;
29
+ }
30
+ /** Get the team ID for API calls */
31
+ getTeamId() {
32
+ return this.teamId;
33
+ }
34
+ notImplemented(operation) {
35
+ throw new errors_1.ProviderError('linear', operation, `Linear ${operation} not yet implemented`);
36
+ }
37
+ async createIssue(_options) {
38
+ this.notImplemented('createIssue');
39
+ }
40
+ async fetchIssue(_issueId) {
41
+ this.notImplemented('fetchIssue');
42
+ }
43
+ async updateIssue(_issueId, _options) {
44
+ this.notImplemented('updateIssue');
45
+ }
46
+ async closeIssue(_issueId) {
47
+ this.notImplemented('closeIssue');
48
+ }
49
+ async reopenIssue(_issueId) {
50
+ this.notImplemented('reopenIssue');
51
+ }
52
+ async searchIssues(_query, _filters) {
53
+ this.notImplemented('searchIssues');
54
+ }
55
+ async assignIssue(_issueId, _assignee) {
56
+ this.notImplemented('assignIssue');
57
+ }
58
+ async unassignIssue(_issueId) {
59
+ this.notImplemented('unassignIssue');
60
+ }
61
+ async createComment(_issueId, _body, _faberContext) {
62
+ this.notImplemented('createComment');
63
+ }
64
+ async listComments(_issueId, _options) {
65
+ this.notImplemented('listComments');
66
+ }
67
+ async addLabels(_issueId, _labels) {
68
+ this.notImplemented('addLabels');
69
+ }
70
+ async removeLabels(_issueId, _labels) {
71
+ this.notImplemented('removeLabels');
72
+ }
73
+ async setLabels(_issueId, _labels) {
74
+ this.notImplemented('setLabels');
75
+ }
76
+ async listLabels(_issueId) {
77
+ this.notImplemented('listLabels');
78
+ }
79
+ async createMilestone(_options) {
80
+ this.notImplemented('createMilestone');
81
+ }
82
+ async setMilestone(_issueId, _milestone) {
83
+ this.notImplemented('setMilestone');
84
+ }
85
+ async removeMilestone(_issueId) {
86
+ this.notImplemented('removeMilestone');
87
+ }
88
+ async listMilestones(_state) {
89
+ this.notImplemented('listMilestones');
90
+ }
91
+ }
92
+ exports.LinearWorkProvider = LinearWorkProvider;
93
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/work/providers/linear.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAeH,yCAA6C;AAE7C;;;;;;;;GAQG;AACH,MAAa,kBAAkB;IACpB,QAAQ,GAAG,QAAiB,CAAC;IACtC,uCAAuC;IAC/B,MAAM,CAAS;IAEvB,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,sBAAa,CACrB,QAAQ,EACR,MAAM,EACN,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,oCAAoC;IAC1B,SAAS;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,cAAc,CAAC,SAAiB;QACtC,MAAM,IAAI,sBAAa,CACrB,QAAQ,EACR,SAAS,EACT,UAAU,SAAS,sBAAsB,CAC1C,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;AApID,gDAoIC"}