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.
- package/README.md +432 -0
- package/bin/mcp.js +6 -0
- package/bin/work-chronicler.js +3 -0
- package/dist/cli/analyzer/classifier.d.ts +31 -0
- package/dist/cli/analyzer/classifier.d.ts.map +1 -0
- package/dist/cli/analyzer/classifier.js +171 -0
- package/dist/cli/analyzer/index.d.ts +5 -0
- package/dist/cli/analyzer/index.d.ts.map +1 -0
- package/dist/cli/analyzer/index.js +4 -0
- package/dist/cli/analyzer/projects.d.ts +10 -0
- package/dist/cli/analyzer/projects.d.ts.map +1 -0
- package/dist/cli/analyzer/projects.js +228 -0
- package/dist/cli/analyzer/stats.d.ts +30 -0
- package/dist/cli/analyzer/stats.d.ts.map +1 -0
- package/dist/cli/analyzer/stats.js +80 -0
- package/dist/cli/analyzer/timeline.d.ts +6 -0
- package/dist/cli/analyzer/timeline.d.ts.map +1 -0
- package/dist/cli/analyzer/timeline.js +224 -0
- package/dist/cli/commands/analyze.d.ts +3 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +216 -0
- package/dist/cli/commands/fetch/all.d.ts +3 -0
- package/dist/cli/commands/fetch/all.d.ts.map +1 -0
- package/dist/cli/commands/fetch/all.js +91 -0
- package/dist/cli/commands/fetch/github.d.ts +3 -0
- package/dist/cli/commands/fetch/github.d.ts.map +1 -0
- package/dist/cli/commands/fetch/github.js +39 -0
- package/dist/cli/commands/fetch/jira.d.ts +3 -0
- package/dist/cli/commands/fetch/jira.d.ts.map +1 -0
- package/dist/cli/commands/fetch/jira.js +39 -0
- package/dist/cli/commands/filter.d.ts +3 -0
- package/dist/cli/commands/filter.d.ts.map +1 -0
- package/dist/cli/commands/filter.js +247 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +47 -0
- package/dist/cli/commands/link.d.ts +3 -0
- package/dist/cli/commands/link.d.ts.map +1 -0
- package/dist/cli/commands/link.js +25 -0
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +43 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +28 -0
- package/dist/cli/fetchers/github.d.ts +20 -0
- package/dist/cli/fetchers/github.d.ts.map +1 -0
- package/dist/cli/fetchers/github.js +345 -0
- package/dist/cli/fetchers/jira.d.ts +20 -0
- package/dist/cli/fetchers/jira.d.ts.map +1 -0
- package/dist/cli/fetchers/jira.js +268 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +43 -0
- package/dist/cli/linker/index.d.ts +17 -0
- package/dist/cli/linker/index.d.ts.map +1 -0
- package/dist/cli/linker/index.js +129 -0
- package/dist/cli/prompts/index.d.ts +61 -0
- package/dist/cli/prompts/index.d.ts.map +1 -0
- package/dist/cli/prompts/index.js +258 -0
- package/dist/core/config/loader.d.ts +61 -0
- package/dist/core/config/loader.d.ts.map +1 -0
- package/dist/core/config/loader.js +146 -0
- package/dist/core/config/schema.d.ts +587 -0
- package/dist/core/config/schema.d.ts.map +1 -0
- package/dist/core/config/schema.js +95 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/storage/index.d.ts +4 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +3 -0
- package/dist/core/storage/paths.d.ts +85 -0
- package/dist/core/storage/paths.d.ts.map +1 -0
- package/dist/core/storage/paths.js +110 -0
- package/dist/core/storage/reader.d.ts +69 -0
- package/dist/core/storage/reader.d.ts.map +1 -0
- package/dist/core/storage/reader.js +181 -0
- package/dist/core/storage/writer.d.ts +41 -0
- package/dist/core/storage/writer.d.ts.map +1 -0
- package/dist/core/storage/writer.js +50 -0
- package/dist/core/types/index.d.ts +5 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +4 -0
- package/dist/core/types/pr.d.ts +75 -0
- package/dist/core/types/pr.d.ts.map +1 -0
- package/dist/core/types/pr.js +35 -0
- package/dist/core/types/project.d.ts +450 -0
- package/dist/core/types/project.d.ts.map +1 -0
- package/dist/core/types/project.js +75 -0
- package/dist/core/types/ticket.d.ts +51 -0
- package/dist/core/types/ticket.d.ts.map +1 -0
- package/dist/core/types/ticket.js +17 -0
- package/dist/core/types/timeline.d.ts +1177 -0
- package/dist/core/types/timeline.d.ts.map +1 -0
- package/dist/core/types/timeline.js +100 -0
- package/dist/mcp/index.d.ts +15 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +26 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +584 -0
- package/dist/mcp/tools/get-stats.d.ts +26 -0
- package/dist/mcp/tools/get-stats.d.ts.map +1 -0
- package/dist/mcp/tools/get-stats.js +64 -0
- package/dist/mcp/tools/search-prs.d.ts +18 -0
- package/dist/mcp/tools/search-prs.d.ts.map +1 -0
- package/dist/mcp/tools/search-prs.js +44 -0
- package/dist/mcp/tools/search-tickets.d.ts +19 -0
- package/dist/mcp/tools/search-tickets.d.ts.map +1 -0
- package/dist/mcp/tools/search-tickets.js +49 -0
- 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"}
|