@sascha384/tic 1.34.0 → 2.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 (107) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/backends/availability.js +4 -2
  3. package/dist/backends/availability.js.map +1 -1
  4. package/dist/backends/factory.d.ts +5 -3
  5. package/dist/backends/factory.js +28 -43
  6. package/dist/backends/factory.js.map +1 -1
  7. package/dist/backends/files/hash.d.ts +1 -0
  8. package/dist/backends/files/hash.js +5 -0
  9. package/dist/backends/files/hash.js.map +1 -0
  10. package/dist/backends/files/index.d.ts +48 -0
  11. package/dist/backends/files/index.js +174 -0
  12. package/dist/backends/files/index.js.map +1 -0
  13. package/dist/backends/files/sync.d.ts +13 -0
  14. package/dist/backends/files/sync.js +69 -0
  15. package/dist/backends/files/sync.js.map +1 -0
  16. package/dist/backends/jira/config.d.ts +1 -1
  17. package/dist/backends/jira/config.js +6 -9
  18. package/dist/backends/jira/config.js.map +1 -1
  19. package/dist/backends/types.d.ts +12 -0
  20. package/dist/backends/types.js +5 -1
  21. package/dist/backends/types.js.map +1 -1
  22. package/dist/cli/commands/config.js +27 -14
  23. package/dist/cli/commands/config.js.map +1 -1
  24. package/dist/cli/commands/init.js +10 -3
  25. package/dist/cli/commands/init.js.map +1 -1
  26. package/dist/cli/commands/mcp.d.ts +4 -4
  27. package/dist/cli/commands/mcp.js +16 -25
  28. package/dist/cli/commands/mcp.js.map +1 -1
  29. package/dist/cli/index.js +16 -19
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/commands.d.ts +2 -0
  32. package/dist/commands.js +33 -0
  33. package/dist/commands.js.map +1 -1
  34. package/dist/components/Header.js +9 -2
  35. package/dist/components/Header.js.map +1 -1
  36. package/dist/components/HelpScreen.js +3 -0
  37. package/dist/components/HelpScreen.js.map +1 -1
  38. package/dist/components/OverlayPanel.d.ts +2 -1
  39. package/dist/components/OverlayPanel.js +14 -1
  40. package/dist/components/OverlayPanel.js.map +1 -1
  41. package/dist/components/Settings.js +6 -11
  42. package/dist/components/Settings.js.map +1 -1
  43. package/dist/components/StatusScreen.js +29 -4
  44. package/dist/components/StatusScreen.js.map +1 -1
  45. package/dist/components/WorkItemForm.js +6 -9
  46. package/dist/components/WorkItemForm.js.map +1 -1
  47. package/dist/components/WorkItemList.js +353 -36
  48. package/dist/components/WorkItemList.js.map +1 -1
  49. package/dist/filters.d.ts +28 -0
  50. package/dist/filters.js +47 -0
  51. package/dist/filters.js.map +1 -0
  52. package/dist/implement.js +4 -56
  53. package/dist/implement.js.map +1 -1
  54. package/dist/index.js +20 -8
  55. package/dist/index.js.map +1 -1
  56. package/dist/storage/config.d.ts +61 -0
  57. package/dist/storage/config.js +309 -0
  58. package/dist/storage/config.js.map +1 -0
  59. package/dist/storage/db.d.ts +11 -0
  60. package/dist/storage/db.js +34 -0
  61. package/dist/storage/db.js.map +1 -0
  62. package/dist/storage/index.d.ts +73 -0
  63. package/dist/storage/index.js +966 -0
  64. package/dist/storage/index.js.map +1 -0
  65. package/dist/storage/mappers.d.ts +35 -0
  66. package/dist/storage/mappers.js +70 -0
  67. package/dist/storage/mappers.js.map +1 -0
  68. package/dist/storage/schema.d.ts +1844 -0
  69. package/dist/storage/schema.js +197 -0
  70. package/dist/storage/schema.js.map +1 -0
  71. package/dist/storage/syncQueue.d.ts +13 -0
  72. package/dist/storage/syncQueue.js +98 -0
  73. package/dist/storage/syncQueue.js.map +1 -0
  74. package/dist/storage/undo.d.ts +22 -0
  75. package/dist/storage/undo.js +129 -0
  76. package/dist/storage/undo.js.map +1 -0
  77. package/dist/stores/backendDataStore.d.ts +4 -1
  78. package/dist/stores/backendDataStore.js +61 -40
  79. package/dist/stores/backendDataStore.js.map +1 -1
  80. package/dist/stores/configStore.d.ts +3 -1
  81. package/dist/stores/configStore.js +25 -65
  82. package/dist/stores/configStore.js.map +1 -1
  83. package/dist/stores/filterStore.d.ts +13 -0
  84. package/dist/stores/filterStore.js +38 -0
  85. package/dist/stores/filterStore.js.map +1 -0
  86. package/dist/stores/listViewStore.d.ts +1 -0
  87. package/dist/stores/listViewStore.js +1 -0
  88. package/dist/stores/listViewStore.js.map +1 -1
  89. package/dist/stores/uiStore.d.ts +8 -0
  90. package/dist/stores/uiStore.js.map +1 -1
  91. package/dist/stores/undoStore.d.ts +4 -0
  92. package/dist/stores/undoStore.js +32 -0
  93. package/dist/stores/undoStore.js.map +1 -1
  94. package/dist/sync/SyncManager.d.ts +5 -4
  95. package/dist/sync/SyncManager.js +129 -36
  96. package/dist/sync/SyncManager.js.map +1 -1
  97. package/dist/sync/types.d.ts +25 -1
  98. package/package.json +5 -1
  99. package/dist/backends/local/config.d.ts +0 -23
  100. package/dist/backends/local/config.js +0 -42
  101. package/dist/backends/local/config.js.map +0 -1
  102. package/dist/backends/local/index.d.ts +0 -45
  103. package/dist/backends/local/index.js +0 -291
  104. package/dist/backends/local/index.js.map +0 -1
  105. package/dist/sync/queue.d.ts +0 -12
  106. package/dist/sync/queue.js +0 -56
  107. package/dist/sync/queue.js.map +0 -1
@@ -1,13 +1,13 @@
1
- import { writeWorkItem, deleteWorkItem as removeWorkItemFile, } from '../backends/local/items.js';
2
- import { writeTemplate, deleteTemplate as removeTemplateFile, } from '../backends/local/templates.js';
1
+ import { isSyncableBackend } from '../backends/types.js';
3
2
  export class SyncManager {
4
- local;
3
+ primary;
5
4
  remote;
6
5
  queue;
7
6
  status;
8
7
  listeners = [];
9
- constructor(local, remote, queue) {
10
- this.local = local;
8
+ syncLog = [];
9
+ constructor(primary, remote, queue) {
10
+ this.primary = primary;
11
11
  this.remote = remote;
12
12
  this.queue = queue;
13
13
  this.status = {
@@ -15,6 +15,8 @@ export class SyncManager {
15
15
  pendingCount: 0,
16
16
  lastSyncTime: null,
17
17
  errors: [],
18
+ progress: null,
19
+ syncLog: [],
18
20
  };
19
21
  }
20
22
  getStatus() {
@@ -29,28 +31,61 @@ export class SyncManager {
29
31
  cb(this.getStatus());
30
32
  }
31
33
  }
34
+ appendLog(entry) {
35
+ this.syncLog.push(entry);
36
+ if (this.syncLog.length > 50) {
37
+ this.syncLog = this.syncLog.slice(-50);
38
+ }
39
+ }
32
40
  async pushPending() {
33
41
  this.updateStatus({ state: 'syncing' });
34
- const { pending } = await this.queue.read();
42
+ const total = (await this.queue.read()).pending.length;
43
+ let current = 0;
35
44
  let pushed = 0;
36
45
  const errors = [];
37
46
  const idMappings = new Map();
38
- for (const entry of pending) {
47
+ const failedEntries = [];
48
+ while (true) {
49
+ const entry = await this.queue.claimNext();
50
+ if (!entry)
51
+ break;
52
+ current++;
53
+ this.updateStatus({
54
+ state: 'syncing',
55
+ progress: { phase: 'push', current, total },
56
+ syncLog: [...this.syncLog],
57
+ });
39
58
  try {
40
59
  const resolvedId = await this.pushEntry(entry);
41
- await this.queue.remove(resolvedId, entry.action);
42
60
  if (resolvedId !== entry.itemId) {
43
61
  idMappings.set(entry.itemId, resolvedId);
44
62
  }
45
63
  pushed++;
64
+ this.appendLog({
65
+ phase: 'push',
66
+ action: entry.action,
67
+ itemId: entry.itemId,
68
+ result: 'success',
69
+ timestamp: new Date().toISOString(),
70
+ });
46
71
  }
47
72
  catch (e) {
48
73
  const isLocalMissing = e instanceof Error &&
49
74
  'code' in e &&
50
75
  e.code === 'ENOENT';
51
- if (isLocalMissing) {
52
- // Local item was deleted or never synced — drop unrecoverable entry
53
- await this.queue.remove(entry.itemId, entry.action);
76
+ const isNotFound = e instanceof Error &&
77
+ (e.message.includes('not found') ||
78
+ e.message.includes('does not exist'));
79
+ if (isLocalMissing || isNotFound) {
80
+ // Local item was deleted or never synced — already claimed (removed) from queue
81
+ this.appendLog({
82
+ phase: 'push',
83
+ action: entry.action,
84
+ itemId: entry.itemId,
85
+ result: 'success',
86
+ message: 'skipped (local item missing)',
87
+ timestamp: new Date().toISOString(),
88
+ });
54
89
  }
55
90
  else {
56
91
  errors.push({
@@ -58,13 +93,29 @@ export class SyncManager {
58
93
  message: e instanceof Error ? e.message : String(e),
59
94
  timestamp: new Date().toISOString(),
60
95
  });
96
+ this.appendLog({
97
+ phase: 'push',
98
+ action: entry.action,
99
+ itemId: entry.itemId,
100
+ result: 'error',
101
+ message: e instanceof Error ? e.message : String(e),
102
+ timestamp: new Date().toISOString(),
103
+ });
104
+ // Collect failed entry for re-queuing after the loop
105
+ failedEntries.push(entry);
61
106
  }
62
107
  }
63
108
  }
109
+ // Re-queue all failed entries after the loop to avoid infinite re-claiming
110
+ for (const failed of failedEntries) {
111
+ await this.queue.append(failed);
112
+ }
64
113
  this.updateStatus({
65
114
  state: errors.length > 0 ? 'error' : 'idle',
66
115
  pendingCount: (await this.queue.read()).pending.length,
67
116
  errors,
117
+ progress: null,
118
+ syncLog: [...this.syncLog],
68
119
  });
69
120
  return { pushed, failed: errors.length, errors, idMappings };
70
121
  }
@@ -92,7 +143,7 @@ export class SyncManager {
92
143
  async pushEntry(entry) {
93
144
  switch (entry.action) {
94
145
  case 'create': {
95
- const localItem = await this.local.getWorkItem(entry.itemId);
146
+ const localItem = await this.primary.getWorkItem(entry.itemId);
96
147
  const remoteItem = await this.remote.createWorkItem(this.stripUnsupportedFields({
97
148
  title: localItem.title,
98
149
  type: localItem.type,
@@ -113,7 +164,7 @@ export class SyncManager {
113
164
  return entry.itemId;
114
165
  }
115
166
  case 'update': {
116
- const localItem = await this.local.getWorkItem(entry.itemId);
167
+ const localItem = await this.primary.getWorkItem(entry.itemId);
117
168
  await this.remote.updateWorkItem(entry.itemId, this.stripUnsupportedFields({
118
169
  title: localItem.title,
119
170
  type: localItem.type,
@@ -154,12 +205,12 @@ export class SyncManager {
154
205
  return entry.itemId;
155
206
  }
156
207
  case 'template-create': {
157
- const template = await this.local.getTemplate(entry.templateSlug);
208
+ const template = await this.primary.getTemplate(entry.templateSlug);
158
209
  await this.remote.createTemplate(template);
159
210
  return entry.itemId;
160
211
  }
161
212
  case 'template-update': {
162
- const template = await this.local.getTemplate(entry.templateSlug);
213
+ const template = await this.primary.getTemplate(entry.templateSlug);
163
214
  await this.remote.updateTemplate(entry.templateSlug, template);
164
215
  return entry.itemId;
165
216
  }
@@ -182,24 +233,30 @@ export class SyncManager {
182
233
  msg.includes('404'));
183
234
  }
184
235
  async renameLocalItem(oldId, newId) {
185
- const item = await this.local.getWorkItem(oldId);
186
- const root = this.local.getRoot();
236
+ const item = await this.primary.getWorkItem(oldId);
187
237
  const renamedItem = { ...item, id: newId };
188
- await writeWorkItem(root, renamedItem);
189
- await removeWorkItemFile(root, oldId);
190
- const allItems = await this.local.listWorkItems();
238
+ if (isSyncableBackend(this.primary)) {
239
+ await this.primary.importWorkItem(renamedItem);
240
+ }
241
+ else {
242
+ await this.primary.createWorkItem(renamedItem);
243
+ }
244
+ await this.primary.deleteWorkItem(oldId);
245
+ // Fix references from other items
246
+ const allItems = await this.primary.listWorkItems();
191
247
  for (const other of allItems) {
248
+ const changes = {};
192
249
  let changed = false;
193
250
  if (other.parent === oldId) {
194
- other.parent = newId;
251
+ changes.parent = newId;
195
252
  changed = true;
196
253
  }
197
254
  if (other.dependsOn.includes(oldId)) {
198
- other.dependsOn = other.dependsOn.map((d) => (d === oldId ? newId : d));
255
+ changes.dependsOn = other.dependsOn.map((d) => d === oldId ? newId : d);
199
256
  changed = true;
200
257
  }
201
258
  if (changed) {
202
- await writeWorkItem(root, other);
259
+ await this.primary.updateWorkItem(other.id, changes);
203
260
  }
204
261
  }
205
262
  }
@@ -211,40 +268,68 @@ export class SyncManager {
211
268
  state: push.errors.length > 0 ? 'error' : 'idle',
212
269
  pendingCount: (await this.queue.read()).pending.length,
213
270
  lastSyncTime: new Date(),
271
+ progress: null,
272
+ syncLog: [...this.syncLog],
214
273
  });
215
274
  return { push, pullCount };
216
275
  }
217
276
  async pull() {
218
- await this.local.syncConfigFromRemote({
219
- iterations: await this.remote.getIterations(),
220
- currentIteration: await this.remote.getCurrentIteration(),
221
- statuses: await this.remote.getStatuses(),
222
- types: await this.remote.getWorkItemTypes(),
277
+ // Sync config from remote via configStore
278
+ const [remoteIterations, remoteCurrentIteration, remoteStatuses, remoteTypes,] = await Promise.all([
279
+ this.remote.getIterations(),
280
+ this.remote.getCurrentIteration(),
281
+ this.remote.getStatuses(),
282
+ this.remote.getWorkItemTypes(),
283
+ ]);
284
+ const { configStore } = await import('../stores/configStore.js');
285
+ await configStore.getState().update({
286
+ iterations: remoteIterations,
287
+ current_iteration: remoteCurrentIteration,
288
+ statuses: remoteStatuses,
289
+ types: remoteTypes,
223
290
  });
224
291
  const remoteItems = await this.remote.listWorkItems();
225
- const root = this.local.getRoot();
226
292
  const pendingIds = new Set((await this.queue.read()).pending.map((e) => e.itemId));
227
- const localItems = await this.local.listWorkItems();
293
+ const localItems = await this.primary.listWorkItems();
228
294
  const localIds = new Set(localItems.map((i) => i.id));
229
295
  const remoteIds = new Set(remoteItems.map((i) => i.id));
230
- for (const item of remoteItems) {
231
- await writeWorkItem(root, item);
296
+ // Upsert remote items locally
297
+ if (isSyncableBackend(this.primary)) {
298
+ for (const item of remoteItems) {
299
+ await this.primary.importWorkItem(item);
300
+ }
301
+ }
302
+ else {
303
+ for (const item of remoteItems) {
304
+ if (localIds.has(item.id)) {
305
+ await this.primary.updateWorkItem(item.id, item);
306
+ }
307
+ else {
308
+ await this.primary.createWorkItem(item);
309
+ }
310
+ }
232
311
  }
312
+ // Delete local items not on remote (unless pending)
233
313
  for (const localId of localIds) {
234
314
  if (!remoteIds.has(localId) && !pendingIds.has(localId)) {
235
- await removeWorkItemFile(root, localId);
315
+ await this.primary.deleteWorkItem(localId);
236
316
  }
237
317
  }
238
318
  // Pull templates if supported by remote
239
319
  const remoteCaps = this.remote.getCapabilities();
240
320
  if (remoteCaps.templates) {
241
321
  const remoteTemplates = await this.remote.listTemplates();
242
- const localTemplates = await this.local.listTemplates();
322
+ const localTemplates = await this.primary.listTemplates();
243
323
  const localSlugs = new Set(localTemplates.map((t) => t.slug));
244
324
  const remoteSlugs = new Set(remoteTemplates.map((t) => t.slug));
245
325
  // Write/update remote templates locally
246
326
  for (const rt of remoteTemplates) {
247
- await writeTemplate(this.local.getRoot(), rt);
327
+ if (localSlugs.has(rt.slug)) {
328
+ await this.primary.updateTemplate(rt.slug, rt);
329
+ }
330
+ else {
331
+ await this.primary.createTemplate(rt);
332
+ }
248
333
  }
249
334
  // Delete local templates not on remote (unless pending in queue)
250
335
  const pendingTemplateSlugs = new Set((await this.queue.read()).pending
@@ -253,10 +338,18 @@ export class SyncManager {
253
338
  .filter(Boolean));
254
339
  for (const slug of localSlugs) {
255
340
  if (!remoteSlugs.has(slug) && !pendingTemplateSlugs.has(slug)) {
256
- await removeTemplateFile(this.local.getRoot(), slug);
341
+ await this.primary.deleteTemplate(slug);
257
342
  }
258
343
  }
259
344
  }
345
+ this.appendLog({
346
+ phase: 'pull',
347
+ action: 'update',
348
+ itemId: '',
349
+ result: 'success',
350
+ message: `${remoteItems.length} item${remoteItems.length === 1 ? '' : 's'}`,
351
+ timestamp: new Date().toISOString(),
352
+ });
260
353
  return remoteItems.length;
261
354
  }
262
355
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SyncManager.js","sourceRoot":"","sources":["../../src/sync/SyncManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SyncManager.js","sourceRoot":"","sources":["../../src/sync/SyncManager.ts"],"names":[],"mappings":"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"}
@@ -11,19 +11,43 @@ export interface QueueEntry {
11
11
  /** For templates: the template slug */
12
12
  templateSlug?: string;
13
13
  }
14
- export interface SyncQueue {
14
+ export interface SyncQueueData {
15
15
  pending: QueueEntry[];
16
16
  }
17
+ export interface SyncQueueAdapter {
18
+ read(): SyncQueueData | Promise<SyncQueueData>;
19
+ append(entry: QueueEntry): void | Promise<void>;
20
+ remove(itemId: string, action: QueueAction): void | Promise<void>;
21
+ removeByIds(itemIds: string[], action: QueueAction): void | Promise<void>;
22
+ claimNext(): QueueEntry | null | Promise<QueueEntry | null>;
23
+ clear(): void | Promise<void>;
24
+ renameItem(oldId: string, newId: string): void | Promise<void>;
25
+ }
17
26
  export interface SyncError {
18
27
  entry: QueueEntry;
19
28
  message: string;
20
29
  timestamp: string;
21
30
  }
31
+ export interface SyncProgress {
32
+ phase: 'push' | 'pull';
33
+ current: number;
34
+ total: number;
35
+ }
36
+ export interface SyncLogEntry {
37
+ phase: 'push' | 'pull';
38
+ action: QueueAction;
39
+ itemId: string;
40
+ result: 'success' | 'error';
41
+ message?: string;
42
+ timestamp: string;
43
+ }
22
44
  export interface SyncStatus {
23
45
  state: 'idle' | 'syncing' | 'error';
24
46
  pendingCount: number;
25
47
  lastSyncTime: Date | null;
26
48
  errors: SyncError[];
49
+ progress: SyncProgress | null;
50
+ syncLog: SyncLogEntry[];
27
51
  }
28
52
  export interface PushResult {
29
53
  pushed: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sascha384/tic",
3
- "version": "1.34.0",
3
+ "version": "2.0.0",
4
4
  "description": "Terminal UI for issue tracking",
5
5
  "type": "module",
6
6
  "bin": {
@@ -35,7 +35,9 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@modelcontextprotocol/sdk": "^1.25.3",
38
+ "better-sqlite3": "^12.6.2",
38
39
  "commander": "^14.0.3",
40
+ "drizzle-orm": "^0.45.1",
39
41
  "ink": "^6.6.0",
40
42
  "ink-select-input": "^6.2.0",
41
43
  "ink-spinner": "^5.0.0",
@@ -52,10 +54,12 @@
52
54
  "@semantic-release/exec": "^7.1.0",
53
55
  "@semantic-release/git": "^10.0.1",
54
56
  "@sindresorhus/tsconfig": "^8.1.0",
57
+ "@types/better-sqlite3": "^7.6.13",
55
58
  "@types/node": "^25.1.0",
56
59
  "@types/react": "^19.2.10",
57
60
  "@types/semver": "^7.7.1",
58
61
  "@types/turndown": "^5.0.6",
62
+ "drizzle-kit": "^0.31.9",
59
63
  "eslint": "^9.39.2",
60
64
  "eslint-config-prettier": "^10.1.8",
61
65
  "husky": "^9.1.7",
@@ -1,23 +0,0 @@
1
- export interface Config {
2
- backend: string;
3
- types: string[];
4
- statuses: string[];
5
- current_iteration: string;
6
- iterations: string[];
7
- next_id: number;
8
- branchMode: 'worktree' | 'branch';
9
- autoUpdate: boolean;
10
- defaultType?: string;
11
- showDetailPanel?: boolean;
12
- branchCommand?: string;
13
- copyToClipboard?: boolean;
14
- jira?: {
15
- site: string;
16
- project: string;
17
- boardId?: number;
18
- };
19
- }
20
- export declare const defaultConfig: Config;
21
- export declare function readConfig(root: string): Promise<Config>;
22
- export declare function readConfigSync(root: string): Config;
23
- export declare function writeConfig(root: string, config: Config): Promise<void>;
@@ -1,42 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import fsSync from 'node:fs';
3
- import path from 'node:path';
4
- import yaml from 'yaml';
5
- export const defaultConfig = {
6
- backend: 'local',
7
- types: ['epic', 'issue', 'task'],
8
- statuses: ['backlog', 'todo', 'in-progress', 'review', 'done'],
9
- current_iteration: 'default',
10
- iterations: ['default'],
11
- next_id: 1,
12
- branchMode: 'worktree',
13
- autoUpdate: true,
14
- branchCommand: `claude "Brainstorm the implementation of issue #$TIC_ITEM_ID: $TIC_ITEM_TITLE. $TIC_ITEM_DESCRIPTION"`,
15
- copyToClipboard: true,
16
- };
17
- function configPath(root) {
18
- return path.join(root, '.tic', 'config.yml');
19
- }
20
- export async function readConfig(root) {
21
- const p = configPath(root);
22
- try {
23
- const raw = await fs.readFile(p, 'utf-8');
24
- return yaml.parse(raw);
25
- }
26
- catch {
27
- return { ...defaultConfig };
28
- }
29
- }
30
- export function readConfigSync(root) {
31
- const p = configPath(root);
32
- if (!fsSync.existsSync(p))
33
- return { ...defaultConfig };
34
- const raw = fsSync.readFileSync(p, 'utf-8');
35
- return yaml.parse(raw);
36
- }
37
- export async function writeConfig(root, config) {
38
- const dir = path.join(root, '.tic');
39
- await fs.mkdir(dir, { recursive: true });
40
- await fs.writeFile(configPath(root), yaml.stringify(config));
41
- }
42
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
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;AAsBxB,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;IACtB,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,uGAAuG;IACtH,eAAe,EAAE,IAAI;CACtB,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,45 +0,0 @@
1
- import { BaseBackend } from '../types.js';
2
- import type { BackendCapabilities } from '../types.js';
3
- import type { WorkItem, NewWorkItem, NewComment, Comment, Template } from '../../types.js';
4
- export interface LocalBackendOptions {
5
- tempIds?: boolean;
6
- }
7
- export declare class LocalBackend extends BaseBackend {
8
- private root;
9
- private tempIds;
10
- private constructor();
11
- static create(root: string, options?: LocalBackendOptions): Promise<LocalBackend>;
12
- getRoot(): string;
13
- getCapabilities(): BackendCapabilities;
14
- getStatuses(): Promise<string[]>;
15
- getIterations(): Promise<string[]>;
16
- getWorkItemTypes(): Promise<string[]>;
17
- getAssignees(): Promise<string[]>;
18
- getLabels(): Promise<string[]>;
19
- getCurrentIteration(): Promise<string>;
20
- setCurrentIteration(name: string): Promise<void>;
21
- syncConfigFromRemote(remote: {
22
- iterations: string[];
23
- currentIteration: string;
24
- statuses: string[];
25
- types: string[];
26
- }): Promise<void>;
27
- private validateRelationships;
28
- listWorkItems(iteration?: string): Promise<WorkItem[]>;
29
- getWorkItem(id: string): Promise<WorkItem>;
30
- createWorkItem(data: NewWorkItem): Promise<WorkItem>;
31
- updateWorkItem(id: string, data: Partial<WorkItem>): Promise<WorkItem>;
32
- deleteWorkItem(id: string): Promise<void>;
33
- softDeleteWorkItem(id: string): Promise<void>;
34
- restoreWorkItem(id: string): Promise<void>;
35
- permanentlyDeleteWorkItem(id: string): Promise<void>;
36
- cleanupTrash(): Promise<void>;
37
- addComment(workItemId: string, comment: NewComment): Promise<Comment>;
38
- getItemUrl(id: string): string;
39
- openItem(id: string): Promise<void>;
40
- listTemplates(): Promise<Template[]>;
41
- getTemplate(slug: string): Promise<Template>;
42
- createTemplate(template: Template): Promise<Template>;
43
- updateTemplate(oldSlug: string, template: Template): Promise<Template>;
44
- deleteTemplate(slug: string): Promise<void>;
45
- }