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 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../src/core/types/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;EAQ/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { z } from 'zod';
2
+ import { PRImpactSchema } from './pr.js';
3
+ /**
4
+ * A PR entry in the timeline
5
+ */
6
+ export const TimelinePRSchema = z.object({
7
+ url: z.string(),
8
+ title: z.string(),
9
+ repository: z.string(),
10
+ org: z.string(),
11
+ prNumber: z.number(),
12
+ state: z.enum(['open', 'closed', 'merged']),
13
+ impact: PRImpactSchema.optional(),
14
+ additions: z.number(),
15
+ deletions: z.number(),
16
+ jiraTickets: z.array(z.string()),
17
+ date: z.string(), // ISO date (YYYY-MM-DD)
18
+ });
19
+ /**
20
+ * A ticket entry in the timeline
21
+ */
22
+ export const TimelineTicketSchema = z.object({
23
+ key: z.string(),
24
+ summary: z.string(),
25
+ project: z.string(),
26
+ issueType: z.string(),
27
+ status: z.string(),
28
+ linkedPRs: z.array(z.string()),
29
+ date: z.string(), // ISO date (YYYY-MM-DD)
30
+ });
31
+ /**
32
+ * A single week in the timeline
33
+ */
34
+ export const TimelineWeekSchema = z.object({
35
+ weekStart: z.string(), // ISO date of Monday
36
+ weekEnd: z.string(), // ISO date of Sunday
37
+ weekNumber: z.number(), // Week number in year (1-53)
38
+ year: z.number(),
39
+ prs: z.array(TimelinePRSchema),
40
+ tickets: z.array(TimelineTicketSchema),
41
+ stats: z.object({
42
+ prCount: z.number(),
43
+ ticketCount: z.number(),
44
+ additions: z.number(),
45
+ deletions: z.number(),
46
+ byImpact: z.object({
47
+ flagship: z.number(),
48
+ major: z.number(),
49
+ standard: z.number(),
50
+ minor: z.number(),
51
+ }),
52
+ }),
53
+ });
54
+ /**
55
+ * A single month in the timeline
56
+ */
57
+ export const TimelineMonthSchema = z.object({
58
+ month: z.string(), // YYYY-MM format
59
+ monthName: z.string(), // e.g., "January 2025"
60
+ weeks: z.array(TimelineWeekSchema),
61
+ stats: z.object({
62
+ prCount: z.number(),
63
+ ticketCount: z.number(),
64
+ additions: z.number(),
65
+ deletions: z.number(),
66
+ byImpact: z.object({
67
+ flagship: z.number(),
68
+ major: z.number(),
69
+ standard: z.number(),
70
+ minor: z.number(),
71
+ }),
72
+ }),
73
+ });
74
+ /**
75
+ * Full timeline analysis output
76
+ */
77
+ export const TimelineAnalysisSchema = z.object({
78
+ generatedAt: z.string(),
79
+ dateRange: z.object({
80
+ since: z.string(),
81
+ until: z.string(),
82
+ }),
83
+ months: z.array(TimelineMonthSchema),
84
+ summary: z.object({
85
+ totalWeeks: z.number(),
86
+ totalMonths: z.number(),
87
+ busiestWeek: z
88
+ .object({
89
+ weekStart: z.string(),
90
+ prCount: z.number(),
91
+ })
92
+ .optional(),
93
+ busiestMonth: z
94
+ .object({
95
+ month: z.string(),
96
+ prCount: z.number(),
97
+ })
98
+ .optional(),
99
+ }),
100
+ });
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server for work-chronicler
4
+ *
5
+ * Exposes work history data to AI assistants via the Model Context Protocol.
6
+ *
7
+ * Usage:
8
+ * work-chronicler-mcp
9
+ *
10
+ * The server communicates via stdio and should be configured in your
11
+ * AI assistant's MCP configuration (e.g., Claude Desktop, Cursor).
12
+ */
13
+ export type { MCPServerContext } from './server.js';
14
+ export { createServer, startServer } from './server.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAIH,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server for work-chronicler
4
+ *
5
+ * Exposes work history data to AI assistants via the Model Context Protocol.
6
+ *
7
+ * Usage:
8
+ * work-chronicler-mcp
9
+ *
10
+ * The server communicates via stdio and should be configured in your
11
+ * AI assistant's MCP configuration (e.g., Claude Desktop, Cursor).
12
+ */
13
+ import { createServer, startServer } from './server.js';
14
+ // Re-export for library usage
15
+ export { createServer, startServer } from './server.js';
16
+ // Run as CLI if executed directly
17
+ const isMainModule = import.meta.url === `file://${process.argv[1]}` ||
18
+ process.argv[1]?.endsWith('work-chronicler-mcp');
19
+ if (isMainModule) {
20
+ createServer()
21
+ .then(startServer)
22
+ .catch((error) => {
23
+ console.error('Failed to start MCP server:', error);
24
+ process.exit(1);
25
+ });
26
+ }
@@ -0,0 +1,22 @@
1
+ import { type Config } from '../core/index.js';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ export interface MCPServerContext {
4
+ config: Config;
5
+ outputDir: string;
6
+ server: McpServer;
7
+ }
8
+ /**
9
+ * Create and configure the MCP server with all tools
10
+ *
11
+ * Config discovery order:
12
+ * 1. WORK_CHRONICLER_CONFIG environment variable (path to config file)
13
+ * 2. WORK_CHRONICLER_DIR environment variable (directory containing config)
14
+ * 3. Current working directory
15
+ * 4. ~/.config/work-chronicler/
16
+ */
17
+ export declare function createServer(): Promise<MCPServerContext>;
18
+ /**
19
+ * Start the MCP server using stdio transport
20
+ */
21
+ export declare function startServer(ctx: MCPServerContext): Promise<void>;
22
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,MAAM,EAWZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA4C9D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtE"}