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.
Files changed (119) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +349 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +120 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/models/types.d.ts +136 -0
  8. package/dist/models/types.d.ts.map +1 -0
  9. package/dist/models/types.js +27 -0
  10. package/dist/models/types.js.map +1 -0
  11. package/dist/parsers/canvas-parser.d.ts +58 -0
  12. package/dist/parsers/canvas-parser.d.ts.map +1 -0
  13. package/dist/parsers/canvas-parser.js +136 -0
  14. package/dist/parsers/canvas-parser.js.map +1 -0
  15. package/dist/parsers/markdown-parser.d.ts +22 -0
  16. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  17. package/dist/parsers/markdown-parser.js +254 -0
  18. package/dist/parsers/markdown-parser.js.map +1 -0
  19. package/dist/services/accomplishment-service.d.ts +33 -0
  20. package/dist/services/accomplishment-service.d.ts.map +1 -0
  21. package/dist/services/accomplishment-service.js +284 -0
  22. package/dist/services/accomplishment-service.js.map +1 -0
  23. package/dist/services/canvas-service.d.ts +52 -0
  24. package/dist/services/canvas-service.d.ts.map +1 -0
  25. package/dist/services/canvas-service.js +166 -0
  26. package/dist/services/canvas-service.js.map +1 -0
  27. package/dist/services/context-doc-service.d.ts +70 -0
  28. package/dist/services/context-doc-service.d.ts.map +1 -0
  29. package/dist/services/context-doc-service.js +229 -0
  30. package/dist/services/context-doc-service.js.map +1 -0
  31. package/dist/services/dependency-service.d.ts +22 -0
  32. package/dist/services/dependency-service.d.ts.map +1 -0
  33. package/dist/services/dependency-service.js +99 -0
  34. package/dist/services/dependency-service.js.map +1 -0
  35. package/dist/services/task-service.d.ts +32 -0
  36. package/dist/services/task-service.d.ts.map +1 -0
  37. package/dist/services/task-service.js +152 -0
  38. package/dist/services/task-service.js.map +1 -0
  39. package/dist/test-runner.d.ts +6 -0
  40. package/dist/test-runner.d.ts.map +1 -0
  41. package/dist/test-runner.js +130 -0
  42. package/dist/test-runner.js.map +1 -0
  43. package/dist/tools/get-accomplishment.d.ts +26 -0
  44. package/dist/tools/get-accomplishment.d.ts.map +1 -0
  45. package/dist/tools/get-accomplishment.js +53 -0
  46. package/dist/tools/get-accomplishment.js.map +1 -0
  47. package/dist/tools/get-blocked-items.d.ts +15 -0
  48. package/dist/tools/get-blocked-items.d.ts.map +1 -0
  49. package/dist/tools/get-blocked-items.js +72 -0
  50. package/dist/tools/get-blocked-items.js.map +1 -0
  51. package/dist/tools/get-current-work.d.ts +15 -0
  52. package/dist/tools/get-current-work.d.ts.map +1 -0
  53. package/dist/tools/get-current-work.js +67 -0
  54. package/dist/tools/get-current-work.js.map +1 -0
  55. package/dist/tools/get-project-status.d.ts +26 -0
  56. package/dist/tools/get-project-status.d.ts.map +1 -0
  57. package/dist/tools/get-project-status.js +92 -0
  58. package/dist/tools/get-project-status.js.map +1 -0
  59. package/dist/tools/get-ready-to-start.d.ts +15 -0
  60. package/dist/tools/get-ready-to-start.d.ts.map +1 -0
  61. package/dist/tools/get-ready-to-start.js +46 -0
  62. package/dist/tools/get-ready-to-start.js.map +1 -0
  63. package/dist/tools/index.d.ts +155 -0
  64. package/dist/tools/index.d.ts.map +1 -0
  65. package/dist/tools/index.js +48 -0
  66. package/dist/tools/index.js.map +1 -0
  67. package/dist/tools/list-accomplishments.d.ts +34 -0
  68. package/dist/tools/list-accomplishments.d.ts.map +1 -0
  69. package/dist/tools/list-accomplishments.js +34 -0
  70. package/dist/tools/list-accomplishments.js.map +1 -0
  71. package/dist/tools/list-files.d.ts +26 -0
  72. package/dist/tools/list-files.d.ts.map +1 -0
  73. package/dist/tools/list-files.js +46 -0
  74. package/dist/tools/list-files.js.map +1 -0
  75. package/dist/tools/list-workspaces.d.ts +22 -0
  76. package/dist/tools/list-workspaces.d.ts.map +1 -0
  77. package/dist/tools/list-workspaces.js +22 -0
  78. package/dist/tools/list-workspaces.js.map +1 -0
  79. package/dist/tools/manage-accomplishment.d.ts +147 -0
  80. package/dist/tools/manage-accomplishment.d.ts.map +1 -0
  81. package/dist/tools/manage-accomplishment.js +138 -0
  82. package/dist/tools/manage-accomplishment.js.map +1 -0
  83. package/dist/tools/manage-dependency.d.ts +41 -0
  84. package/dist/tools/manage-dependency.d.ts.map +1 -0
  85. package/dist/tools/manage-dependency.js +61 -0
  86. package/dist/tools/manage-dependency.js.map +1 -0
  87. package/dist/tools/manage-task.d.ts +119 -0
  88. package/dist/tools/manage-task.d.ts.map +1 -0
  89. package/dist/tools/manage-task.js +121 -0
  90. package/dist/tools/manage-task.js.map +1 -0
  91. package/dist/tools/read-docs.d.ts +48 -0
  92. package/dist/tools/read-docs.d.ts.map +1 -0
  93. package/dist/tools/read-docs.js +90 -0
  94. package/dist/tools/read-docs.js.map +1 -0
  95. package/dist/tools/set-work-focus.d.ts +48 -0
  96. package/dist/tools/set-work-focus.d.ts.map +1 -0
  97. package/dist/tools/set-work-focus.js +75 -0
  98. package/dist/tools/set-work-focus.js.map +1 -0
  99. package/dist/tools/sync-dependencies.d.ts +33 -0
  100. package/dist/tools/sync-dependencies.d.ts.map +1 -0
  101. package/dist/tools/sync-dependencies.js +144 -0
  102. package/dist/tools/sync-dependencies.js.map +1 -0
  103. package/dist/tools/update-doc.d.ts +62 -0
  104. package/dist/tools/update-doc.d.ts.map +1 -0
  105. package/dist/tools/update-doc.js +196 -0
  106. package/dist/tools/update-doc.js.map +1 -0
  107. package/dist/utils/config.d.ts +27 -0
  108. package/dist/utils/config.d.ts.map +1 -0
  109. package/dist/utils/config.js +106 -0
  110. package/dist/utils/config.js.map +1 -0
  111. package/dist/utils/file-utils.d.ts +29 -0
  112. package/dist/utils/file-utils.d.ts.map +1 -0
  113. package/dist/utils/file-utils.js +83 -0
  114. package/dist/utils/file-utils.js.map +1 -0
  115. package/dist/utils/positioning.d.ts +16 -0
  116. package/dist/utils/positioning.d.ts.map +1 -0
  117. package/dist/utils/positioning.js +126 -0
  118. package/dist/utils/positioning.js.map +1 -0
  119. 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"}