work-chronicler 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +432 -0
  2. package/bin/mcp.js +6 -0
  3. package/bin/work-chronicler.js +3 -0
  4. package/dist/cli/analyzer/classifier.d.ts +31 -0
  5. package/dist/cli/analyzer/classifier.d.ts.map +1 -0
  6. package/dist/cli/analyzer/classifier.js +171 -0
  7. package/dist/cli/analyzer/index.d.ts +5 -0
  8. package/dist/cli/analyzer/index.d.ts.map +1 -0
  9. package/dist/cli/analyzer/index.js +4 -0
  10. package/dist/cli/analyzer/projects.d.ts +10 -0
  11. package/dist/cli/analyzer/projects.d.ts.map +1 -0
  12. package/dist/cli/analyzer/projects.js +228 -0
  13. package/dist/cli/analyzer/stats.d.ts +30 -0
  14. package/dist/cli/analyzer/stats.d.ts.map +1 -0
  15. package/dist/cli/analyzer/stats.js +80 -0
  16. package/dist/cli/analyzer/timeline.d.ts +6 -0
  17. package/dist/cli/analyzer/timeline.d.ts.map +1 -0
  18. package/dist/cli/analyzer/timeline.js +224 -0
  19. package/dist/cli/commands/analyze.d.ts +3 -0
  20. package/dist/cli/commands/analyze.d.ts.map +1 -0
  21. package/dist/cli/commands/analyze.js +216 -0
  22. package/dist/cli/commands/fetch/all.d.ts +3 -0
  23. package/dist/cli/commands/fetch/all.d.ts.map +1 -0
  24. package/dist/cli/commands/fetch/all.js +91 -0
  25. package/dist/cli/commands/fetch/github.d.ts +3 -0
  26. package/dist/cli/commands/fetch/github.d.ts.map +1 -0
  27. package/dist/cli/commands/fetch/github.js +39 -0
  28. package/dist/cli/commands/fetch/jira.d.ts +3 -0
  29. package/dist/cli/commands/fetch/jira.d.ts.map +1 -0
  30. package/dist/cli/commands/fetch/jira.js +39 -0
  31. package/dist/cli/commands/filter.d.ts +3 -0
  32. package/dist/cli/commands/filter.d.ts.map +1 -0
  33. package/dist/cli/commands/filter.js +247 -0
  34. package/dist/cli/commands/init.d.ts +3 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +47 -0
  37. package/dist/cli/commands/link.d.ts +3 -0
  38. package/dist/cli/commands/link.d.ts.map +1 -0
  39. package/dist/cli/commands/link.js +25 -0
  40. package/dist/cli/commands/mcp.d.ts +3 -0
  41. package/dist/cli/commands/mcp.d.ts.map +1 -0
  42. package/dist/cli/commands/mcp.js +43 -0
  43. package/dist/cli/commands/status.d.ts +3 -0
  44. package/dist/cli/commands/status.d.ts.map +1 -0
  45. package/dist/cli/commands/status.js +28 -0
  46. package/dist/cli/fetchers/github.d.ts +20 -0
  47. package/dist/cli/fetchers/github.d.ts.map +1 -0
  48. package/dist/cli/fetchers/github.js +345 -0
  49. package/dist/cli/fetchers/jira.d.ts +20 -0
  50. package/dist/cli/fetchers/jira.d.ts.map +1 -0
  51. package/dist/cli/fetchers/jira.js +268 -0
  52. package/dist/cli/index.d.ts +3 -0
  53. package/dist/cli/index.d.ts.map +1 -0
  54. package/dist/cli/index.js +43 -0
  55. package/dist/cli/linker/index.d.ts +17 -0
  56. package/dist/cli/linker/index.d.ts.map +1 -0
  57. package/dist/cli/linker/index.js +129 -0
  58. package/dist/cli/prompts/index.d.ts +61 -0
  59. package/dist/cli/prompts/index.d.ts.map +1 -0
  60. package/dist/cli/prompts/index.js +258 -0
  61. package/dist/core/config/loader.d.ts +61 -0
  62. package/dist/core/config/loader.d.ts.map +1 -0
  63. package/dist/core/config/loader.js +146 -0
  64. package/dist/core/config/schema.d.ts +587 -0
  65. package/dist/core/config/schema.d.ts.map +1 -0
  66. package/dist/core/config/schema.js +95 -0
  67. package/dist/core/index.d.ts +5 -0
  68. package/dist/core/index.d.ts.map +1 -0
  69. package/dist/core/index.js +7 -0
  70. package/dist/core/storage/index.d.ts +4 -0
  71. package/dist/core/storage/index.d.ts.map +1 -0
  72. package/dist/core/storage/index.js +3 -0
  73. package/dist/core/storage/paths.d.ts +85 -0
  74. package/dist/core/storage/paths.d.ts.map +1 -0
  75. package/dist/core/storage/paths.js +110 -0
  76. package/dist/core/storage/reader.d.ts +69 -0
  77. package/dist/core/storage/reader.d.ts.map +1 -0
  78. package/dist/core/storage/reader.js +181 -0
  79. package/dist/core/storage/writer.d.ts +41 -0
  80. package/dist/core/storage/writer.d.ts.map +1 -0
  81. package/dist/core/storage/writer.js +50 -0
  82. package/dist/core/types/index.d.ts +5 -0
  83. package/dist/core/types/index.d.ts.map +1 -0
  84. package/dist/core/types/index.js +4 -0
  85. package/dist/core/types/pr.d.ts +75 -0
  86. package/dist/core/types/pr.d.ts.map +1 -0
  87. package/dist/core/types/pr.js +35 -0
  88. package/dist/core/types/project.d.ts +450 -0
  89. package/dist/core/types/project.d.ts.map +1 -0
  90. package/dist/core/types/project.js +75 -0
  91. package/dist/core/types/ticket.d.ts +51 -0
  92. package/dist/core/types/ticket.d.ts.map +1 -0
  93. package/dist/core/types/ticket.js +17 -0
  94. package/dist/core/types/timeline.d.ts +1177 -0
  95. package/dist/core/types/timeline.d.ts.map +1 -0
  96. package/dist/core/types/timeline.js +100 -0
  97. package/dist/mcp/index.d.ts +15 -0
  98. package/dist/mcp/index.d.ts.map +1 -0
  99. package/dist/mcp/index.js +26 -0
  100. package/dist/mcp/server.d.ts +22 -0
  101. package/dist/mcp/server.d.ts.map +1 -0
  102. package/dist/mcp/server.js +584 -0
  103. package/dist/mcp/tools/get-stats.d.ts +26 -0
  104. package/dist/mcp/tools/get-stats.d.ts.map +1 -0
  105. package/dist/mcp/tools/get-stats.js +64 -0
  106. package/dist/mcp/tools/search-prs.d.ts +18 -0
  107. package/dist/mcp/tools/search-prs.d.ts.map +1 -0
  108. package/dist/mcp/tools/search-prs.js +44 -0
  109. package/dist/mcp/tools/search-tickets.d.ts +19 -0
  110. package/dist/mcp/tools/search-tickets.d.ts.map +1 -0
  111. package/dist/mcp/tools/search-tickets.js +49 -0
  112. package/package.json +79 -0
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * PR impact levels for filtering and summarization
4
+ * - flagship: Large initiatives, platform changes, multi-PR efforts (500+ lines or 15+ files)
5
+ * - major: Significant features, larger refactors (200-499 lines or 8-14 files)
6
+ * - standard: Regular feature work, bug fixes, moderate changes (20-199 lines)
7
+ * - minor: Small fixes, typos, dependency bumps, docs (<20 lines)
8
+ */
9
+ export const PRImpactSchema = z.enum([
10
+ 'flagship',
11
+ 'major',
12
+ 'standard',
13
+ 'minor',
14
+ ]);
15
+ /**
16
+ * Schema for a Pull Request stored in the work-log
17
+ */
18
+ export const PullRequestSchema = z.object({
19
+ title: z.string(),
20
+ prNumber: z.number(),
21
+ repository: z.string(),
22
+ org: z.string(),
23
+ author: z.string(),
24
+ state: z.enum(['open', 'closed', 'merged']),
25
+ createdAt: z.string().datetime(),
26
+ mergedAt: z.string().datetime().nullable(),
27
+ closedAt: z.string().datetime().nullable(),
28
+ url: z.string().url(),
29
+ additions: z.number(),
30
+ deletions: z.number(),
31
+ changedFiles: z.number(),
32
+ jiraTickets: z.array(z.string()).default([]),
33
+ labels: z.array(z.string()).default([]),
34
+ impact: PRImpactSchema.optional(),
35
+ });
@@ -0,0 +1,450 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Confidence level for project grouping detection
4
+ */
5
+ export declare const ProjectConfidenceSchema: z.ZodEnum<["high", "medium", "low"]>;
6
+ export type ProjectConfidence = z.infer<typeof ProjectConfidenceSchema>;
7
+ /**
8
+ * Signal type that led to project grouping
9
+ */
10
+ export declare const ProjectSignalSchema: z.ZodEnum<["tickets", "jiraProject", "time", "labels"]>;
11
+ export type ProjectSignal = z.infer<typeof ProjectSignalSchema>;
12
+ /**
13
+ * Signals that contributed to a project grouping
14
+ */
15
+ export declare const ProjectSignalsSchema: z.ZodObject<{
16
+ sharedTickets: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
17
+ jiraProject: z.ZodOptional<z.ZodString>;
18
+ timeRange: z.ZodOptional<z.ZodObject<{
19
+ earliest: z.ZodString;
20
+ latest: z.ZodString;
21
+ }, "strip", z.ZodTypeAny, {
22
+ earliest: string;
23
+ latest: string;
24
+ }, {
25
+ earliest: string;
26
+ latest: string;
27
+ }>>;
28
+ sharedLabels: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
29
+ commonKeywords: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ sharedTickets: string[];
32
+ sharedLabels: string[];
33
+ commonKeywords: string[];
34
+ jiraProject?: string | undefined;
35
+ timeRange?: {
36
+ earliest: string;
37
+ latest: string;
38
+ } | undefined;
39
+ }, {
40
+ jiraProject?: string | undefined;
41
+ sharedTickets?: string[] | undefined;
42
+ timeRange?: {
43
+ earliest: string;
44
+ latest: string;
45
+ } | undefined;
46
+ sharedLabels?: string[] | undefined;
47
+ commonKeywords?: string[] | undefined;
48
+ }>;
49
+ export type ProjectSignals = z.infer<typeof ProjectSignalsSchema>;
50
+ /**
51
+ * A detected project grouping of related PRs and tickets
52
+ */
53
+ export declare const ProjectGroupingSchema: z.ZodObject<{
54
+ projectId: z.ZodString;
55
+ name: z.ZodString;
56
+ description: z.ZodOptional<z.ZodString>;
57
+ prUrls: z.ZodArray<z.ZodString, "many">;
58
+ ticketKeys: z.ZodArray<z.ZodString, "many">;
59
+ signals: z.ZodObject<{
60
+ sharedTickets: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
61
+ jiraProject: z.ZodOptional<z.ZodString>;
62
+ timeRange: z.ZodOptional<z.ZodObject<{
63
+ earliest: z.ZodString;
64
+ latest: z.ZodString;
65
+ }, "strip", z.ZodTypeAny, {
66
+ earliest: string;
67
+ latest: string;
68
+ }, {
69
+ earliest: string;
70
+ latest: string;
71
+ }>>;
72
+ sharedLabels: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
73
+ commonKeywords: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
74
+ }, "strip", z.ZodTypeAny, {
75
+ sharedTickets: string[];
76
+ sharedLabels: string[];
77
+ commonKeywords: string[];
78
+ jiraProject?: string | undefined;
79
+ timeRange?: {
80
+ earliest: string;
81
+ latest: string;
82
+ } | undefined;
83
+ }, {
84
+ jiraProject?: string | undefined;
85
+ sharedTickets?: string[] | undefined;
86
+ timeRange?: {
87
+ earliest: string;
88
+ latest: string;
89
+ } | undefined;
90
+ sharedLabels?: string[] | undefined;
91
+ commonKeywords?: string[] | undefined;
92
+ }>;
93
+ confidence: z.ZodEnum<["high", "medium", "low"]>;
94
+ dominantSignal: z.ZodEnum<["tickets", "jiraProject", "time", "labels"]>;
95
+ stats: z.ZodObject<{
96
+ prCount: z.ZodNumber;
97
+ ticketCount: z.ZodNumber;
98
+ totalAdditions: z.ZodNumber;
99
+ totalDeletions: z.ZodNumber;
100
+ repos: z.ZodArray<z.ZodString, "many">;
101
+ }, "strip", z.ZodTypeAny, {
102
+ repos: string[];
103
+ prCount: number;
104
+ ticketCount: number;
105
+ totalAdditions: number;
106
+ totalDeletions: number;
107
+ }, {
108
+ repos: string[];
109
+ prCount: number;
110
+ ticketCount: number;
111
+ totalAdditions: number;
112
+ totalDeletions: number;
113
+ }>;
114
+ }, "strip", z.ZodTypeAny, {
115
+ name: string;
116
+ projectId: string;
117
+ prUrls: string[];
118
+ ticketKeys: string[];
119
+ signals: {
120
+ sharedTickets: string[];
121
+ sharedLabels: string[];
122
+ commonKeywords: string[];
123
+ jiraProject?: string | undefined;
124
+ timeRange?: {
125
+ earliest: string;
126
+ latest: string;
127
+ } | undefined;
128
+ };
129
+ confidence: "high" | "medium" | "low";
130
+ dominantSignal: "labels" | "tickets" | "jiraProject" | "time";
131
+ stats: {
132
+ repos: string[];
133
+ prCount: number;
134
+ ticketCount: number;
135
+ totalAdditions: number;
136
+ totalDeletions: number;
137
+ };
138
+ description?: string | undefined;
139
+ }, {
140
+ name: string;
141
+ projectId: string;
142
+ prUrls: string[];
143
+ ticketKeys: string[];
144
+ signals: {
145
+ jiraProject?: string | undefined;
146
+ sharedTickets?: string[] | undefined;
147
+ timeRange?: {
148
+ earliest: string;
149
+ latest: string;
150
+ } | undefined;
151
+ sharedLabels?: string[] | undefined;
152
+ commonKeywords?: string[] | undefined;
153
+ };
154
+ confidence: "high" | "medium" | "low";
155
+ dominantSignal: "labels" | "tickets" | "jiraProject" | "time";
156
+ stats: {
157
+ repos: string[];
158
+ prCount: number;
159
+ ticketCount: number;
160
+ totalAdditions: number;
161
+ totalDeletions: number;
162
+ };
163
+ description?: string | undefined;
164
+ }>;
165
+ export type ProjectGrouping = z.infer<typeof ProjectGroupingSchema>;
166
+ /**
167
+ * Output of project detection analysis
168
+ */
169
+ export declare const ProjectsAnalysisSchema: z.ZodObject<{
170
+ generatedAt: z.ZodString;
171
+ dateRange: z.ZodObject<{
172
+ since: z.ZodString;
173
+ until: z.ZodString;
174
+ }, "strip", z.ZodTypeAny, {
175
+ since: string;
176
+ until: string;
177
+ }, {
178
+ since: string;
179
+ until: string;
180
+ }>;
181
+ projects: z.ZodArray<z.ZodObject<{
182
+ projectId: z.ZodString;
183
+ name: z.ZodString;
184
+ description: z.ZodOptional<z.ZodString>;
185
+ prUrls: z.ZodArray<z.ZodString, "many">;
186
+ ticketKeys: z.ZodArray<z.ZodString, "many">;
187
+ signals: z.ZodObject<{
188
+ sharedTickets: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
189
+ jiraProject: z.ZodOptional<z.ZodString>;
190
+ timeRange: z.ZodOptional<z.ZodObject<{
191
+ earliest: z.ZodString;
192
+ latest: z.ZodString;
193
+ }, "strip", z.ZodTypeAny, {
194
+ earliest: string;
195
+ latest: string;
196
+ }, {
197
+ earliest: string;
198
+ latest: string;
199
+ }>>;
200
+ sharedLabels: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
201
+ commonKeywords: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
202
+ }, "strip", z.ZodTypeAny, {
203
+ sharedTickets: string[];
204
+ sharedLabels: string[];
205
+ commonKeywords: string[];
206
+ jiraProject?: string | undefined;
207
+ timeRange?: {
208
+ earliest: string;
209
+ latest: string;
210
+ } | undefined;
211
+ }, {
212
+ jiraProject?: string | undefined;
213
+ sharedTickets?: string[] | undefined;
214
+ timeRange?: {
215
+ earliest: string;
216
+ latest: string;
217
+ } | undefined;
218
+ sharedLabels?: string[] | undefined;
219
+ commonKeywords?: string[] | undefined;
220
+ }>;
221
+ confidence: z.ZodEnum<["high", "medium", "low"]>;
222
+ dominantSignal: z.ZodEnum<["tickets", "jiraProject", "time", "labels"]>;
223
+ stats: z.ZodObject<{
224
+ prCount: z.ZodNumber;
225
+ ticketCount: z.ZodNumber;
226
+ totalAdditions: z.ZodNumber;
227
+ totalDeletions: z.ZodNumber;
228
+ repos: z.ZodArray<z.ZodString, "many">;
229
+ }, "strip", z.ZodTypeAny, {
230
+ repos: string[];
231
+ prCount: number;
232
+ ticketCount: number;
233
+ totalAdditions: number;
234
+ totalDeletions: number;
235
+ }, {
236
+ repos: string[];
237
+ prCount: number;
238
+ ticketCount: number;
239
+ totalAdditions: number;
240
+ totalDeletions: number;
241
+ }>;
242
+ }, "strip", z.ZodTypeAny, {
243
+ name: string;
244
+ projectId: string;
245
+ prUrls: string[];
246
+ ticketKeys: string[];
247
+ signals: {
248
+ sharedTickets: string[];
249
+ sharedLabels: string[];
250
+ commonKeywords: string[];
251
+ jiraProject?: string | undefined;
252
+ timeRange?: {
253
+ earliest: string;
254
+ latest: string;
255
+ } | undefined;
256
+ };
257
+ confidence: "high" | "medium" | "low";
258
+ dominantSignal: "labels" | "tickets" | "jiraProject" | "time";
259
+ stats: {
260
+ repos: string[];
261
+ prCount: number;
262
+ ticketCount: number;
263
+ totalAdditions: number;
264
+ totalDeletions: number;
265
+ };
266
+ description?: string | undefined;
267
+ }, {
268
+ name: string;
269
+ projectId: string;
270
+ prUrls: string[];
271
+ ticketKeys: string[];
272
+ signals: {
273
+ jiraProject?: string | undefined;
274
+ sharedTickets?: string[] | undefined;
275
+ timeRange?: {
276
+ earliest: string;
277
+ latest: string;
278
+ } | undefined;
279
+ sharedLabels?: string[] | undefined;
280
+ commonKeywords?: string[] | undefined;
281
+ };
282
+ confidence: "high" | "medium" | "low";
283
+ dominantSignal: "labels" | "tickets" | "jiraProject" | "time";
284
+ stats: {
285
+ repos: string[];
286
+ prCount: number;
287
+ ticketCount: number;
288
+ totalAdditions: number;
289
+ totalDeletions: number;
290
+ };
291
+ description?: string | undefined;
292
+ }>, "many">;
293
+ summary: z.ZodObject<{
294
+ totalProjects: z.ZodNumber;
295
+ byConfidence: z.ZodObject<{
296
+ high: z.ZodNumber;
297
+ medium: z.ZodNumber;
298
+ low: z.ZodNumber;
299
+ }, "strip", z.ZodTypeAny, {
300
+ high: number;
301
+ medium: number;
302
+ low: number;
303
+ }, {
304
+ high: number;
305
+ medium: number;
306
+ low: number;
307
+ }>;
308
+ bySignal: z.ZodObject<{
309
+ tickets: z.ZodNumber;
310
+ jiraProject: z.ZodNumber;
311
+ time: z.ZodNumber;
312
+ labels: z.ZodNumber;
313
+ }, "strip", z.ZodTypeAny, {
314
+ labels: number;
315
+ tickets: number;
316
+ jiraProject: number;
317
+ time: number;
318
+ }, {
319
+ labels: number;
320
+ tickets: number;
321
+ jiraProject: number;
322
+ time: number;
323
+ }>;
324
+ unassignedPRs: z.ZodNumber;
325
+ }, "strip", z.ZodTypeAny, {
326
+ totalProjects: number;
327
+ byConfidence: {
328
+ high: number;
329
+ medium: number;
330
+ low: number;
331
+ };
332
+ bySignal: {
333
+ labels: number;
334
+ tickets: number;
335
+ jiraProject: number;
336
+ time: number;
337
+ };
338
+ unassignedPRs: number;
339
+ }, {
340
+ totalProjects: number;
341
+ byConfidence: {
342
+ high: number;
343
+ medium: number;
344
+ low: number;
345
+ };
346
+ bySignal: {
347
+ labels: number;
348
+ tickets: number;
349
+ jiraProject: number;
350
+ time: number;
351
+ };
352
+ unassignedPRs: number;
353
+ }>;
354
+ }, "strip", z.ZodTypeAny, {
355
+ projects: {
356
+ name: string;
357
+ projectId: string;
358
+ prUrls: string[];
359
+ ticketKeys: string[];
360
+ signals: {
361
+ sharedTickets: string[];
362
+ sharedLabels: string[];
363
+ commonKeywords: string[];
364
+ jiraProject?: string | undefined;
365
+ timeRange?: {
366
+ earliest: string;
367
+ latest: string;
368
+ } | undefined;
369
+ };
370
+ confidence: "high" | "medium" | "low";
371
+ dominantSignal: "labels" | "tickets" | "jiraProject" | "time";
372
+ stats: {
373
+ repos: string[];
374
+ prCount: number;
375
+ ticketCount: number;
376
+ totalAdditions: number;
377
+ totalDeletions: number;
378
+ };
379
+ description?: string | undefined;
380
+ }[];
381
+ summary: {
382
+ totalProjects: number;
383
+ byConfidence: {
384
+ high: number;
385
+ medium: number;
386
+ low: number;
387
+ };
388
+ bySignal: {
389
+ labels: number;
390
+ tickets: number;
391
+ jiraProject: number;
392
+ time: number;
393
+ };
394
+ unassignedPRs: number;
395
+ };
396
+ generatedAt: string;
397
+ dateRange: {
398
+ since: string;
399
+ until: string;
400
+ };
401
+ }, {
402
+ projects: {
403
+ name: string;
404
+ projectId: string;
405
+ prUrls: string[];
406
+ ticketKeys: string[];
407
+ signals: {
408
+ jiraProject?: string | undefined;
409
+ sharedTickets?: string[] | undefined;
410
+ timeRange?: {
411
+ earliest: string;
412
+ latest: string;
413
+ } | undefined;
414
+ sharedLabels?: string[] | undefined;
415
+ commonKeywords?: string[] | undefined;
416
+ };
417
+ confidence: "high" | "medium" | "low";
418
+ dominantSignal: "labels" | "tickets" | "jiraProject" | "time";
419
+ stats: {
420
+ repos: string[];
421
+ prCount: number;
422
+ ticketCount: number;
423
+ totalAdditions: number;
424
+ totalDeletions: number;
425
+ };
426
+ description?: string | undefined;
427
+ }[];
428
+ summary: {
429
+ totalProjects: number;
430
+ byConfidence: {
431
+ high: number;
432
+ medium: number;
433
+ low: number;
434
+ };
435
+ bySignal: {
436
+ labels: number;
437
+ tickets: number;
438
+ jiraProject: number;
439
+ time: number;
440
+ };
441
+ unassignedPRs: number;
442
+ };
443
+ generatedAt: string;
444
+ dateRange: {
445
+ since: string;
446
+ until: string;
447
+ };
448
+ }>;
449
+ export type ProjectsAnalysis = z.infer<typeof ProjectsAnalysisSchema>;
450
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/core/types/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,uBAAuB,sCAAoC,CAAC;AACzE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,mBAAmB,yDAK9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Confidence level for project grouping detection
4
+ */
5
+ export const ProjectConfidenceSchema = z.enum(['high', 'medium', 'low']);
6
+ /**
7
+ * Signal type that led to project grouping
8
+ */
9
+ export const ProjectSignalSchema = z.enum([
10
+ 'tickets', // PRs share JIRA tickets
11
+ 'jiraProject', // PRs in same JIRA project
12
+ 'time', // PRs within time proximity
13
+ 'labels', // PRs share labels/patterns
14
+ ]);
15
+ /**
16
+ * Signals that contributed to a project grouping
17
+ */
18
+ export const ProjectSignalsSchema = z.object({
19
+ sharedTickets: z.array(z.string()).default([]),
20
+ jiraProject: z.string().optional(),
21
+ timeRange: z
22
+ .object({
23
+ earliest: z.string(),
24
+ latest: z.string(),
25
+ })
26
+ .optional(),
27
+ sharedLabels: z.array(z.string()).default([]),
28
+ commonKeywords: z.array(z.string()).default([]),
29
+ });
30
+ /**
31
+ * A detected project grouping of related PRs and tickets
32
+ */
33
+ export const ProjectGroupingSchema = z.object({
34
+ projectId: z.string(),
35
+ name: z.string(),
36
+ description: z.string().optional(),
37
+ prUrls: z.array(z.string()),
38
+ ticketKeys: z.array(z.string()),
39
+ signals: ProjectSignalsSchema,
40
+ confidence: ProjectConfidenceSchema,
41
+ dominantSignal: ProjectSignalSchema,
42
+ stats: z.object({
43
+ prCount: z.number(),
44
+ ticketCount: z.number(),
45
+ totalAdditions: z.number(),
46
+ totalDeletions: z.number(),
47
+ repos: z.array(z.string()),
48
+ }),
49
+ });
50
+ /**
51
+ * Output of project detection analysis
52
+ */
53
+ export const ProjectsAnalysisSchema = z.object({
54
+ generatedAt: z.string(),
55
+ dateRange: z.object({
56
+ since: z.string(),
57
+ until: z.string(),
58
+ }),
59
+ projects: z.array(ProjectGroupingSchema),
60
+ summary: z.object({
61
+ totalProjects: z.number(),
62
+ byConfidence: z.object({
63
+ high: z.number(),
64
+ medium: z.number(),
65
+ low: z.number(),
66
+ }),
67
+ bySignal: z.object({
68
+ tickets: z.number(),
69
+ jiraProject: z.number(),
70
+ time: z.number(),
71
+ labels: z.number(),
72
+ }),
73
+ unassignedPRs: z.number(),
74
+ }),
75
+ });
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for a JIRA ticket stored in the work-log
4
+ */
5
+ export declare const JiraTicketSchema: z.ZodObject<{
6
+ key: z.ZodString;
7
+ summary: z.ZodString;
8
+ project: z.ZodString;
9
+ org: z.ZodString;
10
+ issueType: z.ZodString;
11
+ status: z.ZodString;
12
+ storyPoints: z.ZodNullable<z.ZodNumber>;
13
+ url: z.ZodString;
14
+ createdAt: z.ZodString;
15
+ resolvedAt: z.ZodNullable<z.ZodString>;
16
+ linkedPRs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ status: string;
19
+ url: string;
20
+ org: string;
21
+ createdAt: string;
22
+ key: string;
23
+ summary: string;
24
+ project: string;
25
+ issueType: string;
26
+ storyPoints: number | null;
27
+ resolvedAt: string | null;
28
+ linkedPRs: string[];
29
+ }, {
30
+ status: string;
31
+ url: string;
32
+ org: string;
33
+ createdAt: string;
34
+ key: string;
35
+ summary: string;
36
+ project: string;
37
+ issueType: string;
38
+ storyPoints: number | null;
39
+ resolvedAt: string | null;
40
+ linkedPRs?: string[] | undefined;
41
+ }>;
42
+ export type JiraTicket = z.infer<typeof JiraTicketSchema>;
43
+ /**
44
+ * Ticket file with frontmatter and body content
45
+ */
46
+ export interface JiraTicketFile {
47
+ frontmatter: JiraTicket;
48
+ body: string;
49
+ filePath: string;
50
+ }
51
+ //# sourceMappingURL=ticket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../src/core/types/ticket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,UAAU,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for a JIRA ticket stored in the work-log
4
+ */
5
+ export const JiraTicketSchema = z.object({
6
+ key: z.string(),
7
+ summary: z.string(),
8
+ project: z.string(),
9
+ org: z.string(),
10
+ issueType: z.string(),
11
+ status: z.string(),
12
+ storyPoints: z.number().nullable(),
13
+ url: z.string(), // Not validated as URL since config may have typos
14
+ createdAt: z.string(), // Not strict datetime since JIRA uses various formats
15
+ resolvedAt: z.string().nullable(),
16
+ linkedPRs: z.array(z.string()).default([]),
17
+ });