@sascha384/tic 1.5.1 → 1.7.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 (65) hide show
  1. package/dist/app.d.ts +3 -1
  2. package/dist/app.js +12 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/backends/ado/index.js +54 -64
  5. package/dist/backends/ado/index.js.map +1 -1
  6. package/dist/backends/cache.d.ts +11 -0
  7. package/dist/backends/cache.js +36 -0
  8. package/dist/backends/cache.js.map +1 -0
  9. package/dist/backends/factory.d.ts +1 -1
  10. package/dist/backends/factory.js +13 -1
  11. package/dist/backends/factory.js.map +1 -1
  12. package/dist/backends/github/index.d.ts +2 -2
  13. package/dist/backends/github/index.js +9 -9
  14. package/dist/backends/github/index.js.map +1 -1
  15. package/dist/backends/gitlab/index.d.ts +2 -0
  16. package/dist/backends/gitlab/index.js +9 -2
  17. package/dist/backends/gitlab/index.js.map +1 -1
  18. package/dist/backends/jira/acli.d.ts +2 -0
  19. package/dist/backends/jira/acli.js +17 -0
  20. package/dist/backends/jira/acli.js.map +1 -0
  21. package/dist/backends/jira/config.d.ts +6 -0
  22. package/dist/backends/jira/config.js +15 -0
  23. package/dist/backends/jira/config.js.map +1 -0
  24. package/dist/backends/jira/index.d.ts +29 -0
  25. package/dist/backends/jira/index.js +331 -0
  26. package/dist/backends/jira/index.js.map +1 -0
  27. package/dist/backends/jira/mappers.d.ts +62 -0
  28. package/dist/backends/jira/mappers.js +63 -0
  29. package/dist/backends/jira/mappers.js.map +1 -0
  30. package/dist/backends/local/config.d.ts +5 -0
  31. package/dist/backends/local/config.js.map +1 -1
  32. package/dist/backends/local/index.d.ts +0 -2
  33. package/dist/backends/local/index.js +13 -27
  34. package/dist/backends/local/index.js.map +1 -1
  35. package/dist/backends/types.d.ts +15 -2
  36. package/dist/backends/types.js +51 -0
  37. package/dist/backends/types.js.map +1 -1
  38. package/dist/cli/commands/item.js +3 -3
  39. package/dist/cli/commands/item.js.map +1 -1
  40. package/dist/cli/commands/mcp.js +6 -0
  41. package/dist/cli/commands/mcp.js.map +1 -1
  42. package/dist/cli/index.js +3 -1
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/components/HelpScreen.d.ts +15 -0
  45. package/dist/components/HelpScreen.js +150 -0
  46. package/dist/components/HelpScreen.js.map +1 -0
  47. package/dist/components/IterationPicker.js +8 -3
  48. package/dist/components/IterationPicker.js.map +1 -1
  49. package/dist/components/SearchOverlay.d.ts +10 -0
  50. package/dist/components/SearchOverlay.js +63 -0
  51. package/dist/components/SearchOverlay.js.map +1 -0
  52. package/dist/components/Settings.js +113 -18
  53. package/dist/components/Settings.js.map +1 -1
  54. package/dist/components/StatusScreen.js +6 -2
  55. package/dist/components/StatusScreen.js.map +1 -1
  56. package/dist/components/WorkItemForm.js +8 -12
  57. package/dist/components/WorkItemForm.js.map +1 -1
  58. package/dist/components/WorkItemList.js +56 -46
  59. package/dist/components/WorkItemList.js.map +1 -1
  60. package/dist/components/fuzzyMatch.d.ts +6 -0
  61. package/dist/components/fuzzyMatch.js +36 -0
  62. package/dist/components/fuzzyMatch.js.map +1 -0
  63. package/dist/index.js +1 -8
  64. package/dist/index.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ export function acli(args, cwd) {
3
+ const result = execFileSync('acli', args, {
4
+ cwd,
5
+ encoding: 'utf-8',
6
+ stdio: ['pipe', 'pipe', 'pipe'],
7
+ });
8
+ return JSON.parse(result);
9
+ }
10
+ export function acliExec(args, cwd) {
11
+ return execFileSync('acli', args, {
12
+ cwd,
13
+ encoding: 'utf-8',
14
+ stdio: ['pipe', 'pipe', 'pipe'],
15
+ });
16
+ }
17
+ //# sourceMappingURL=acli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acli.js","sourceRoot":"","sources":["../../../src/backends/jira/acli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,IAAI,CAAI,IAAc,EAAE,GAAW;IACjD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;QACxC,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAc,EAAE,GAAW;IAClD,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;QAChC,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface JiraConfig {
2
+ site: string;
3
+ project: string;
4
+ boardId?: number;
5
+ }
6
+ export declare function readJiraConfig(root: string): Promise<JiraConfig>;
@@ -0,0 +1,15 @@
1
+ import { readConfig } from '../local/config.js';
2
+ export async function readJiraConfig(root) {
3
+ const config = await readConfig(root);
4
+ if (!config.jira) {
5
+ throw new Error('Jira backend requires "jira" configuration in .tic/config.yml');
6
+ }
7
+ if (!config.jira.site) {
8
+ throw new Error('Jira backend requires "jira.site" in .tic/config.yml');
9
+ }
10
+ if (!config.jira.project) {
11
+ throw new Error('Jira backend requires "jira.project" in .tic/config.yml');
12
+ }
13
+ return config.jira;
14
+ }
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/backends/jira/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQhD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { BaseBackend } from '../types.js';
2
+ import type { BackendCapabilities } from '../types.js';
3
+ import type { WorkItem, NewWorkItem, NewComment, Comment } from '../../types.js';
4
+ export declare class JiraBackend extends BaseBackend {
5
+ private cwd;
6
+ private config;
7
+ private cachedSprints;
8
+ private constructor();
9
+ protected onCacheInvalidate(): void;
10
+ static create(cwd: string): Promise<JiraBackend>;
11
+ getCapabilities(): BackendCapabilities;
12
+ getStatuses(): Promise<string[]>;
13
+ getWorkItemTypes(): Promise<string[]>;
14
+ getAssignees(): Promise<string[]>;
15
+ getIterations(): Promise<string[]>;
16
+ getCurrentIteration(): Promise<string>;
17
+ setCurrentIteration(_name: string): Promise<void>;
18
+ listWorkItems(iteration?: string): Promise<WorkItem[]>;
19
+ getWorkItem(id: string): Promise<WorkItem>;
20
+ createWorkItem(data: NewWorkItem): Promise<WorkItem>;
21
+ updateWorkItem(id: string, data: Partial<WorkItem>): Promise<WorkItem>;
22
+ deleteWorkItem(id: string): Promise<void>;
23
+ addComment(workItemId: string, comment: NewComment): Promise<Comment>;
24
+ getChildren(id: string): Promise<WorkItem[]>;
25
+ getDependents(id: string): Promise<WorkItem[]>;
26
+ getItemUrl(id: string): string;
27
+ openItem(id: string): Promise<void>;
28
+ private fetchSprints;
29
+ }
@@ -0,0 +1,331 @@
1
+ import { BaseBackend } from '../types.js';
2
+ import { acli, acliExec } from './acli.js';
3
+ import { readJiraConfig } from './config.js';
4
+ import { mapIssueToWorkItem, mapPriorityToJira, mapCommentToComment, } from './mappers.js';
5
+ function titleCase(s) {
6
+ return s
7
+ .split(' ')
8
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
9
+ .join(' ');
10
+ }
11
+ export class JiraBackend extends BaseBackend {
12
+ cwd;
13
+ config;
14
+ cachedSprints = null;
15
+ constructor(cwd, config) {
16
+ super(60_000);
17
+ this.cwd = cwd;
18
+ this.config = config;
19
+ }
20
+ onCacheInvalidate() {
21
+ this.cachedSprints = null;
22
+ }
23
+ static async create(cwd) {
24
+ acliExec(['jira', 'auth', 'status'], cwd);
25
+ const config = await readJiraConfig(cwd);
26
+ return new JiraBackend(cwd, config);
27
+ }
28
+ getCapabilities() {
29
+ return {
30
+ relationships: true,
31
+ customTypes: false,
32
+ customStatuses: false,
33
+ iterations: this.config.boardId != null,
34
+ comments: true,
35
+ fields: {
36
+ priority: true,
37
+ assignee: true,
38
+ labels: true,
39
+ parent: true,
40
+ dependsOn: true,
41
+ },
42
+ };
43
+ }
44
+ // eslint-disable-next-line @typescript-eslint/require-await
45
+ async getStatuses() {
46
+ const statuses = acli([
47
+ 'jira',
48
+ 'project',
49
+ 'statuses',
50
+ '--project',
51
+ this.config.project,
52
+ '--json',
53
+ ], this.cwd);
54
+ return statuses.map((s) => s.name.toLowerCase());
55
+ }
56
+ // eslint-disable-next-line @typescript-eslint/require-await
57
+ async getWorkItemTypes() {
58
+ const project = acli(['jira', 'project', 'view', '--project', this.config.project, '--json'], this.cwd);
59
+ return project.issueTypes.map((t) => t.name.toLowerCase());
60
+ }
61
+ // eslint-disable-next-line @typescript-eslint/require-await
62
+ async getAssignees() {
63
+ try {
64
+ const users = acli(['jira', 'user', 'search', '--project', this.config.project, '--json'], this.cwd);
65
+ return users.map((u) => u.emailAddress);
66
+ }
67
+ catch {
68
+ return [];
69
+ }
70
+ }
71
+ // eslint-disable-next-line @typescript-eslint/require-await
72
+ async getIterations() {
73
+ if (!this.config.boardId)
74
+ return [];
75
+ const sprints = this.fetchSprints();
76
+ return sprints.map((s) => s.name);
77
+ }
78
+ // eslint-disable-next-line @typescript-eslint/require-await
79
+ async getCurrentIteration() {
80
+ if (!this.config.boardId)
81
+ return '';
82
+ const sprints = acli([
83
+ 'jira',
84
+ 'board',
85
+ 'list-sprints',
86
+ '--id',
87
+ String(this.config.boardId),
88
+ '--state',
89
+ 'active',
90
+ '--json',
91
+ ], this.cwd);
92
+ return sprints.length > 0 ? sprints[0].name : '';
93
+ }
94
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
95
+ async setCurrentIteration(_name) {
96
+ // No-op — current iteration is the active sprint
97
+ }
98
+ // eslint-disable-next-line @typescript-eslint/require-await
99
+ async listWorkItems(iteration) {
100
+ if (iteration && this.config.boardId) {
101
+ // Find the sprint ID for the given iteration name
102
+ const sprints = this.fetchSprints();
103
+ const sprint = sprints.find((s) => s.name === iteration);
104
+ if (!sprint)
105
+ return [];
106
+ const issues = acli([
107
+ 'jira',
108
+ 'workitem',
109
+ 'search',
110
+ '--jql',
111
+ `project = ${this.config.project} AND sprint = ${sprint.id}`,
112
+ '--fields',
113
+ '*all',
114
+ '--paginate',
115
+ '--json',
116
+ ], this.cwd);
117
+ return issues.map(mapIssueToWorkItem);
118
+ }
119
+ const issues = acli([
120
+ 'jira',
121
+ 'workitem',
122
+ 'search',
123
+ '--jql',
124
+ `project = ${this.config.project}`,
125
+ '--fields',
126
+ '*all',
127
+ '--paginate',
128
+ '--json',
129
+ ], this.cwd);
130
+ let items = issues.map(mapIssueToWorkItem);
131
+ if (iteration) {
132
+ items = items.filter((i) => i.iteration === iteration);
133
+ }
134
+ return items;
135
+ }
136
+ // eslint-disable-next-line @typescript-eslint/require-await
137
+ async getWorkItem(id) {
138
+ const issue = acli(['jira', 'workitem', 'view', '--key', id, '--fields', '*all', '--json'], this.cwd);
139
+ const item = mapIssueToWorkItem(issue);
140
+ // Fetch comments separately
141
+ try {
142
+ const comments = acli(['jira', 'workitem', 'comment', 'list', '--key', id, '--json'], this.cwd);
143
+ item.comments = comments.map(mapCommentToComment);
144
+ }
145
+ catch {
146
+ // Comments may fail — leave empty
147
+ }
148
+ return item;
149
+ }
150
+ async createWorkItem(data) {
151
+ this.validateFields(data);
152
+ const args = [
153
+ 'jira',
154
+ 'workitem',
155
+ 'create',
156
+ '--project',
157
+ this.config.project,
158
+ '--type',
159
+ titleCase(data.type),
160
+ '--summary',
161
+ data.title,
162
+ ];
163
+ if (data.description) {
164
+ args.push('--description', data.description);
165
+ }
166
+ if (data.priority && data.priority !== 'medium') {
167
+ args.push('--priority', mapPriorityToJira(data.priority));
168
+ }
169
+ if (data.assignee) {
170
+ args.push('--assignee', data.assignee);
171
+ }
172
+ if (data.labels.length > 0) {
173
+ args.push('--labels', data.labels.join(','));
174
+ }
175
+ if (data.parent) {
176
+ args.push('--parent', data.parent);
177
+ }
178
+ args.push('--json');
179
+ const result = acli(args, this.cwd);
180
+ const key = result.key;
181
+ // Create dependency links
182
+ for (const dep of data.dependsOn) {
183
+ acliExec([
184
+ 'jira',
185
+ 'workitem',
186
+ 'link',
187
+ 'create',
188
+ '--out',
189
+ dep,
190
+ '--in',
191
+ key,
192
+ '--type',
193
+ 'Blocks',
194
+ ], this.cwd);
195
+ }
196
+ this.invalidateCache();
197
+ return this.getWorkItem(key);
198
+ }
199
+ async updateWorkItem(id, data) {
200
+ this.validateFields(data);
201
+ // Handle status transition separately
202
+ if (data.status !== undefined) {
203
+ acliExec([
204
+ 'jira',
205
+ 'workitem',
206
+ 'transition',
207
+ '--key',
208
+ id,
209
+ '--status',
210
+ titleCase(data.status),
211
+ '--yes',
212
+ ], this.cwd);
213
+ }
214
+ // Handle assignee separately
215
+ if (data.assignee !== undefined) {
216
+ if (data.assignee) {
217
+ acliExec([
218
+ 'jira',
219
+ 'workitem',
220
+ 'assign',
221
+ '--key',
222
+ id,
223
+ '--assignee',
224
+ data.assignee,
225
+ ], this.cwd);
226
+ }
227
+ else {
228
+ acliExec(['jira', 'workitem', 'assign', '--key', id, '--remove-assignee'], this.cwd);
229
+ }
230
+ }
231
+ // Handle edit fields (title, description, labels, type)
232
+ const editArgs = ['jira', 'workitem', 'edit', '--key', id];
233
+ let hasEdits = false;
234
+ if (data.title !== undefined) {
235
+ editArgs.push('--summary', data.title);
236
+ hasEdits = true;
237
+ }
238
+ if (data.description !== undefined) {
239
+ editArgs.push('--description', data.description);
240
+ hasEdits = true;
241
+ }
242
+ if (data.labels !== undefined) {
243
+ editArgs.push('--labels', data.labels.join(','));
244
+ hasEdits = true;
245
+ }
246
+ if (data.type !== undefined) {
247
+ editArgs.push('--type', titleCase(data.type));
248
+ hasEdits = true;
249
+ }
250
+ if (hasEdits) {
251
+ acliExec(editArgs, this.cwd);
252
+ }
253
+ this.invalidateCache();
254
+ return this.getWorkItem(id);
255
+ }
256
+ // eslint-disable-next-line @typescript-eslint/require-await
257
+ async deleteWorkItem(id) {
258
+ acliExec(['jira', 'workitem', 'delete', '--key', id, '--yes'], this.cwd);
259
+ this.invalidateCache();
260
+ }
261
+ // eslint-disable-next-line @typescript-eslint/require-await
262
+ async addComment(workItemId, comment) {
263
+ acliExec([
264
+ 'jira',
265
+ 'workitem',
266
+ 'comment',
267
+ 'create',
268
+ '--key',
269
+ workItemId,
270
+ '--body',
271
+ comment.body,
272
+ ], this.cwd);
273
+ return {
274
+ author: comment.author,
275
+ date: new Date().toISOString(),
276
+ body: comment.body,
277
+ };
278
+ }
279
+ // eslint-disable-next-line @typescript-eslint/require-await
280
+ async getChildren(id) {
281
+ const issues = acli([
282
+ 'jira',
283
+ 'workitem',
284
+ 'search',
285
+ '--jql',
286
+ `parent = ${id}`,
287
+ '--fields',
288
+ '*all',
289
+ '--paginate',
290
+ '--json',
291
+ ], this.cwd);
292
+ return issues.map(mapIssueToWorkItem);
293
+ }
294
+ // eslint-disable-next-line @typescript-eslint/require-await
295
+ async getDependents(id) {
296
+ const issues = acli([
297
+ 'jira',
298
+ 'workitem',
299
+ 'search',
300
+ '--jql',
301
+ `issue in linkedIssues("${id}","is blocked by")`,
302
+ '--fields',
303
+ '*all',
304
+ '--paginate',
305
+ '--json',
306
+ ], this.cwd);
307
+ return issues.map(mapIssueToWorkItem);
308
+ }
309
+ getItemUrl(id) {
310
+ return `${this.config.site}/browse/${id}`;
311
+ }
312
+ // eslint-disable-next-line @typescript-eslint/require-await
313
+ async openItem(id) {
314
+ acliExec(['jira', 'workitem', 'view', id, '--web'], this.cwd);
315
+ }
316
+ fetchSprints() {
317
+ if (this.cachedSprints)
318
+ return this.cachedSprints;
319
+ this.cachedSprints = acli([
320
+ 'jira',
321
+ 'board',
322
+ 'list-sprints',
323
+ '--id',
324
+ String(this.config.boardId),
325
+ '--paginate',
326
+ '--json',
327
+ ], this.cwd);
328
+ return this.cachedSprints;
329
+ }
330
+ }
331
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/jira/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { WorkItem, Comment } from '../../types.js';
2
+ export interface JiraIssue {
3
+ key: string;
4
+ fields: {
5
+ summary: string;
6
+ description: string | null;
7
+ status: {
8
+ name: string;
9
+ };
10
+ issuetype: {
11
+ name: string;
12
+ };
13
+ priority: {
14
+ name: string;
15
+ } | null;
16
+ assignee: {
17
+ displayName: string;
18
+ emailAddress: string;
19
+ } | null;
20
+ labels: string[];
21
+ sprint: {
22
+ name: string;
23
+ } | null;
24
+ created: string;
25
+ updated: string;
26
+ parent: {
27
+ key: string;
28
+ } | null;
29
+ issuelinks: JiraIssueLink[] | undefined;
30
+ };
31
+ }
32
+ export interface JiraIssueLink {
33
+ type: {
34
+ name: string;
35
+ inward: string;
36
+ outward: string;
37
+ };
38
+ inwardIssue?: {
39
+ key: string;
40
+ };
41
+ outwardIssue?: {
42
+ key: string;
43
+ };
44
+ }
45
+ export interface JiraComment {
46
+ author: {
47
+ displayName: string;
48
+ emailAddress: string;
49
+ };
50
+ created: string;
51
+ body: string;
52
+ }
53
+ export interface JiraSprint {
54
+ id: number;
55
+ name: string;
56
+ state: string;
57
+ }
58
+ export declare function mapPriorityToTic(priority: string | undefined): 'critical' | 'high' | 'medium' | 'low';
59
+ export declare function mapPriorityToJira(priority: string): string;
60
+ export declare function extractDependsOn(links: JiraIssueLink[] | undefined): string[];
61
+ export declare function mapIssueToWorkItem(issue: JiraIssue): WorkItem;
62
+ export declare function mapCommentToComment(comment: JiraComment): Comment;
@@ -0,0 +1,63 @@
1
+ export function mapPriorityToTic(priority) {
2
+ switch (priority) {
3
+ case 'Highest':
4
+ case 'Critical':
5
+ return 'critical';
6
+ case 'High':
7
+ return 'high';
8
+ case 'Medium':
9
+ return 'medium';
10
+ case 'Low':
11
+ case 'Lowest':
12
+ return 'low';
13
+ default:
14
+ return 'medium';
15
+ }
16
+ }
17
+ export function mapPriorityToJira(priority) {
18
+ switch (priority) {
19
+ case 'critical':
20
+ return 'Highest';
21
+ case 'high':
22
+ return 'High';
23
+ case 'medium':
24
+ return 'Medium';
25
+ case 'low':
26
+ return 'Low';
27
+ default:
28
+ return 'Medium';
29
+ }
30
+ }
31
+ export function extractDependsOn(links) {
32
+ if (!links)
33
+ return [];
34
+ return links
35
+ .filter((link) => link.type.inward === 'is blocked by' && link.inwardIssue != null)
36
+ .map((link) => link.inwardIssue.key);
37
+ }
38
+ export function mapIssueToWorkItem(issue) {
39
+ return {
40
+ id: issue.key,
41
+ title: issue.fields.summary,
42
+ description: issue.fields.description ?? '',
43
+ status: issue.fields.status.name.toLowerCase(),
44
+ type: issue.fields.issuetype.name.toLowerCase(),
45
+ priority: mapPriorityToTic(issue.fields.priority?.name),
46
+ assignee: issue.fields.assignee?.emailAddress ?? '',
47
+ labels: issue.fields.labels,
48
+ iteration: issue.fields.sprint?.name ?? '',
49
+ created: issue.fields.created,
50
+ updated: issue.fields.updated,
51
+ parent: issue.fields.parent?.key ?? null,
52
+ dependsOn: extractDependsOn(issue.fields.issuelinks),
53
+ comments: [],
54
+ };
55
+ }
56
+ export function mapCommentToComment(comment) {
57
+ return {
58
+ author: comment.author.emailAddress,
59
+ date: comment.created,
60
+ body: comment.body,
61
+ };
62
+ }
63
+ //# sourceMappingURL=mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../src/backends/jira/mappers.ts"],"names":[],"mappings":"AAsCA,MAAM,UAAU,gBAAgB,CAC9B,QAA4B;IAE5B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkC;IACjE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACT,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,eAAe,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CACnE;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAY,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;QAC3B,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE;QAC3C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;QAC9C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE;QAC/C,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;QACvD,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE;QACnD,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC3B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;QAC1C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;QAC7B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI;QACxC,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;QACpD,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAoB;IACtD,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY;QACnC,IAAI,EAAE,OAAO,CAAC,OAAO;QACrB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;AACJ,CAAC"}
@@ -6,6 +6,11 @@ export interface Config {
6
6
  iterations: string[];
7
7
  next_id: number;
8
8
  branchMode: 'worktree' | 'branch';
9
+ jira?: {
10
+ site: string;
11
+ project: string;
12
+ boardId?: number;
13
+ };
9
14
  }
10
15
  export declare const defaultConfig: Config;
11
16
  export declare function readConfig(root: string): Promise<Config>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/backends/local/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAYxB,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;IAC9D,iBAAiB,EAAE,SAAS;IAC5B,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,UAAU;CACvB,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/backends/local/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAiBxB,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;IAC9D,iBAAiB,EAAE,SAAS;IAC5B,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,UAAU;CACvB,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -32,8 +32,6 @@ export declare class LocalBackend extends BaseBackend {
32
32
  updateWorkItem(id: string, data: Partial<WorkItem>): Promise<WorkItem>;
33
33
  deleteWorkItem(id: string): Promise<void>;
34
34
  addComment(workItemId: string, comment: NewComment): Promise<Comment>;
35
- getChildren(id: string): Promise<WorkItem[]>;
36
- getDependents(id: string): Promise<WorkItem[]>;
37
35
  getItemUrl(id: string): string;
38
36
  openItem(id: string): Promise<void>;
39
37
  }