obsidian-accomplishments-mcp 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/LICENSE +22 -0
- package/README.md +349 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/models/types.d.ts +136 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +27 -0
- package/dist/models/types.js.map +1 -0
- package/dist/parsers/canvas-parser.d.ts +58 -0
- package/dist/parsers/canvas-parser.d.ts.map +1 -0
- package/dist/parsers/canvas-parser.js +136 -0
- package/dist/parsers/canvas-parser.js.map +1 -0
- package/dist/parsers/markdown-parser.d.ts +22 -0
- package/dist/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/parsers/markdown-parser.js +254 -0
- package/dist/parsers/markdown-parser.js.map +1 -0
- package/dist/services/accomplishment-service.d.ts +33 -0
- package/dist/services/accomplishment-service.d.ts.map +1 -0
- package/dist/services/accomplishment-service.js +284 -0
- package/dist/services/accomplishment-service.js.map +1 -0
- package/dist/services/canvas-service.d.ts +52 -0
- package/dist/services/canvas-service.d.ts.map +1 -0
- package/dist/services/canvas-service.js +166 -0
- package/dist/services/canvas-service.js.map +1 -0
- package/dist/services/context-doc-service.d.ts +70 -0
- package/dist/services/context-doc-service.d.ts.map +1 -0
- package/dist/services/context-doc-service.js +229 -0
- package/dist/services/context-doc-service.js.map +1 -0
- package/dist/services/dependency-service.d.ts +22 -0
- package/dist/services/dependency-service.d.ts.map +1 -0
- package/dist/services/dependency-service.js +99 -0
- package/dist/services/dependency-service.js.map +1 -0
- package/dist/services/task-service.d.ts +32 -0
- package/dist/services/task-service.d.ts.map +1 -0
- package/dist/services/task-service.js +152 -0
- package/dist/services/task-service.js.map +1 -0
- package/dist/test-runner.d.ts +6 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +130 -0
- package/dist/test-runner.js.map +1 -0
- package/dist/tools/get-accomplishment.d.ts +26 -0
- package/dist/tools/get-accomplishment.d.ts.map +1 -0
- package/dist/tools/get-accomplishment.js +53 -0
- package/dist/tools/get-accomplishment.js.map +1 -0
- package/dist/tools/get-blocked-items.d.ts +15 -0
- package/dist/tools/get-blocked-items.d.ts.map +1 -0
- package/dist/tools/get-blocked-items.js +72 -0
- package/dist/tools/get-blocked-items.js.map +1 -0
- package/dist/tools/get-current-work.d.ts +15 -0
- package/dist/tools/get-current-work.d.ts.map +1 -0
- package/dist/tools/get-current-work.js +67 -0
- package/dist/tools/get-current-work.js.map +1 -0
- package/dist/tools/get-project-status.d.ts +26 -0
- package/dist/tools/get-project-status.d.ts.map +1 -0
- package/dist/tools/get-project-status.js +92 -0
- package/dist/tools/get-project-status.js.map +1 -0
- package/dist/tools/get-ready-to-start.d.ts +15 -0
- package/dist/tools/get-ready-to-start.d.ts.map +1 -0
- package/dist/tools/get-ready-to-start.js +46 -0
- package/dist/tools/get-ready-to-start.js.map +1 -0
- package/dist/tools/index.d.ts +155 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +48 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-accomplishments.d.ts +34 -0
- package/dist/tools/list-accomplishments.d.ts.map +1 -0
- package/dist/tools/list-accomplishments.js +34 -0
- package/dist/tools/list-accomplishments.js.map +1 -0
- package/dist/tools/list-files.d.ts +26 -0
- package/dist/tools/list-files.d.ts.map +1 -0
- package/dist/tools/list-files.js +46 -0
- package/dist/tools/list-files.js.map +1 -0
- package/dist/tools/list-workspaces.d.ts +22 -0
- package/dist/tools/list-workspaces.d.ts.map +1 -0
- package/dist/tools/list-workspaces.js +22 -0
- package/dist/tools/list-workspaces.js.map +1 -0
- package/dist/tools/manage-accomplishment.d.ts +147 -0
- package/dist/tools/manage-accomplishment.d.ts.map +1 -0
- package/dist/tools/manage-accomplishment.js +138 -0
- package/dist/tools/manage-accomplishment.js.map +1 -0
- package/dist/tools/manage-dependency.d.ts +41 -0
- package/dist/tools/manage-dependency.d.ts.map +1 -0
- package/dist/tools/manage-dependency.js +61 -0
- package/dist/tools/manage-dependency.js.map +1 -0
- package/dist/tools/manage-task.d.ts +119 -0
- package/dist/tools/manage-task.d.ts.map +1 -0
- package/dist/tools/manage-task.js +121 -0
- package/dist/tools/manage-task.js.map +1 -0
- package/dist/tools/read-docs.d.ts +48 -0
- package/dist/tools/read-docs.d.ts.map +1 -0
- package/dist/tools/read-docs.js +90 -0
- package/dist/tools/read-docs.js.map +1 -0
- package/dist/tools/set-work-focus.d.ts +48 -0
- package/dist/tools/set-work-focus.d.ts.map +1 -0
- package/dist/tools/set-work-focus.js +75 -0
- package/dist/tools/set-work-focus.js.map +1 -0
- package/dist/tools/sync-dependencies.d.ts +33 -0
- package/dist/tools/sync-dependencies.d.ts.map +1 -0
- package/dist/tools/sync-dependencies.js +144 -0
- package/dist/tools/sync-dependencies.js.map +1 -0
- package/dist/tools/update-doc.d.ts +62 -0
- package/dist/tools/update-doc.d.ts.map +1 -0
- package/dist/tools/update-doc.js +196 -0
- package/dist/tools/update-doc.js.map +1 -0
- package/dist/utils/config.d.ts +27 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +106 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/file-utils.d.ts +29 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +83 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/positioning.d.ts +16 -0
- package/dist/utils/positioning.d.ts.map +1 -0
- package/dist/utils/positioning.js +126 -0
- package/dist/utils/positioning.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CanvasFile, CanvasNode, CanvasEdge } from '../models/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a canvas JSON file
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseCanvas(content: string): CanvasFile;
|
|
6
|
+
/**
|
|
7
|
+
* Serialize a canvas to JSON
|
|
8
|
+
*/
|
|
9
|
+
export declare function serializeCanvas(canvas: CanvasFile): string;
|
|
10
|
+
/**
|
|
11
|
+
* Find a node by its file path
|
|
12
|
+
*/
|
|
13
|
+
export declare function findNodeByFile(canvas: CanvasFile, filePath: string): CanvasNode | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Find a node by accomplishment ID (searches file paths for the ID)
|
|
16
|
+
*/
|
|
17
|
+
export declare function findNodeByAccomplishmentId(canvas: CanvasFile, accomplishmentId: string): CanvasNode | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Get all edges where the given node is the source (blocker)
|
|
20
|
+
*/
|
|
21
|
+
export declare function getOutgoingEdges(canvas: CanvasFile, nodeId: string): CanvasEdge[];
|
|
22
|
+
/**
|
|
23
|
+
* Get all edges where the given node is the target (blocked)
|
|
24
|
+
*/
|
|
25
|
+
export declare function getIncomingEdges(canvas: CanvasFile, nodeId: string): CanvasEdge[];
|
|
26
|
+
/**
|
|
27
|
+
* Add a node to the canvas
|
|
28
|
+
*/
|
|
29
|
+
export declare function addNode(canvas: CanvasFile, node: CanvasNode): CanvasFile;
|
|
30
|
+
/**
|
|
31
|
+
* Remove a node from the canvas (also removes associated edges)
|
|
32
|
+
*/
|
|
33
|
+
export declare function removeNode(canvas: CanvasFile, nodeId: string): CanvasFile;
|
|
34
|
+
/**
|
|
35
|
+
* Update a node's position
|
|
36
|
+
*/
|
|
37
|
+
export declare function updateNodePosition(canvas: CanvasFile, nodeId: string, x: number, y: number): CanvasFile;
|
|
38
|
+
/**
|
|
39
|
+
* Add an edge to the canvas
|
|
40
|
+
*/
|
|
41
|
+
export declare function addEdge(canvas: CanvasFile, edge: CanvasEdge): CanvasFile;
|
|
42
|
+
/**
|
|
43
|
+
* Remove an edge from the canvas
|
|
44
|
+
*/
|
|
45
|
+
export declare function removeEdge(canvas: CanvasFile, fromNodeId: string, toNodeId: string): CanvasFile;
|
|
46
|
+
/**
|
|
47
|
+
* Find edge between two nodes
|
|
48
|
+
*/
|
|
49
|
+
export declare function findEdge(canvas: CanvasFile, fromNodeId: string, toNodeId: string): CanvasEdge | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Get all file nodes from canvas
|
|
52
|
+
*/
|
|
53
|
+
export declare function getFileNodes(canvas: CanvasFile): CanvasNode[];
|
|
54
|
+
/**
|
|
55
|
+
* Check if adding an edge would create a cycle
|
|
56
|
+
*/
|
|
57
|
+
export declare function wouldCreateCycle(canvas: CanvasFile, fromNodeId: string, toNodeId: string): boolean;
|
|
58
|
+
//# sourceMappingURL=canvas-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/canvas-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAY,MAAM,oBAAoB,CAAC;AAElF;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAUvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE3F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAS/G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAEjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAEjF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAKxE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAKzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAOvG;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAKxE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAO/F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAIzG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAyBlG"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { MCPError } from '../models/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a canvas JSON file
|
|
4
|
+
*/
|
|
5
|
+
export function parseCanvas(content) {
|
|
6
|
+
try {
|
|
7
|
+
const data = JSON.parse(content);
|
|
8
|
+
return {
|
|
9
|
+
nodes: data.nodes || [],
|
|
10
|
+
edges: data.edges || [],
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
throw new MCPError(`Failed to parse canvas JSON: ${e}`, 'PARSE_ERROR', 500);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Serialize a canvas to JSON
|
|
19
|
+
*/
|
|
20
|
+
export function serializeCanvas(canvas) {
|
|
21
|
+
return JSON.stringify(canvas, null, 2);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Find a node by its file path
|
|
25
|
+
*/
|
|
26
|
+
export function findNodeByFile(canvas, filePath) {
|
|
27
|
+
return canvas.nodes.find(node => node.type === 'file' && node.file === filePath);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Find a node by accomplishment ID (searches file paths for the ID)
|
|
31
|
+
*/
|
|
32
|
+
export function findNodeByAccomplishmentId(canvas, accomplishmentId) {
|
|
33
|
+
// We need to look at the actual file content to match by ID
|
|
34
|
+
// For now, we'll search by checking if the file path contains the ID pattern
|
|
35
|
+
// This is a simplified approach - in practice, we'd need to read the files
|
|
36
|
+
return canvas.nodes.find(node => {
|
|
37
|
+
if (node.type !== 'file')
|
|
38
|
+
return false;
|
|
39
|
+
// This is a placeholder - actual implementation will need to read files
|
|
40
|
+
return false;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get all edges where the given node is the source (blocker)
|
|
45
|
+
*/
|
|
46
|
+
export function getOutgoingEdges(canvas, nodeId) {
|
|
47
|
+
return canvas.edges.filter(edge => edge.fromNode === nodeId);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get all edges where the given node is the target (blocked)
|
|
51
|
+
*/
|
|
52
|
+
export function getIncomingEdges(canvas, nodeId) {
|
|
53
|
+
return canvas.edges.filter(edge => edge.toNode === nodeId);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Add a node to the canvas
|
|
57
|
+
*/
|
|
58
|
+
export function addNode(canvas, node) {
|
|
59
|
+
return {
|
|
60
|
+
...canvas,
|
|
61
|
+
nodes: [...canvas.nodes, node],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Remove a node from the canvas (also removes associated edges)
|
|
66
|
+
*/
|
|
67
|
+
export function removeNode(canvas, nodeId) {
|
|
68
|
+
return {
|
|
69
|
+
nodes: canvas.nodes.filter(node => node.id !== nodeId),
|
|
70
|
+
edges: canvas.edges.filter(edge => edge.fromNode !== nodeId && edge.toNode !== nodeId),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Update a node's position
|
|
75
|
+
*/
|
|
76
|
+
export function updateNodePosition(canvas, nodeId, x, y) {
|
|
77
|
+
return {
|
|
78
|
+
...canvas,
|
|
79
|
+
nodes: canvas.nodes.map(node => node.id === nodeId ? { ...node, x, y } : node),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Add an edge to the canvas
|
|
84
|
+
*/
|
|
85
|
+
export function addEdge(canvas, edge) {
|
|
86
|
+
return {
|
|
87
|
+
...canvas,
|
|
88
|
+
edges: [...canvas.edges, edge],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Remove an edge from the canvas
|
|
93
|
+
*/
|
|
94
|
+
export function removeEdge(canvas, fromNodeId, toNodeId) {
|
|
95
|
+
return {
|
|
96
|
+
...canvas,
|
|
97
|
+
edges: canvas.edges.filter(edge => !(edge.fromNode === fromNodeId && edge.toNode === toNodeId)),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Find edge between two nodes
|
|
102
|
+
*/
|
|
103
|
+
export function findEdge(canvas, fromNodeId, toNodeId) {
|
|
104
|
+
return canvas.edges.find(edge => edge.fromNode === fromNodeId && edge.toNode === toNodeId);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get all file nodes from canvas
|
|
108
|
+
*/
|
|
109
|
+
export function getFileNodes(canvas) {
|
|
110
|
+
return canvas.nodes.filter(node => node.type === 'file');
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if adding an edge would create a cycle
|
|
114
|
+
*/
|
|
115
|
+
export function wouldCreateCycle(canvas, fromNodeId, toNodeId) {
|
|
116
|
+
// DFS to check if there's a path from toNodeId to fromNodeId
|
|
117
|
+
const visited = new Set();
|
|
118
|
+
const stack = [toNodeId];
|
|
119
|
+
while (stack.length > 0) {
|
|
120
|
+
const current = stack.pop();
|
|
121
|
+
if (current === fromNodeId) {
|
|
122
|
+
return true; // Found a cycle
|
|
123
|
+
}
|
|
124
|
+
if (visited.has(current)) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
visited.add(current);
|
|
128
|
+
// Get all nodes that this node blocks (outgoing edges)
|
|
129
|
+
const outgoing = getOutgoingEdges(canvas, current);
|
|
130
|
+
for (const edge of outgoing) {
|
|
131
|
+
stack.push(edge.toNode);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=canvas-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-parser.js","sourceRoot":"","sources":["../../src/parsers/canvas-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Accomplishment, Task } from '../models/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse an accomplishment markdown file
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseAccomplishment(content: string): Accomplishment;
|
|
6
|
+
/**
|
|
7
|
+
* Serialize an accomplishment to markdown
|
|
8
|
+
*/
|
|
9
|
+
export declare function serializeAccomplishment(accomplishment: Accomplishment): string;
|
|
10
|
+
/**
|
|
11
|
+
* Generate task ID from accomplishment ID and task
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateTaskId(accomplishmentId: string, task: Task): string;
|
|
14
|
+
/**
|
|
15
|
+
* Parse task ID to extract components
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseTaskId(taskId: string): {
|
|
18
|
+
accomplishmentId: string;
|
|
19
|
+
taskNumber: number;
|
|
20
|
+
taskName: string;
|
|
21
|
+
} | null;
|
|
22
|
+
//# sourceMappingURL=markdown-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/markdown-parser.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EAEd,IAAI,EAGL,MAAM,oBAAoB,CAAC;AAM5B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CA+BnE;AAmKD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAmC9E;AA4BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASrH"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import YAML from 'yaml';
|
|
2
|
+
import { MCPError, } from '../models/types.js';
|
|
3
|
+
const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
|
|
4
|
+
const TASK_HEADER_REGEX = /^### Task (\d+): (.+)$/;
|
|
5
|
+
const TASK_FIELD_REGEX = /^- \*\*(.+?):\*\* (.*)$/;
|
|
6
|
+
/**
|
|
7
|
+
* Parse an accomplishment markdown file
|
|
8
|
+
*/
|
|
9
|
+
export function parseAccomplishment(content) {
|
|
10
|
+
const match = content.match(FRONTMATTER_REGEX);
|
|
11
|
+
if (!match) {
|
|
12
|
+
throw new MCPError('Invalid markdown format: missing frontmatter', 'PARSE_ERROR', 500);
|
|
13
|
+
}
|
|
14
|
+
const [, frontmatterYaml, body] = match;
|
|
15
|
+
// Parse frontmatter
|
|
16
|
+
let frontmatter;
|
|
17
|
+
try {
|
|
18
|
+
frontmatter = YAML.parse(frontmatterYaml);
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
throw new MCPError(`Failed to parse frontmatter YAML: ${e}`, 'PARSE_ERROR', 500);
|
|
22
|
+
}
|
|
23
|
+
// Ensure depends_on is an array
|
|
24
|
+
if (!frontmatter.depends_on) {
|
|
25
|
+
frontmatter.depends_on = [];
|
|
26
|
+
}
|
|
27
|
+
// Parse body sections
|
|
28
|
+
const sections = parseBodySections(body);
|
|
29
|
+
return {
|
|
30
|
+
frontmatter,
|
|
31
|
+
outcome: sections.outcome,
|
|
32
|
+
acceptance_criteria: sections.acceptance_criteria,
|
|
33
|
+
tasks: sections.tasks,
|
|
34
|
+
notes: sections.notes,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse body sections from markdown
|
|
39
|
+
*/
|
|
40
|
+
function parseBodySections(body) {
|
|
41
|
+
const lines = body.split('\n');
|
|
42
|
+
let currentSection = '';
|
|
43
|
+
let outcome = '';
|
|
44
|
+
let acceptance_criteria = [];
|
|
45
|
+
let tasks = [];
|
|
46
|
+
let notes = '';
|
|
47
|
+
let currentTask = null;
|
|
48
|
+
let taskLines = [];
|
|
49
|
+
for (const line of lines) {
|
|
50
|
+
// Check for H2 section headers
|
|
51
|
+
if (line.startsWith('## ')) {
|
|
52
|
+
// Save previous task if any
|
|
53
|
+
if (currentTask && currentSection === 'tasks') {
|
|
54
|
+
tasks.push(finalizeTask(currentTask, taskLines));
|
|
55
|
+
currentTask = null;
|
|
56
|
+
taskLines = [];
|
|
57
|
+
}
|
|
58
|
+
const sectionName = line.substring(3).trim().toLowerCase();
|
|
59
|
+
if (sectionName.includes('outcome')) {
|
|
60
|
+
currentSection = 'outcome';
|
|
61
|
+
}
|
|
62
|
+
else if (sectionName.includes('acceptance')) {
|
|
63
|
+
currentSection = 'acceptance';
|
|
64
|
+
}
|
|
65
|
+
else if (sectionName.includes('task')) {
|
|
66
|
+
currentSection = 'tasks';
|
|
67
|
+
}
|
|
68
|
+
else if (sectionName.includes('note')) {
|
|
69
|
+
currentSection = 'notes';
|
|
70
|
+
}
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Check for H3 task headers
|
|
74
|
+
const taskMatch = line.match(TASK_HEADER_REGEX);
|
|
75
|
+
if (taskMatch && currentSection === 'tasks') {
|
|
76
|
+
// Save previous task
|
|
77
|
+
if (currentTask) {
|
|
78
|
+
tasks.push(finalizeTask(currentTask, taskLines));
|
|
79
|
+
taskLines = [];
|
|
80
|
+
}
|
|
81
|
+
currentTask = {
|
|
82
|
+
number: parseInt(taskMatch[1], 10),
|
|
83
|
+
name: taskMatch[2],
|
|
84
|
+
status: 'Open',
|
|
85
|
+
};
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Process content based on current section
|
|
89
|
+
switch (currentSection) {
|
|
90
|
+
case 'outcome':
|
|
91
|
+
if (line.trim()) {
|
|
92
|
+
outcome += (outcome ? '\n' : '') + line;
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
case 'acceptance':
|
|
96
|
+
if (line.trim().startsWith('- [')) {
|
|
97
|
+
// Extract criterion text (remove checkbox)
|
|
98
|
+
const criterion = line.replace(/^- \[.\] /, '').trim();
|
|
99
|
+
if (criterion) {
|
|
100
|
+
acceptance_criteria.push(criterion);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case 'tasks':
|
|
105
|
+
if (currentTask) {
|
|
106
|
+
taskLines.push(line);
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
case 'notes':
|
|
110
|
+
notes += (notes ? '\n' : '') + line;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Save last task
|
|
115
|
+
if (currentTask) {
|
|
116
|
+
tasks.push(finalizeTask(currentTask, taskLines));
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
outcome: outcome.trim(),
|
|
120
|
+
acceptance_criteria,
|
|
121
|
+
tasks,
|
|
122
|
+
notes: notes.trim(),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Finalize a task from collected lines
|
|
127
|
+
*/
|
|
128
|
+
function finalizeTask(partial, lines) {
|
|
129
|
+
const task = {
|
|
130
|
+
number: partial.number || 0,
|
|
131
|
+
name: partial.name || '',
|
|
132
|
+
goal: '',
|
|
133
|
+
description: '',
|
|
134
|
+
status: 'Open',
|
|
135
|
+
};
|
|
136
|
+
for (const line of lines) {
|
|
137
|
+
const match = line.match(TASK_FIELD_REGEX);
|
|
138
|
+
if (match) {
|
|
139
|
+
const [, field, value] = match;
|
|
140
|
+
const fieldLower = field.toLowerCase();
|
|
141
|
+
if (fieldLower === 'goal') {
|
|
142
|
+
task.goal = value;
|
|
143
|
+
}
|
|
144
|
+
else if (fieldLower === 'description') {
|
|
145
|
+
task.description = value;
|
|
146
|
+
}
|
|
147
|
+
else if (fieldLower === 'technical notes') {
|
|
148
|
+
task.technical_notes = value;
|
|
149
|
+
}
|
|
150
|
+
else if (fieldLower === 'estimate') {
|
|
151
|
+
const hours = parseFloat(value.replace('h', ''));
|
|
152
|
+
if (!isNaN(hours)) {
|
|
153
|
+
task.estimate = hours;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else if (fieldLower === 'status') {
|
|
157
|
+
task.status = parseTaskStatus(value);
|
|
158
|
+
}
|
|
159
|
+
else if (fieldLower === 'notes') {
|
|
160
|
+
task.notes = value;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return task;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Parse task status from string
|
|
168
|
+
*/
|
|
169
|
+
function parseTaskStatus(value) {
|
|
170
|
+
const normalized = value.toLowerCase().replace(/[^a-z]/g, '');
|
|
171
|
+
if (normalized.includes('inprogress') || normalized.includes('progress')) {
|
|
172
|
+
return 'InProgress';
|
|
173
|
+
}
|
|
174
|
+
else if (normalized.includes('complete') || normalized.includes('done')) {
|
|
175
|
+
return 'Complete';
|
|
176
|
+
}
|
|
177
|
+
else if (normalized.includes('hold') || normalized.includes('paused')) {
|
|
178
|
+
return 'OnHold';
|
|
179
|
+
}
|
|
180
|
+
return 'Open';
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Serialize an accomplishment to markdown
|
|
184
|
+
*/
|
|
185
|
+
export function serializeAccomplishment(accomplishment) {
|
|
186
|
+
const { frontmatter, outcome, acceptance_criteria, tasks, notes } = accomplishment;
|
|
187
|
+
// Serialize frontmatter
|
|
188
|
+
const frontmatterYaml = YAML.stringify(frontmatter).trim();
|
|
189
|
+
// Build body
|
|
190
|
+
let body = `# ${frontmatter.title} (Accomplishment)\n\n`;
|
|
191
|
+
// Outcome section
|
|
192
|
+
body += `## Outcome\n\n${outcome || 'Describe the final state that will be true once this is done.'}\n\n`;
|
|
193
|
+
// Acceptance Criteria section
|
|
194
|
+
body += `## Acceptance Criteria\n\n`;
|
|
195
|
+
if (acceptance_criteria.length > 0) {
|
|
196
|
+
for (const criterion of acceptance_criteria) {
|
|
197
|
+
body += `- [ ] ${criterion}\n`;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
body += `- [ ] Criterion 1\n- [ ] Criterion 2\n`;
|
|
202
|
+
}
|
|
203
|
+
body += '\n';
|
|
204
|
+
// Tasks section
|
|
205
|
+
body += `## Tasks\n\n`;
|
|
206
|
+
if (tasks.length > 0) {
|
|
207
|
+
for (const task of tasks) {
|
|
208
|
+
body += serializeTask(task);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Notes section
|
|
212
|
+
body += `## Notes\n\n${notes || ''}\n`;
|
|
213
|
+
return `---\n${frontmatterYaml}\n---\n\n${body}`;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Serialize a single task to markdown
|
|
217
|
+
*/
|
|
218
|
+
function serializeTask(task) {
|
|
219
|
+
let md = `### Task ${task.number}: ${task.name}\n`;
|
|
220
|
+
md += `- **Goal:** ${task.goal || '[What this task achieves]'}\n`;
|
|
221
|
+
md += `- **Description:** ${task.description || '[Details]'}\n`;
|
|
222
|
+
if (task.technical_notes !== undefined) {
|
|
223
|
+
md += `- **Technical Notes:** ${task.technical_notes}\n`;
|
|
224
|
+
}
|
|
225
|
+
if (task.estimate !== undefined) {
|
|
226
|
+
md += `- **Estimate:** ${task.estimate}h\n`;
|
|
227
|
+
}
|
|
228
|
+
md += `- **Status:** ${task.status}\n`;
|
|
229
|
+
if (task.notes !== undefined) {
|
|
230
|
+
md += `- **Notes:** ${task.notes}\n`;
|
|
231
|
+
}
|
|
232
|
+
md += '\n';
|
|
233
|
+
return md;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Generate task ID from accomplishment ID and task
|
|
237
|
+
*/
|
|
238
|
+
export function generateTaskId(accomplishmentId, task) {
|
|
239
|
+
return `${accomplishmentId}:Task ${task.number}:${task.name}`;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Parse task ID to extract components
|
|
243
|
+
*/
|
|
244
|
+
export function parseTaskId(taskId) {
|
|
245
|
+
const match = taskId.match(/^(.+):Task (\d+):(.+)$/);
|
|
246
|
+
if (!match)
|
|
247
|
+
return null;
|
|
248
|
+
return {
|
|
249
|
+
accomplishmentId: match[1],
|
|
250
|
+
taskNumber: parseInt(match[2], 10),
|
|
251
|
+
taskName: match[3],
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=markdown-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../src/parsers/markdown-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Accomplishment, AccomplishmentSummary, Config, CreateAccomplishmentData, UpdateAccomplishmentData, AccomplishmentStatus } from '../models/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a new accomplishment
|
|
4
|
+
*/
|
|
5
|
+
export declare function createAccomplishment(config: Config, data: CreateAccomplishmentData): Promise<Accomplishment>;
|
|
6
|
+
/**
|
|
7
|
+
* Get an accomplishment by ID
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAccomplishment(config: Config, id: string): Promise<Accomplishment>;
|
|
10
|
+
/**
|
|
11
|
+
* Update an accomplishment
|
|
12
|
+
*/
|
|
13
|
+
export declare function updateAccomplishment(config: Config, id: string, data: UpdateAccomplishmentData): Promise<Accomplishment>;
|
|
14
|
+
/**
|
|
15
|
+
* Delete an accomplishment
|
|
16
|
+
*/
|
|
17
|
+
export declare function deleteAccomplishment(config: Config, id: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* List all accomplishments
|
|
20
|
+
*/
|
|
21
|
+
export declare function listAllAccomplishments(config: Config): Promise<Accomplishment[]>;
|
|
22
|
+
/**
|
|
23
|
+
* List accomplishments with optional filtering
|
|
24
|
+
*/
|
|
25
|
+
export declare function listAccomplishments(config: Config, status?: AccomplishmentStatus, canvasSource?: string): Promise<AccomplishmentSummary[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Reposition an accomplishment based on its dependencies
|
|
28
|
+
*/
|
|
29
|
+
export declare function repositionAccomplishment(config: Config, id: string): Promise<{
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=accomplishment-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accomplishment-service.d.ts","sourceRoot":"","sources":["../../src/services/accomplishment-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,qBAAqB,EACrB,MAAM,EACN,wBAAwB,EACxB,wBAAwB,EAIxB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAmB5B;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA8DzB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,cAAc,CAAC,CAazB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA2CzB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAqBtF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,oBAAoB,EAC7B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAclC;AA8GD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBnC"}
|