@mytechtoday/augment-extensions 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +105 -6
  2. package/cli/dist/commands/agent.d.ts +37 -0
  3. package/cli/dist/commands/agent.d.ts.map +1 -0
  4. package/cli/dist/commands/agent.js +222 -0
  5. package/cli/dist/commands/agent.js.map +1 -0
  6. package/cli/dist/commands/beads.d.ts +64 -0
  7. package/cli/dist/commands/beads.d.ts.map +1 -0
  8. package/cli/dist/commands/beads.js +377 -0
  9. package/cli/dist/commands/beads.js.map +1 -0
  10. package/cli/dist/commands/change.d.ts +54 -0
  11. package/cli/dist/commands/change.d.ts.map +1 -0
  12. package/cli/dist/commands/change.js +243 -0
  13. package/cli/dist/commands/change.js.map +1 -0
  14. package/cli/dist/commands/clean.d.ts +15 -0
  15. package/cli/dist/commands/clean.d.ts.map +1 -0
  16. package/cli/dist/commands/clean.js +63 -0
  17. package/cli/dist/commands/clean.js.map +1 -0
  18. package/cli/dist/commands/clone.d.ts +15 -0
  19. package/cli/dist/commands/clone.d.ts.map +1 -0
  20. package/cli/dist/commands/clone.js +49 -0
  21. package/cli/dist/commands/clone.js.map +1 -0
  22. package/cli/dist/commands/config.d.ts +33 -0
  23. package/cli/dist/commands/config.d.ts.map +1 -0
  24. package/cli/dist/commands/config.js +166 -0
  25. package/cli/dist/commands/config.js.map +1 -0
  26. package/cli/dist/commands/context.d.ts +38 -0
  27. package/cli/dist/commands/context.d.ts.map +1 -0
  28. package/cli/dist/commands/context.js +205 -0
  29. package/cli/dist/commands/context.js.map +1 -0
  30. package/cli/dist/commands/create.d.ts +18 -0
  31. package/cli/dist/commands/create.d.ts.map +1 -0
  32. package/cli/dist/commands/create.js +178 -0
  33. package/cli/dist/commands/create.js.map +1 -0
  34. package/cli/dist/commands/diff.d.ts +19 -0
  35. package/cli/dist/commands/diff.d.ts.map +1 -0
  36. package/cli/dist/commands/diff.js +104 -0
  37. package/cli/dist/commands/diff.js.map +1 -0
  38. package/cli/dist/commands/doctor.d.ts +14 -0
  39. package/cli/dist/commands/doctor.d.ts.map +1 -0
  40. package/cli/dist/commands/doctor.js +62 -0
  41. package/cli/dist/commands/doctor.js.map +1 -0
  42. package/cli/dist/commands/export.d.ts +28 -0
  43. package/cli/dist/commands/export.d.ts.map +1 -0
  44. package/cli/dist/commands/export.js +135 -0
  45. package/cli/dist/commands/export.js.map +1 -0
  46. package/cli/dist/commands/import.d.ts +23 -0
  47. package/cli/dist/commands/import.d.ts.map +1 -0
  48. package/cli/dist/commands/import.js +118 -0
  49. package/cli/dist/commands/import.js.map +1 -0
  50. package/cli/dist/commands/prompt.d.ts +45 -0
  51. package/cli/dist/commands/prompt.d.ts.map +1 -0
  52. package/cli/dist/commands/prompt.js +223 -0
  53. package/cli/dist/commands/prompt.js.map +1 -0
  54. package/cli/dist/commands/spec.d.ts +57 -0
  55. package/cli/dist/commands/spec.d.ts.map +1 -0
  56. package/cli/dist/commands/spec.js +279 -0
  57. package/cli/dist/commands/spec.js.map +1 -0
  58. package/cli/dist/commands/stats.d.ts +18 -0
  59. package/cli/dist/commands/stats.d.ts.map +1 -0
  60. package/cli/dist/commands/stats.js +85 -0
  61. package/cli/dist/commands/stats.js.map +1 -0
  62. package/cli/dist/commands/task.d.ts +65 -0
  63. package/cli/dist/commands/task.d.ts.map +1 -0
  64. package/cli/dist/commands/task.js +282 -0
  65. package/cli/dist/commands/task.js.map +1 -0
  66. package/cli/dist/commands/template.d.ts +17 -0
  67. package/cli/dist/commands/template.d.ts.map +1 -0
  68. package/cli/dist/commands/template.js +55 -0
  69. package/cli/dist/commands/template.js.map +1 -0
  70. package/cli/dist/utils/agent-config.d.ts +129 -0
  71. package/cli/dist/utils/agent-config.d.ts.map +1 -0
  72. package/cli/dist/utils/agent-config.js +297 -0
  73. package/cli/dist/utils/agent-config.js.map +1 -0
  74. package/cli/dist/utils/beads-graph.d.ts +17 -0
  75. package/cli/dist/utils/beads-graph.d.ts.map +1 -0
  76. package/cli/dist/utils/beads-graph.js +150 -0
  77. package/cli/dist/utils/beads-graph.js.map +1 -0
  78. package/cli/dist/utils/beads-integration.d.ts +112 -0
  79. package/cli/dist/utils/beads-integration.d.ts.map +1 -0
  80. package/cli/dist/utils/beads-integration.js +312 -0
  81. package/cli/dist/utils/beads-integration.js.map +1 -0
  82. package/cli/dist/utils/beads-reporter.d.ts +17 -0
  83. package/cli/dist/utils/beads-reporter.d.ts.map +1 -0
  84. package/cli/dist/utils/beads-reporter.js +160 -0
  85. package/cli/dist/utils/beads-reporter.js.map +1 -0
  86. package/cli/dist/utils/cache-manager.d.ts +55 -0
  87. package/cli/dist/utils/cache-manager.d.ts.map +1 -0
  88. package/cli/dist/utils/cache-manager.js +150 -0
  89. package/cli/dist/utils/cache-manager.js.map +1 -0
  90. package/cli/dist/utils/change-manager.d.ts +70 -0
  91. package/cli/dist/utils/change-manager.d.ts.map +1 -0
  92. package/cli/dist/utils/change-manager.js +412 -0
  93. package/cli/dist/utils/change-manager.js.map +1 -0
  94. package/cli/dist/utils/config-manager-enhanced.d.ts +66 -0
  95. package/cli/dist/utils/config-manager-enhanced.d.ts.map +1 -0
  96. package/cli/dist/utils/config-manager-enhanced.js +77 -0
  97. package/cli/dist/utils/config-manager-enhanced.js.map +1 -0
  98. package/cli/dist/utils/context-manager.d.ts +96 -0
  99. package/cli/dist/utils/context-manager.d.ts.map +1 -0
  100. package/cli/dist/utils/context-manager.js +258 -0
  101. package/cli/dist/utils/context-manager.js.map +1 -0
  102. package/cli/dist/utils/diff-engine.d.ts +78 -0
  103. package/cli/dist/utils/diff-engine.d.ts.map +1 -0
  104. package/cli/dist/utils/diff-engine.js +233 -0
  105. package/cli/dist/utils/diff-engine.js.map +1 -0
  106. package/cli/dist/utils/export-system.d.ts +101 -0
  107. package/cli/dist/utils/export-system.d.ts.map +1 -0
  108. package/cli/dist/utils/export-system.js +289 -0
  109. package/cli/dist/utils/export-system.js.map +1 -0
  110. package/cli/dist/utils/health-checker.d.ts +66 -0
  111. package/cli/dist/utils/health-checker.d.ts.map +1 -0
  112. package/cli/dist/utils/health-checker.js +285 -0
  113. package/cli/dist/utils/health-checker.js.map +1 -0
  114. package/cli/dist/utils/import-system.d.ts +74 -0
  115. package/cli/dist/utils/import-system.d.ts.map +1 -0
  116. package/cli/dist/utils/import-system.js +317 -0
  117. package/cli/dist/utils/import-system.js.map +1 -0
  118. package/cli/dist/utils/module-cloner.d.ts +40 -0
  119. package/cli/dist/utils/module-cloner.d.ts.map +1 -0
  120. package/cli/dist/utils/module-cloner.js +136 -0
  121. package/cli/dist/utils/module-cloner.js.map +1 -0
  122. package/cli/dist/utils/prompt-manager.d.ts +90 -0
  123. package/cli/dist/utils/prompt-manager.d.ts.map +1 -0
  124. package/cli/dist/utils/prompt-manager.js +302 -0
  125. package/cli/dist/utils/prompt-manager.js.map +1 -0
  126. package/cli/dist/utils/spec-manager.d.ts +65 -0
  127. package/cli/dist/utils/spec-manager.d.ts.map +1 -0
  128. package/cli/dist/utils/spec-manager.js +329 -0
  129. package/cli/dist/utils/spec-manager.js.map +1 -0
  130. package/cli/dist/utils/stats-collector.d.ts +74 -0
  131. package/cli/dist/utils/stats-collector.d.ts.map +1 -0
  132. package/cli/dist/utils/stats-collector.js +164 -0
  133. package/cli/dist/utils/stats-collector.js.map +1 -0
  134. package/cli/dist/utils/template-engine.d.ts +47 -0
  135. package/cli/dist/utils/template-engine.d.ts.map +1 -0
  136. package/cli/dist/utils/template-engine.js +204 -0
  137. package/cli/dist/utils/template-engine.js.map +1 -0
  138. package/package.json +8 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Beads Integration Utility
3
+ *
4
+ * Core Beads integration utility for task tracking and management.
5
+ * Provides functions for reading, validating, filtering, and managing Beads tasks.
6
+ */
7
+ export interface BeadsTask {
8
+ id: string;
9
+ title: string;
10
+ description?: string;
11
+ status: 'open' | 'in_progress' | 'blocked' | 'closed';
12
+ priority?: number;
13
+ issue_type?: string;
14
+ owner?: string;
15
+ created_at?: string;
16
+ created_by?: string;
17
+ updated_at?: string;
18
+ closed_at?: string;
19
+ close_reason?: string;
20
+ labels?: string[];
21
+ dependencies?: Array<{
22
+ issue_id: string;
23
+ depends_on_id: string;
24
+ type: string;
25
+ created_at?: string;
26
+ created_by?: string;
27
+ }>;
28
+ blocks?: string[];
29
+ blocked_by?: string[];
30
+ comments?: Array<{
31
+ id: number;
32
+ issue_id: string;
33
+ author: string;
34
+ text: string;
35
+ created_at: string;
36
+ }>;
37
+ }
38
+ export interface BeadsStats {
39
+ total: number;
40
+ open: number;
41
+ in_progress: number;
42
+ blocked: number;
43
+ closed: number;
44
+ by_priority: Record<number, number>;
45
+ by_type: Record<string, number>;
46
+ by_owner: Record<string, number>;
47
+ avg_time_to_close?: number;
48
+ }
49
+ /**
50
+ * Read all tasks from .beads/issues.jsonl
51
+ */
52
+ export declare function readBeadsTasks(beadsPath?: string): BeadsTask[];
53
+ /**
54
+ * Get a single task by ID
55
+ */
56
+ export declare function getTask(taskId: string, beadsPath?: string): BeadsTask | null;
57
+ /**
58
+ * Filter tasks by status
59
+ */
60
+ export declare function filterByStatus(tasks: BeadsTask[], status: string | string[]): BeadsTask[];
61
+ /**
62
+ * Filter tasks by priority
63
+ */
64
+ export declare function filterByPriority(tasks: BeadsTask[], priority: number | number[]): BeadsTask[];
65
+ /**
66
+ * Filter tasks by labels/tags
67
+ */
68
+ export declare function filterByLabels(tasks: BeadsTask[], labels: string | string[]): BeadsTask[];
69
+ /**
70
+ * Filter tasks by owner
71
+ */
72
+ export declare function filterByOwner(tasks: BeadsTask[], owner: string): BeadsTask[];
73
+ /**
74
+ * Get tasks that are ready to work on (open and not blocked)
75
+ */
76
+ export declare function getReadyTasks(tasks: BeadsTask[]): BeadsTask[];
77
+ /**
78
+ * Calculate statistics for tasks
79
+ */
80
+ export declare function calculateStats(tasks: BeadsTask[]): BeadsStats;
81
+ /**
82
+ * Validate task ID format
83
+ */
84
+ export declare function validateTaskId(taskId: string): boolean;
85
+ /**
86
+ * Validate task structure
87
+ */
88
+ export declare function validateTask(task: any): {
89
+ valid: boolean;
90
+ errors: string[];
91
+ };
92
+ /**
93
+ * Sort tasks by field
94
+ */
95
+ export declare function sortTasks(tasks: BeadsTask[], field: 'priority' | 'created' | 'updated' | 'title', order?: 'asc' | 'desc'): BeadsTask[];
96
+ /**
97
+ * Search tasks by text
98
+ */
99
+ export declare function searchTasks(tasks: BeadsTask[], query: string): BeadsTask[];
100
+ /**
101
+ * Get dependency chain for a task
102
+ */
103
+ export declare function getDependencyChain(taskId: string, tasks: BeadsTask[]): string[];
104
+ /**
105
+ * Append a task to issues.jsonl
106
+ */
107
+ export declare function appendTask(task: BeadsTask, beadsPath?: string): void;
108
+ /**
109
+ * Update a task (appends update to JSONL)
110
+ */
111
+ export declare function updateTask(taskId: string, updates: Partial<BeadsTask>, beadsPath?: string): void;
112
+ //# sourceMappingURL=beads-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads-integration.d.ts","sourceRoot":"","sources":["../../src/utils/beads-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ /**
3
+ * Beads Integration Utility
4
+ *
5
+ * Core Beads integration utility for task tracking and management.
6
+ * Provides functions for reading, validating, filtering, and managing Beads tasks.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.readBeadsTasks = readBeadsTasks;
43
+ exports.getTask = getTask;
44
+ exports.filterByStatus = filterByStatus;
45
+ exports.filterByPriority = filterByPriority;
46
+ exports.filterByLabels = filterByLabels;
47
+ exports.filterByOwner = filterByOwner;
48
+ exports.getReadyTasks = getReadyTasks;
49
+ exports.calculateStats = calculateStats;
50
+ exports.validateTaskId = validateTaskId;
51
+ exports.validateTask = validateTask;
52
+ exports.sortTasks = sortTasks;
53
+ exports.searchTasks = searchTasks;
54
+ exports.getDependencyChain = getDependencyChain;
55
+ exports.appendTask = appendTask;
56
+ exports.updateTask = updateTask;
57
+ const fs = __importStar(require("fs"));
58
+ /**
59
+ * Read all tasks from .beads/issues.jsonl
60
+ */
61
+ function readBeadsTasks(beadsPath = 'augment-extensions/.beads/issues.jsonl') {
62
+ if (!fs.existsSync(beadsPath)) {
63
+ return [];
64
+ }
65
+ const content = fs.readFileSync(beadsPath, 'utf-8');
66
+ const lines = content.split('\n').filter(line => line.trim());
67
+ const tasksMap = new Map();
68
+ for (const line of lines) {
69
+ try {
70
+ const entry = JSON.parse(line);
71
+ if (entry.id) {
72
+ // Merge updates into existing task
73
+ if (tasksMap.has(entry.id)) {
74
+ const existing = tasksMap.get(entry.id);
75
+ tasksMap.set(entry.id, { ...existing, ...entry });
76
+ }
77
+ else {
78
+ tasksMap.set(entry.id, entry);
79
+ }
80
+ }
81
+ }
82
+ catch (error) {
83
+ console.error(`Failed to parse line: ${line}`, error);
84
+ }
85
+ }
86
+ return Array.from(tasksMap.values());
87
+ }
88
+ /**
89
+ * Get a single task by ID
90
+ */
91
+ function getTask(taskId, beadsPath) {
92
+ const tasks = readBeadsTasks(beadsPath);
93
+ return tasks.find(t => t.id === taskId) || null;
94
+ }
95
+ /**
96
+ * Filter tasks by status
97
+ */
98
+ function filterByStatus(tasks, status) {
99
+ const statuses = Array.isArray(status) ? status : [status];
100
+ return tasks.filter(t => statuses.includes(t.status));
101
+ }
102
+ /**
103
+ * Filter tasks by priority
104
+ */
105
+ function filterByPriority(tasks, priority) {
106
+ const priorities = Array.isArray(priority) ? priority : [priority];
107
+ return tasks.filter(t => t.priority !== undefined && priorities.includes(t.priority));
108
+ }
109
+ /**
110
+ * Filter tasks by labels/tags
111
+ */
112
+ function filterByLabels(tasks, labels) {
113
+ const labelList = Array.isArray(labels) ? labels : [labels];
114
+ return tasks.filter(t => t.labels && t.labels.some(label => labelList.includes(label)));
115
+ }
116
+ /**
117
+ * Filter tasks by owner
118
+ */
119
+ function filterByOwner(tasks, owner) {
120
+ return tasks.filter(t => t.owner === owner);
121
+ }
122
+ /**
123
+ * Get tasks that are ready to work on (open and not blocked)
124
+ */
125
+ function getReadyTasks(tasks) {
126
+ return tasks.filter(t => {
127
+ if (t.status !== 'open')
128
+ return false;
129
+ if (!t.blocked_by || t.blocked_by.length === 0)
130
+ return true;
131
+ // Check if all blockers are closed
132
+ const blockerIds = t.blocked_by;
133
+ const blockers = tasks.filter(task => blockerIds.includes(task.id));
134
+ return blockers.every(blocker => blocker.status === 'closed');
135
+ });
136
+ }
137
+ /**
138
+ * Calculate statistics for tasks
139
+ */
140
+ function calculateStats(tasks) {
141
+ const stats = {
142
+ total: tasks.length,
143
+ open: 0,
144
+ in_progress: 0,
145
+ blocked: 0,
146
+ closed: 0,
147
+ by_priority: {},
148
+ by_type: {},
149
+ by_owner: {}
150
+ };
151
+ let totalTimeToClose = 0;
152
+ let closedCount = 0;
153
+ for (const task of tasks) {
154
+ // Count by status
155
+ if (task.status === 'open')
156
+ stats.open++;
157
+ else if (task.status === 'in_progress')
158
+ stats.in_progress++;
159
+ else if (task.status === 'blocked')
160
+ stats.blocked++;
161
+ else if (task.status === 'closed')
162
+ stats.closed++;
163
+ // Count by priority
164
+ if (task.priority !== undefined) {
165
+ stats.by_priority[task.priority] = (stats.by_priority[task.priority] || 0) + 1;
166
+ }
167
+ // Count by type
168
+ if (task.issue_type) {
169
+ stats.by_type[task.issue_type] = (stats.by_type[task.issue_type] || 0) + 1;
170
+ }
171
+ // Count by owner
172
+ if (task.owner) {
173
+ stats.by_owner[task.owner] = (stats.by_owner[task.owner] || 0) + 1;
174
+ }
175
+ // Calculate average time to close
176
+ if (task.status === 'closed' && task.created_at && task.closed_at) {
177
+ const created = new Date(task.created_at).getTime();
178
+ const closed = new Date(task.closed_at).getTime();
179
+ totalTimeToClose += (closed - created);
180
+ closedCount++;
181
+ }
182
+ }
183
+ if (closedCount > 0) {
184
+ stats.avg_time_to_close = totalTimeToClose / closedCount;
185
+ }
186
+ return stats;
187
+ }
188
+ /**
189
+ * Validate task ID format
190
+ */
191
+ function validateTaskId(taskId) {
192
+ const pattern = /^bd-[a-z0-9]+([.-][a-z0-9]+)*$/;
193
+ return pattern.test(taskId);
194
+ }
195
+ /**
196
+ * Validate task structure
197
+ */
198
+ function validateTask(task) {
199
+ const errors = [];
200
+ if (!task.id) {
201
+ errors.push('Missing required field: id');
202
+ }
203
+ else if (!validateTaskId(task.id)) {
204
+ errors.push(`Invalid task ID format: ${task.id}`);
205
+ }
206
+ if (!task.title) {
207
+ errors.push('Missing required field: title');
208
+ }
209
+ if (!task.status) {
210
+ errors.push('Missing required field: status');
211
+ }
212
+ else if (!['open', 'in_progress', 'blocked', 'closed'].includes(task.status)) {
213
+ errors.push(`Invalid status: ${task.status}`);
214
+ }
215
+ return {
216
+ valid: errors.length === 0,
217
+ errors
218
+ };
219
+ }
220
+ /**
221
+ * Sort tasks by field
222
+ */
223
+ function sortTasks(tasks, field, order = 'asc') {
224
+ const sorted = [...tasks].sort((a, b) => {
225
+ let aVal;
226
+ let bVal;
227
+ switch (field) {
228
+ case 'priority':
229
+ aVal = a.priority ?? 999;
230
+ bVal = b.priority ?? 999;
231
+ break;
232
+ case 'created':
233
+ aVal = a.created_at ? new Date(a.created_at).getTime() : 0;
234
+ bVal = b.created_at ? new Date(b.created_at).getTime() : 0;
235
+ break;
236
+ case 'updated':
237
+ aVal = a.updated_at ? new Date(a.updated_at).getTime() : 0;
238
+ bVal = b.updated_at ? new Date(b.updated_at).getTime() : 0;
239
+ break;
240
+ case 'title':
241
+ aVal = a.title.toLowerCase();
242
+ bVal = b.title.toLowerCase();
243
+ break;
244
+ }
245
+ if (aVal < bVal)
246
+ return order === 'asc' ? -1 : 1;
247
+ if (aVal > bVal)
248
+ return order === 'asc' ? 1 : -1;
249
+ return 0;
250
+ });
251
+ return sorted;
252
+ }
253
+ /**
254
+ * Search tasks by text
255
+ */
256
+ function searchTasks(tasks, query) {
257
+ const lowerQuery = query.toLowerCase();
258
+ return tasks.filter(t => t.id.toLowerCase().includes(lowerQuery) ||
259
+ t.title.toLowerCase().includes(lowerQuery) ||
260
+ (t.description && t.description.toLowerCase().includes(lowerQuery)));
261
+ }
262
+ /**
263
+ * Get dependency chain for a task
264
+ */
265
+ function getDependencyChain(taskId, tasks) {
266
+ const chain = [];
267
+ const visited = new Set();
268
+ function traverse(id) {
269
+ if (visited.has(id))
270
+ return;
271
+ visited.add(id);
272
+ const task = tasks.find(t => t.id === id);
273
+ if (!task)
274
+ return;
275
+ chain.push(id);
276
+ if (task.blocked_by) {
277
+ for (const blockerId of task.blocked_by) {
278
+ traverse(blockerId);
279
+ }
280
+ }
281
+ }
282
+ traverse(taskId);
283
+ return chain;
284
+ }
285
+ /**
286
+ * Append a task to issues.jsonl
287
+ */
288
+ function appendTask(task, beadsPath = 'augment-extensions/.beads/issues.jsonl') {
289
+ const validation = validateTask(task);
290
+ if (!validation.valid) {
291
+ throw new Error(`Invalid task: ${validation.errors.join(', ')}`);
292
+ }
293
+ const line = JSON.stringify(task) + '\n';
294
+ fs.appendFileSync(beadsPath, line, 'utf-8');
295
+ }
296
+ /**
297
+ * Update a task (appends update to JSONL)
298
+ */
299
+ function updateTask(taskId, updates, beadsPath) {
300
+ const task = getTask(taskId, beadsPath);
301
+ if (!task) {
302
+ throw new Error(`Task not found: ${taskId}`);
303
+ }
304
+ const updatedTask = {
305
+ ...task,
306
+ ...updates,
307
+ id: taskId, // Ensure ID doesn't change
308
+ updated_at: new Date().toISOString()
309
+ };
310
+ appendTask(updatedTask, beadsPath);
311
+ }
312
+ //# sourceMappingURL=beads-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads-integration.js","sourceRoot":"","sources":["../../src/utils/beads-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Beads Reporter Utility
3
+ *
4
+ * Generates reports, statistics, and analytics for Beads tasks.
5
+ */
6
+ import { BeadsTask } from './beads-integration';
7
+ export interface ReportOptions {
8
+ format?: 'markdown' | 'html' | 'json' | 'csv';
9
+ period?: 'day' | 'week' | 'month' | 'all';
10
+ includeSections?: string[];
11
+ outputPath?: string;
12
+ }
13
+ /**
14
+ * Generate a comprehensive report
15
+ */
16
+ export declare function generateReport(tasks: BeadsTask[], options?: ReportOptions): string;
17
+ //# sourceMappingURL=beads-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads-reporter.d.ts","sourceRoot":"","sources":["../../src/utils/beads-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAA8D,MAAM,qBAAqB,CAAC;AAE5G,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC9C,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAgBtF"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ /**
3
+ * Beads Reporter Utility
4
+ *
5
+ * Generates reports, statistics, and analytics for Beads tasks.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.generateReport = generateReport;
9
+ const beads_integration_1 = require("./beads-integration");
10
+ /**
11
+ * Generate a comprehensive report
12
+ */
13
+ function generateReport(tasks, options = {}) {
14
+ const format = options.format || 'markdown';
15
+ const sections = options.includeSections || ['summary', 'stats', 'timeline'];
16
+ switch (format) {
17
+ case 'markdown':
18
+ return generateMarkdownReport(tasks, sections);
19
+ case 'html':
20
+ return generateHTMLReport(tasks, sections);
21
+ case 'json':
22
+ return generateJSONReport(tasks, sections);
23
+ case 'csv':
24
+ return generateCSVReport(tasks);
25
+ default:
26
+ throw new Error(`Unsupported format: ${format}`);
27
+ }
28
+ }
29
+ /**
30
+ * Generate Markdown report
31
+ */
32
+ function generateMarkdownReport(tasks, sections) {
33
+ const stats = (0, beads_integration_1.calculateStats)(tasks);
34
+ let report = '# Beads Task Report\n\n';
35
+ report += `Generated: ${new Date().toISOString()}\n\n`;
36
+ if (sections.includes('summary')) {
37
+ report += '## Summary\n\n';
38
+ report += `- **Total Tasks:** ${stats.total}\n`;
39
+ report += `- **Open:** ${stats.open}\n`;
40
+ report += `- **In Progress:** ${stats.in_progress}\n`;
41
+ report += `- **Blocked:** ${stats.blocked}\n`;
42
+ report += `- **Closed:** ${stats.closed}\n`;
43
+ report += `- **Completion Rate:** ${((stats.closed / stats.total) * 100).toFixed(1)}%\n\n`;
44
+ }
45
+ if (sections.includes('stats')) {
46
+ report += '## Statistics\n\n';
47
+ report += '### By Priority\n\n';
48
+ report += '| Priority | Count |\n';
49
+ report += '|----------|-------|\n';
50
+ for (const [priority, count] of Object.entries(stats.by_priority).sort()) {
51
+ report += `| ${priority} | ${count} |\n`;
52
+ }
53
+ report += '\n';
54
+ report += '### By Type\n\n';
55
+ report += '| Type | Count |\n';
56
+ report += '|------|-------|\n';
57
+ for (const [type, count] of Object.entries(stats.by_type).sort()) {
58
+ report += `| ${type} | ${count} |\n`;
59
+ }
60
+ report += '\n';
61
+ if (stats.avg_time_to_close) {
62
+ const days = Math.round(stats.avg_time_to_close / (1000 * 60 * 60 * 24));
63
+ report += `### Average Time to Close\n\n${days} days\n\n`;
64
+ }
65
+ }
66
+ if (sections.includes('timeline')) {
67
+ report += '## Recent Activity\n\n';
68
+ const recentTasks = tasks
69
+ .filter(t => t.updated_at)
70
+ .sort((a, b) => {
71
+ const aTime = new Date(a.updated_at).getTime();
72
+ const bTime = new Date(b.updated_at).getTime();
73
+ return bTime - aTime;
74
+ })
75
+ .slice(0, 10);
76
+ for (const task of recentTasks) {
77
+ const date = new Date(task.updated_at).toLocaleDateString();
78
+ report += `- **${task.id}**: ${task.title} (${task.status}) - ${date}\n`;
79
+ }
80
+ report += '\n';
81
+ }
82
+ return report;
83
+ }
84
+ /**
85
+ * Generate HTML report
86
+ */
87
+ function generateHTMLReport(tasks, sections) {
88
+ const stats = (0, beads_integration_1.calculateStats)(tasks);
89
+ let html = '<!DOCTYPE html>\n<html>\n<head>\n';
90
+ html += '<title>Beads Task Report</title>\n';
91
+ html += '<style>\n';
92
+ html += 'body { font-family: Arial, sans-serif; margin: 20px; }\n';
93
+ html += 'table { border-collapse: collapse; width: 100%; margin: 20px 0; }\n';
94
+ html += 'th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }\n';
95
+ html += 'th { background-color: #4CAF50; color: white; }\n';
96
+ html += '.stat { display: inline-block; margin: 10px; padding: 15px; background: #f0f0f0; border-radius: 5px; }\n';
97
+ html += '</style>\n</head>\n<body>\n';
98
+ html += '<h1>Beads Task Report</h1>\n';
99
+ html += `<p>Generated: ${new Date().toISOString()}</p>\n`;
100
+ if (sections.includes('summary')) {
101
+ html += '<h2>Summary</h2>\n';
102
+ html += `<div class="stat"><strong>Total:</strong> ${stats.total}</div>\n`;
103
+ html += `<div class="stat"><strong>Open:</strong> ${stats.open}</div>\n`;
104
+ html += `<div class="stat"><strong>In Progress:</strong> ${stats.in_progress}</div>\n`;
105
+ html += `<div class="stat"><strong>Blocked:</strong> ${stats.blocked}</div>\n`;
106
+ html += `<div class="stat"><strong>Closed:</strong> ${stats.closed}</div>\n`;
107
+ html += `<div class="stat"><strong>Completion:</strong> ${((stats.closed / stats.total) * 100).toFixed(1)}%</div>\n`;
108
+ }
109
+ if (sections.includes('stats')) {
110
+ html += '<h2>Statistics</h2>\n';
111
+ html += '<h3>By Priority</h3>\n<table>\n<tr><th>Priority</th><th>Count</th></tr>\n';
112
+ for (const [priority, count] of Object.entries(stats.by_priority).sort()) {
113
+ html += `<tr><td>${priority}</td><td>${count}</td></tr>\n`;
114
+ }
115
+ html += '</table>\n';
116
+ }
117
+ html += '</body>\n</html>';
118
+ return html;
119
+ }
120
+ /**
121
+ * Generate JSON report
122
+ */
123
+ function generateJSONReport(tasks, sections) {
124
+ const stats = (0, beads_integration_1.calculateStats)(tasks);
125
+ const report = {
126
+ generated: new Date().toISOString(),
127
+ stats,
128
+ tasks: tasks.map(t => ({
129
+ id: t.id,
130
+ title: t.title,
131
+ status: t.status,
132
+ priority: t.priority,
133
+ created_at: t.created_at,
134
+ updated_at: t.updated_at
135
+ }))
136
+ };
137
+ return JSON.stringify(report, null, 2);
138
+ }
139
+ /**
140
+ * Generate CSV report
141
+ */
142
+ function generateCSVReport(tasks) {
143
+ let csv = 'ID,Title,Status,Priority,Type,Owner,Created,Updated,Closed\n';
144
+ for (const task of tasks) {
145
+ const row = [
146
+ task.id,
147
+ `"${task.title.replace(/"/g, '""')}"`,
148
+ task.status,
149
+ task.priority || '',
150
+ task.issue_type || '',
151
+ task.owner || '',
152
+ task.created_at || '',
153
+ task.updated_at || '',
154
+ task.closed_at || ''
155
+ ];
156
+ csv += row.join(',') + '\n';
157
+ }
158
+ return csv;
159
+ }
160
+ //# sourceMappingURL=beads-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads-reporter.js","sourceRoot":"","sources":["../../src/utils/beads-reporter.ts"],"names":[],"mappings":"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"}