obsidian-accomplishments-mcp 0.1.9 → 0.1.11

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 (269) hide show
  1. package/README.md +154 -182
  2. package/dist/index.js +207 -38
  3. package/dist/index.js.map +1 -1
  4. package/dist/integration.test.d.ts +8 -0
  5. package/dist/integration.test.d.ts.map +1 -0
  6. package/dist/integration.test.js +979 -0
  7. package/dist/integration.test.js.map +1 -0
  8. package/dist/models/types.d.ts +1 -2
  9. package/dist/models/types.d.ts.map +1 -1
  10. package/dist/models/types.js.map +1 -1
  11. package/dist/models/v2-types.d.ts +460 -0
  12. package/dist/models/v2-types.d.ts.map +1 -0
  13. package/dist/models/v2-types.js +137 -0
  14. package/dist/models/v2-types.js.map +1 -0
  15. package/dist/models/v2-types.test.d.ts +5 -0
  16. package/dist/models/v2-types.test.d.ts.map +1 -0
  17. package/dist/models/v2-types.test.js +133 -0
  18. package/dist/models/v2-types.test.js.map +1 -0
  19. package/dist/parsers/canvas-parser.d.ts +1 -1
  20. package/dist/parsers/canvas-parser.d.ts.map +1 -1
  21. package/dist/parsers/canvas-parser.js +1 -1
  22. package/dist/parsers/canvas-parser.js.map +1 -1
  23. package/dist/parsers/markdown-parser.js +9 -9
  24. package/dist/parsers/markdown-parser.js.map +1 -1
  25. package/dist/services/v2/archive-manager.d.ts +96 -0
  26. package/dist/services/v2/archive-manager.d.ts.map +1 -0
  27. package/dist/services/v2/archive-manager.js +281 -0
  28. package/dist/services/v2/archive-manager.js.map +1 -0
  29. package/dist/services/v2/canvas-manager.d.ts +155 -0
  30. package/dist/services/v2/canvas-manager.d.ts.map +1 -0
  31. package/dist/services/v2/canvas-manager.js +540 -0
  32. package/dist/services/v2/canvas-manager.js.map +1 -0
  33. package/dist/services/v2/canvas-manager.test.d.ts +5 -0
  34. package/dist/services/v2/canvas-manager.test.d.ts.map +1 -0
  35. package/dist/services/v2/canvas-manager.test.js +327 -0
  36. package/dist/services/v2/canvas-manager.test.js.map +1 -0
  37. package/dist/services/v2/cascade-manager.d.ts +54 -0
  38. package/dist/services/v2/cascade-manager.d.ts.map +1 -0
  39. package/dist/services/v2/cascade-manager.js +220 -0
  40. package/dist/services/v2/cascade-manager.js.map +1 -0
  41. package/dist/services/v2/cycle-detector.d.ts +76 -0
  42. package/dist/services/v2/cycle-detector.d.ts.map +1 -0
  43. package/dist/services/v2/cycle-detector.js +183 -0
  44. package/dist/services/v2/cycle-detector.js.map +1 -0
  45. package/dist/services/v2/cycle-detector.test.d.ts +7 -0
  46. package/dist/services/v2/cycle-detector.test.d.ts.map +1 -0
  47. package/dist/services/v2/cycle-detector.test.js +125 -0
  48. package/dist/services/v2/cycle-detector.test.js.map +1 -0
  49. package/dist/services/v2/entity-parser.d.ts +54 -0
  50. package/dist/services/v2/entity-parser.d.ts.map +1 -0
  51. package/dist/services/v2/entity-parser.js +418 -0
  52. package/dist/services/v2/entity-parser.js.map +1 -0
  53. package/dist/services/v2/entity-parser.test.d.ts +5 -0
  54. package/dist/services/v2/entity-parser.test.d.ts.map +1 -0
  55. package/dist/services/v2/entity-parser.test.js +637 -0
  56. package/dist/services/v2/entity-parser.test.js.map +1 -0
  57. package/dist/services/v2/entity-serializer.d.ts +94 -0
  58. package/dist/services/v2/entity-serializer.d.ts.map +1 -0
  59. package/dist/services/v2/entity-serializer.js +583 -0
  60. package/dist/services/v2/entity-serializer.js.map +1 -0
  61. package/dist/services/v2/entity-serializer.test.d.ts +5 -0
  62. package/dist/services/v2/entity-serializer.test.d.ts.map +1 -0
  63. package/dist/services/v2/entity-serializer.test.js +241 -0
  64. package/dist/services/v2/entity-serializer.test.js.map +1 -0
  65. package/dist/services/v2/entity-validator.d.ts +65 -0
  66. package/dist/services/v2/entity-validator.d.ts.map +1 -0
  67. package/dist/services/v2/entity-validator.js +573 -0
  68. package/dist/services/v2/entity-validator.js.map +1 -0
  69. package/dist/services/v2/entity-validator.test.d.ts +5 -0
  70. package/dist/services/v2/entity-validator.test.d.ts.map +1 -0
  71. package/dist/services/v2/entity-validator.test.js +519 -0
  72. package/dist/services/v2/entity-validator.test.js.map +1 -0
  73. package/dist/services/v2/file-manager.d.ts +73 -0
  74. package/dist/services/v2/file-manager.d.ts.map +1 -0
  75. package/dist/services/v2/file-manager.js +310 -0
  76. package/dist/services/v2/file-manager.js.map +1 -0
  77. package/dist/services/v2/file-manager.test.d.ts +5 -0
  78. package/dist/services/v2/file-manager.test.d.ts.map +1 -0
  79. package/dist/services/v2/file-manager.test.js +339 -0
  80. package/dist/services/v2/file-manager.test.js.map +1 -0
  81. package/dist/services/v2/index-manager.d.ts +68 -0
  82. package/dist/services/v2/index-manager.d.ts.map +1 -0
  83. package/dist/services/v2/index-manager.js +228 -0
  84. package/dist/services/v2/index-manager.js.map +1 -0
  85. package/dist/services/v2/index-manager.test.d.ts +5 -0
  86. package/dist/services/v2/index-manager.test.d.ts.map +1 -0
  87. package/dist/services/v2/index-manager.test.js +386 -0
  88. package/dist/services/v2/index-manager.test.js.map +1 -0
  89. package/dist/services/v2/index-service.d.ts +82 -0
  90. package/dist/services/v2/index-service.d.ts.map +1 -0
  91. package/dist/services/v2/index-service.js +274 -0
  92. package/dist/services/v2/index-service.js.map +1 -0
  93. package/dist/services/v2/index-service.test.d.ts +5 -0
  94. package/dist/services/v2/index-service.test.d.ts.map +1 -0
  95. package/dist/services/v2/index-service.test.js +117 -0
  96. package/dist/services/v2/index-service.test.js.map +1 -0
  97. package/dist/services/v2/lifecycle-manager.d.ts +59 -0
  98. package/dist/services/v2/lifecycle-manager.d.ts.map +1 -0
  99. package/dist/services/v2/lifecycle-manager.js +310 -0
  100. package/dist/services/v2/lifecycle-manager.js.map +1 -0
  101. package/dist/services/v2/lifecycle-manager.test.d.ts +5 -0
  102. package/dist/services/v2/lifecycle-manager.test.d.ts.map +1 -0
  103. package/dist/services/v2/lifecycle-manager.test.js +141 -0
  104. package/dist/services/v2/lifecycle-manager.test.js.map +1 -0
  105. package/dist/services/v2/path-resolver.d.ts +64 -0
  106. package/dist/services/v2/path-resolver.d.ts.map +1 -0
  107. package/dist/services/v2/path-resolver.js +174 -0
  108. package/dist/services/v2/path-resolver.js.map +1 -0
  109. package/dist/services/v2/progress-computer.d.ts +46 -0
  110. package/dist/services/v2/progress-computer.d.ts.map +1 -0
  111. package/dist/services/v2/progress-computer.js +200 -0
  112. package/dist/services/v2/progress-computer.js.map +1 -0
  113. package/dist/services/v2/search-service.d.ts +68 -0
  114. package/dist/services/v2/search-service.d.ts.map +1 -0
  115. package/dist/services/v2/search-service.js +194 -0
  116. package/dist/services/v2/search-service.js.map +1 -0
  117. package/dist/services/v2/transitive-dependency-remover.d.ts +54 -0
  118. package/dist/services/v2/transitive-dependency-remover.d.ts.map +1 -0
  119. package/dist/services/v2/transitive-dependency-remover.js +156 -0
  120. package/dist/services/v2/transitive-dependency-remover.js.map +1 -0
  121. package/dist/services/v2/transitive-dependency-remover.test.d.ts +7 -0
  122. package/dist/services/v2/transitive-dependency-remover.test.d.ts.map +1 -0
  123. package/dist/services/v2/transitive-dependency-remover.test.js +119 -0
  124. package/dist/services/v2/transitive-dependency-remover.test.js.map +1 -0
  125. package/dist/services/v2/v2-runtime.d.ts +374 -0
  126. package/dist/services/v2/v2-runtime.d.ts.map +1 -0
  127. package/dist/services/v2/v2-runtime.js +1908 -0
  128. package/dist/services/v2/v2-runtime.js.map +1 -0
  129. package/dist/services/v2/v2-runtime.test.d.ts +5 -0
  130. package/dist/services/v2/v2-runtime.test.d.ts.map +1 -0
  131. package/dist/services/v2/v2-runtime.test.js +658 -0
  132. package/dist/services/v2/v2-runtime.test.js.map +1 -0
  133. package/dist/services/v2/workstream-normalizer.d.ts +59 -0
  134. package/dist/services/v2/workstream-normalizer.d.ts.map +1 -0
  135. package/dist/services/v2/workstream-normalizer.js +137 -0
  136. package/dist/services/v2/workstream-normalizer.js.map +1 -0
  137. package/dist/services/v2/workstream-normalizer.test.d.ts +7 -0
  138. package/dist/services/v2/workstream-normalizer.test.d.ts.map +1 -0
  139. package/dist/services/v2/workstream-normalizer.test.js +130 -0
  140. package/dist/services/v2/workstream-normalizer.test.js.map +1 -0
  141. package/dist/test-runner.d.ts +4 -1
  142. package/dist/test-runner.d.ts.map +1 -1
  143. package/dist/test-runner.js +44 -249
  144. package/dist/test-runner.js.map +1 -1
  145. package/dist/tools/batch-operations-tools.d.ts +54 -0
  146. package/dist/tools/batch-operations-tools.d.ts.map +1 -0
  147. package/dist/tools/batch-operations-tools.js +370 -0
  148. package/dist/tools/batch-operations-tools.js.map +1 -0
  149. package/dist/tools/decision-document-tools.d.ts +78 -0
  150. package/dist/tools/decision-document-tools.d.ts.map +1 -0
  151. package/dist/tools/decision-document-tools.js +260 -0
  152. package/dist/tools/decision-document-tools.js.map +1 -0
  153. package/dist/tools/entity-management-tools.d.ts +79 -0
  154. package/dist/tools/entity-management-tools.d.ts.map +1 -0
  155. package/dist/tools/entity-management-tools.js +851 -0
  156. package/dist/tools/entity-management-tools.js.map +1 -0
  157. package/dist/tools/entity-management-tools.test.d.ts +5 -0
  158. package/dist/tools/entity-management-tools.test.d.ts.map +1 -0
  159. package/dist/tools/entity-management-tools.test.js +530 -0
  160. package/dist/tools/entity-management-tools.test.js.map +1 -0
  161. package/dist/tools/index.d.ts +15 -271
  162. package/dist/tools/index.d.ts.map +1 -1
  163. package/dist/tools/index.js +510 -47
  164. package/dist/tools/index.js.map +1 -1
  165. package/dist/tools/index.test.d.ts +8 -0
  166. package/dist/tools/index.test.d.ts.map +1 -0
  167. package/dist/tools/index.test.js +429 -0
  168. package/dist/tools/index.test.js.map +1 -0
  169. package/dist/tools/project-understanding-tools.d.ts +75 -0
  170. package/dist/tools/project-understanding-tools.d.ts.map +1 -0
  171. package/dist/tools/project-understanding-tools.js +751 -0
  172. package/dist/tools/project-understanding-tools.js.map +1 -0
  173. package/dist/tools/search-navigation-tools.d.ts +77 -0
  174. package/dist/tools/search-navigation-tools.d.ts.map +1 -0
  175. package/dist/tools/search-navigation-tools.js +379 -0
  176. package/dist/tools/search-navigation-tools.js.map +1 -0
  177. package/dist/tools/tool-types.d.ts +703 -0
  178. package/dist/tools/tool-types.d.ts.map +1 -0
  179. package/dist/tools/tool-types.js +7 -0
  180. package/dist/tools/tool-types.js.map +1 -0
  181. package/dist/utils/config.d.ts +0 -4
  182. package/dist/utils/config.d.ts.map +1 -1
  183. package/dist/utils/config.js +2 -19
  184. package/dist/utils/config.js.map +1 -1
  185. package/package.json +16 -1
  186. package/dist/services/accomplishment-service.d.ts +0 -33
  187. package/dist/services/accomplishment-service.d.ts.map +0 -1
  188. package/dist/services/accomplishment-service.js +0 -293
  189. package/dist/services/accomplishment-service.js.map +0 -1
  190. package/dist/services/canvas-service.d.ts +0 -96
  191. package/dist/services/canvas-service.d.ts.map +0 -1
  192. package/dist/services/canvas-service.js +0 -231
  193. package/dist/services/canvas-service.js.map +0 -1
  194. package/dist/services/context-doc-service.d.ts +0 -70
  195. package/dist/services/context-doc-service.d.ts.map +0 -1
  196. package/dist/services/context-doc-service.js +0 -229
  197. package/dist/services/context-doc-service.js.map +0 -1
  198. package/dist/services/dependency-service.d.ts +0 -22
  199. package/dist/services/dependency-service.d.ts.map +0 -1
  200. package/dist/services/dependency-service.js +0 -99
  201. package/dist/services/dependency-service.js.map +0 -1
  202. package/dist/services/status-indicator-service.d.ts +0 -40
  203. package/dist/services/status-indicator-service.d.ts.map +0 -1
  204. package/dist/services/status-indicator-service.js +0 -173
  205. package/dist/services/status-indicator-service.js.map +0 -1
  206. package/dist/services/task-service.d.ts +0 -32
  207. package/dist/services/task-service.d.ts.map +0 -1
  208. package/dist/services/task-service.js +0 -152
  209. package/dist/services/task-service.js.map +0 -1
  210. package/dist/test-real-vault.d.ts +0 -6
  211. package/dist/test-real-vault.d.ts.map +0 -1
  212. package/dist/test-real-vault.js +0 -30
  213. package/dist/test-real-vault.js.map +0 -1
  214. package/dist/tools/batch-operations.d.ts +0 -246
  215. package/dist/tools/batch-operations.d.ts.map +0 -1
  216. package/dist/tools/batch-operations.js +0 -235
  217. package/dist/tools/batch-operations.js.map +0 -1
  218. package/dist/tools/get-accomplishment.d.ts +0 -26
  219. package/dist/tools/get-accomplishment.d.ts.map +0 -1
  220. package/dist/tools/get-accomplishment.js +0 -53
  221. package/dist/tools/get-accomplishment.js.map +0 -1
  222. package/dist/tools/get-accomplishments-graph.d.ts +0 -26
  223. package/dist/tools/get-accomplishments-graph.d.ts.map +0 -1
  224. package/dist/tools/get-accomplishments-graph.js +0 -137
  225. package/dist/tools/get-accomplishments-graph.js.map +0 -1
  226. package/dist/tools/get-blocked-items.d.ts +0 -15
  227. package/dist/tools/get-blocked-items.d.ts.map +0 -1
  228. package/dist/tools/get-blocked-items.js +0 -73
  229. package/dist/tools/get-blocked-items.js.map +0 -1
  230. package/dist/tools/get-current-work.d.ts +0 -15
  231. package/dist/tools/get-current-work.d.ts.map +0 -1
  232. package/dist/tools/get-current-work.js +0 -68
  233. package/dist/tools/get-current-work.js.map +0 -1
  234. package/dist/tools/get-project-status.d.ts +0 -26
  235. package/dist/tools/get-project-status.d.ts.map +0 -1
  236. package/dist/tools/get-project-status.js +0 -98
  237. package/dist/tools/get-project-status.js.map +0 -1
  238. package/dist/tools/get-ready-to-start.d.ts +0 -15
  239. package/dist/tools/get-ready-to-start.d.ts.map +0 -1
  240. package/dist/tools/get-ready-to-start.js +0 -47
  241. package/dist/tools/get-ready-to-start.js.map +0 -1
  242. package/dist/tools/list-accomplishments.d.ts +0 -34
  243. package/dist/tools/list-accomplishments.d.ts.map +0 -1
  244. package/dist/tools/list-accomplishments.js +0 -34
  245. package/dist/tools/list-accomplishments.js.map +0 -1
  246. package/dist/tools/manage-accomplishment.d.ts +0 -147
  247. package/dist/tools/manage-accomplishment.d.ts.map +0 -1
  248. package/dist/tools/manage-accomplishment.js +0 -153
  249. package/dist/tools/manage-accomplishment.js.map +0 -1
  250. package/dist/tools/manage-dependency.d.ts +0 -41
  251. package/dist/tools/manage-dependency.d.ts.map +0 -1
  252. package/dist/tools/manage-dependency.js +0 -66
  253. package/dist/tools/manage-dependency.js.map +0 -1
  254. package/dist/tools/manage-task.d.ts +0 -119
  255. package/dist/tools/manage-task.d.ts.map +0 -1
  256. package/dist/tools/manage-task.js +0 -126
  257. package/dist/tools/manage-task.js.map +0 -1
  258. package/dist/tools/reconcile-canvas.d.ts +0 -33
  259. package/dist/tools/reconcile-canvas.d.ts.map +0 -1
  260. package/dist/tools/reconcile-canvas.js +0 -41
  261. package/dist/tools/reconcile-canvas.js.map +0 -1
  262. package/dist/tools/set-work-focus.d.ts +0 -48
  263. package/dist/tools/set-work-focus.d.ts.map +0 -1
  264. package/dist/tools/set-work-focus.js +0 -78
  265. package/dist/tools/set-work-focus.js.map +0 -1
  266. package/dist/tools/sync-dependencies.d.ts +0 -33
  267. package/dist/tools/sync-dependencies.d.ts.map +0 -1
  268. package/dist/tools/sync-dependencies.js +0 -144
  269. package/dist/tools/sync-dependencies.js.map +0 -1
@@ -1,231 +0,0 @@
1
- import { NotFoundError, } from '../models/types.js';
2
- import { parseCanvas, serializeCanvas, findNodeByFile } from '../parsers/canvas-parser.js';
3
- import { readFile, writeFileAtomic, fileExists } from '../utils/file-utils.js';
4
- import { getCanvasPath } from '../utils/config.js';
5
- import { generateId } from '../utils/file-utils.js';
6
- /**
7
- * Apply multiple operations to canvas atomically with merge strategy.
8
- *
9
- * Flow:
10
- * 1. Read current canvas (captures Obsidian's latest state)
11
- * 2. Apply our operations in memory (our changes take precedence on conflicts)
12
- * 3. Write to temp file
13
- * 4. Atomic rename to canvas file
14
- * 5. Trigger Obsidian reload
15
- *
16
- * This minimizes race conditions with Obsidian and preserves user changes
17
- * that don't conflict with our operations.
18
- */
19
- export async function applyCanvasOperations(config, operations, canvasSource) {
20
- if (operations.length === 0)
21
- return;
22
- const canvasPath = getCanvasPath(config, canvasSource);
23
- // Step 1: Read current canvas (captures any user changes)
24
- const canvas = await loadCanvas(config, canvasSource);
25
- // Step 2: Apply our operations (our changes win on conflicts)
26
- for (const op of operations) {
27
- switch (op.type) {
28
- case 'add_node': {
29
- // Check if node with same file already exists
30
- const existing = findNodeByFile(canvas, op.node.file);
31
- if (existing) {
32
- // Update to our values (our changes win)
33
- Object.assign(existing, op.node);
34
- }
35
- else {
36
- canvas.nodes.push(op.node);
37
- }
38
- break;
39
- }
40
- case 'remove_node': {
41
- const node = findNodeByFile(canvas, op.filePath);
42
- if (node) {
43
- canvas.nodes = canvas.nodes.filter(n => n.id !== node.id);
44
- canvas.edges = canvas.edges.filter(e => e.fromNode !== node.id && e.toNode !== node.id);
45
- }
46
- break;
47
- }
48
- case 'update_position': {
49
- const node = findNodeByFile(canvas, op.filePath);
50
- if (node) {
51
- node.x = op.position.x;
52
- node.y = op.position.y;
53
- }
54
- break;
55
- }
56
- case 'add_edge': {
57
- const fromNode = findNodeByFile(canvas, op.fromFilePath);
58
- const toNode = findNodeByFile(canvas, op.toFilePath);
59
- if (fromNode && toNode) {
60
- // Only add if not already exists
61
- const exists = canvas.edges.some(e => e.fromNode === fromNode.id && e.toNode === toNode.id);
62
- if (!exists) {
63
- canvas.edges.push({
64
- id: generateId(),
65
- fromNode: fromNode.id,
66
- toNode: toNode.id,
67
- fromSide: 'right',
68
- toSide: 'left',
69
- });
70
- }
71
- }
72
- break;
73
- }
74
- case 'remove_edge': {
75
- const fromNode = findNodeByFile(canvas, op.fromFilePath);
76
- const toNode = findNodeByFile(canvas, op.toFilePath);
77
- if (fromNode && toNode) {
78
- canvas.edges = canvas.edges.filter(e => !(e.fromNode === fromNode.id && e.toNode === toNode.id));
79
- }
80
- break;
81
- }
82
- }
83
- }
84
- // Steps 3-4: Write to temp file and atomic rename (handled by writeFileAtomic)
85
- const content = serializeCanvas(canvas);
86
- await writeFileAtomic(canvasPath, content);
87
- // Note: Obsidian auto-detects file changes, no need to trigger reload
88
- }
89
- /**
90
- * Load a canvas file
91
- */
92
- export async function loadCanvas(config, canvasSource) {
93
- const canvasPath = getCanvasPath(config, canvasSource);
94
- if (!(await fileExists(canvasPath))) {
95
- throw new NotFoundError(`Canvas file not found: ${canvasPath}`);
96
- }
97
- const content = await readFile(canvasPath);
98
- return parseCanvas(content);
99
- }
100
- /**
101
- * Save a canvas file
102
- */
103
- export async function saveCanvas(config, canvas, canvasSource) {
104
- const canvasPath = getCanvasPath(config, canvasSource);
105
- const content = serializeCanvas(canvas);
106
- await writeFileAtomic(canvasPath, content);
107
- }
108
- /**
109
- * Get all accomplishment IDs from canvas by reading file nodes
110
- */
111
- export async function getAllAccomplishmentIds(config, canvasSource) {
112
- const canvas = await loadCanvas(config, canvasSource);
113
- const ids = [];
114
- // Get all file nodes that are in the accomplishments folder
115
- for (const node of canvas.nodes) {
116
- if (node.type === 'file' && node.file?.startsWith(config.accomplishmentsFolder)) {
117
- // Read the file to get the ID from frontmatter
118
- try {
119
- const filePath = `${config.vaultPath}/${node.file}`;
120
- const content = await readFile(filePath);
121
- const idMatch = content.match(/^id:\s*(.+)$/m);
122
- if (idMatch) {
123
- ids.push(idMatch[1].trim());
124
- }
125
- }
126
- catch {
127
- // File might not exist or be readable
128
- }
129
- }
130
- }
131
- return ids;
132
- }
133
- /**
134
- * Generate next accomplishment ID
135
- */
136
- export async function generateAccomplishmentId(config, canvasSource) {
137
- const existingIds = await getAllAccomplishmentIds(config, canvasSource);
138
- const numbers = existingIds
139
- .map(id => {
140
- const match = id.match(/^ACC-(\d+)$/);
141
- return match ? parseInt(match[1], 10) : 0;
142
- })
143
- .filter(n => !isNaN(n));
144
- const maxNumber = numbers.length > 0 ? Math.max(...numbers) : 0;
145
- return `ACC-${String(maxNumber + 1).padStart(3, '0')}`;
146
- }
147
- /**
148
- * Add a node to canvas for an accomplishment
149
- * Uses merge-based approach to handle concurrent Obsidian edits
150
- */
151
- export async function addAccomplishmentNode(config, filePath, position, canvasSource) {
152
- const node = {
153
- id: generateId(),
154
- type: 'file',
155
- file: filePath,
156
- x: position.x,
157
- y: position.y,
158
- width: 400,
159
- height: 300,
160
- };
161
- await applyCanvasOperations(config, [{ type: 'add_node', node }], canvasSource);
162
- return node;
163
- }
164
- /**
165
- * Remove an accomplishment node from canvas
166
- * Uses merge-based approach to handle concurrent Obsidian edits
167
- */
168
- export async function removeAccomplishmentNode(config, filePath, canvasSource) {
169
- await applyCanvasOperations(config, [{ type: 'remove_node', filePath }], canvasSource);
170
- }
171
- /**
172
- * Update node position
173
- * Uses merge-based approach to handle concurrent Obsidian edits
174
- */
175
- export async function updateNodePosition(config, filePath, position, canvasSource) {
176
- await applyCanvasOperations(config, [{ type: 'update_position', filePath, position }], canvasSource);
177
- }
178
- /**
179
- * Add a dependency edge between two accomplishments
180
- * Uses merge-based approach to handle concurrent Obsidian edits
181
- */
182
- export async function addDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource) {
183
- // First check if nodes exist (read-only operation)
184
- const canvas = await loadCanvas(config, canvasSource);
185
- const blockerNode = findNodeByFile(canvas, blockerFilePath);
186
- const blockedNode = findNodeByFile(canvas, blockedFilePath);
187
- if (!blockerNode || !blockedNode) {
188
- return null;
189
- }
190
- // Check if edge already exists
191
- const existingEdge = canvas.edges.find(e => e.fromNode === blockerNode.id && e.toNode === blockedNode.id);
192
- if (existingEdge) {
193
- return existingEdge;
194
- }
195
- // Apply the operation with merge strategy
196
- await applyCanvasOperations(config, [{ type: 'add_edge', fromFilePath: blockerFilePath, toFilePath: blockedFilePath }], canvasSource);
197
- // Return the edge info (re-read to get the actual edge created)
198
- const updatedCanvas = await loadCanvas(config, canvasSource);
199
- const newBlockerNode = findNodeByFile(updatedCanvas, blockerFilePath);
200
- const newBlockedNode = findNodeByFile(updatedCanvas, blockedFilePath);
201
- return updatedCanvas.edges.find(e => e.fromNode === newBlockerNode?.id && e.toNode === newBlockedNode?.id) || null;
202
- }
203
- /**
204
- * Remove a dependency edge
205
- * Uses merge-based approach to handle concurrent Obsidian edits
206
- */
207
- export async function removeDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource) {
208
- await applyCanvasOperations(config, [{ type: 'remove_edge', fromFilePath: blockerFilePath, toFilePath: blockedFilePath }], canvasSource);
209
- }
210
- /**
211
- * Get node by file path
212
- */
213
- export async function getNodeByFilePath(config, filePath, canvasSource) {
214
- const canvas = await loadCanvas(config, canvasSource);
215
- return findNodeByFile(canvas, filePath);
216
- }
217
- /**
218
- * Get node IDs for given file paths
219
- */
220
- export async function getNodeIdsByFilePaths(config, filePaths, canvasSource) {
221
- const canvas = await loadCanvas(config, canvasSource);
222
- const nodeIds = [];
223
- for (const filePath of filePaths) {
224
- const node = findNodeByFile(canvas, filePath);
225
- if (node) {
226
- nodeIds.push(node.id);
227
- }
228
- }
229
- return nodeIds;
230
- }
231
- //# sourceMappingURL=canvas-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canvas-service.js","sourceRoot":"","sources":["../../src/services/canvas-service.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- import { Config } from '../models/types.js';
2
- /**
3
- * Get the folder path where the canvas file is located
4
- */
5
- export declare function getCanvasFolderPath(config: Config, canvasSource?: string): string;
6
- /**
7
- * Get all MD files in the canvas folder
8
- */
9
- export declare function getAllMdFilesInCanvasFolder(config: Config, canvasSource?: string): Promise<string[]>;
10
- /**
11
- * Get all MD files in the context docs folder (if configured)
12
- */
13
- export declare function getAllMdFilesInContextDocsFolder(config: Config): Promise<string[]>;
14
- /**
15
- * Get all files referenced by the canvas
16
- */
17
- export declare function getCanvasReferencedFiles(config: Config, canvasSource?: string): Promise<Set<string>>;
18
- /**
19
- * Get context documents from both sources:
20
- * 1. MD files in canvas folder NOT referenced by canvas
21
- * 2. All MD files in CONTEXT_DOCS_FOLDER (if configured)
22
- *
23
- * Files from context docs folder are prefixed with "context:" to distinguish them
24
- */
25
- export declare function getContextDocuments(config: Config, canvasSource?: string): Promise<string[]>;
26
- /**
27
- * Parse doc name to determine source folder and actual filename
28
- */
29
- export declare function parseDocName(docName: string): {
30
- isContextFolder: boolean;
31
- filename: string;
32
- };
33
- /**
34
- * Get full path to a context document
35
- * Handles both canvas folder docs and context folder docs (prefixed with "context:")
36
- */
37
- export declare function getContextDocPath(config: Config, docName: string, canvasSource?: string): string;
38
- /**
39
- * Check if a document is a valid context document (exists and not referenced by canvas)
40
- */
41
- export declare function isContextDocument(config: Config, docName: string, canvasSource?: string): Promise<boolean>;
42
- /**
43
- * Read a single context document
44
- */
45
- export declare function readContextDocument(config: Config, docName: string, canvasSource?: string, startLine?: number, endLine?: number): Promise<string>;
46
- /**
47
- * Read all context documents
48
- */
49
- export declare function readAllContextDocuments(config: Config, canvasSource?: string): Promise<Record<string, string>>;
50
- /**
51
- * Create a new context document
52
- */
53
- export declare function createContextDocument(config: Config, docName: string, content: string, canvasSource?: string): Promise<void>;
54
- /**
55
- * Replace entire content of a context document
56
- */
57
- export declare function replaceContextDocument(config: Config, docName: string, content: string, canvasSource?: string): Promise<void>;
58
- /**
59
- * Delete a context document
60
- */
61
- export declare function deleteContextDocument(config: Config, docName: string, canvasSource?: string): Promise<void>;
62
- /**
63
- * Insert content at a specific line in a context document
64
- */
65
- export declare function insertAtLine(config: Config, docName: string, content: string, startLine: number, canvasSource?: string): Promise<void>;
66
- /**
67
- * Replace content in a specific line range in a context document
68
- */
69
- export declare function replaceAtRange(config: Config, docName: string, content: string, startLine: number, endLine: number, canvasSource?: string): Promise<void>;
70
- //# sourceMappingURL=context-doc-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-doc-service.d.ts","sourceRoot":"","sources":["../../src/services/context-doc-service.ts"],"names":[],"mappings":"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"}
@@ -1,229 +0,0 @@
1
- import { NotFoundError, ValidationError, ConflictError } from '../models/types.js';
2
- import { loadCanvas } from './canvas-service.js';
3
- import { readFile, writeFileAtomic, deleteFile, fileExists, listFiles } from '../utils/file-utils.js';
4
- import { getCanvasPath, getContextDocsFolderPath } from '../utils/config.js';
5
- import { dirname } from 'path';
6
- // Prefix used to identify docs from the context docs folder
7
- const CONTEXT_FOLDER_PREFIX = 'context:';
8
- /**
9
- * Get the folder path where the canvas file is located
10
- */
11
- export function getCanvasFolderPath(config, canvasSource) {
12
- const canvasPath = getCanvasPath(config, canvasSource);
13
- return dirname(canvasPath);
14
- }
15
- /**
16
- * Get all MD files in the canvas folder
17
- */
18
- export async function getAllMdFilesInCanvasFolder(config, canvasSource) {
19
- const folderPath = getCanvasFolderPath(config, canvasSource);
20
- const files = await listFiles(folderPath);
21
- return files.filter(f => f.endsWith('.md'));
22
- }
23
- /**
24
- * Get all MD files in the context docs folder (if configured)
25
- */
26
- export async function getAllMdFilesInContextDocsFolder(config) {
27
- const folderPath = getContextDocsFolderPath(config);
28
- if (!folderPath)
29
- return [];
30
- const files = await listFiles(folderPath);
31
- return files.filter(f => f.endsWith('.md'));
32
- }
33
- /**
34
- * Get all files referenced by the canvas
35
- */
36
- export async function getCanvasReferencedFiles(config, canvasSource) {
37
- const canvas = await loadCanvas(config, canvasSource);
38
- const referencedFiles = new Set();
39
- for (const node of canvas.nodes) {
40
- if (node.type === 'file' && node.file) {
41
- // Extract just the filename from the path
42
- const parts = node.file.split('/');
43
- const filename = parts[parts.length - 1];
44
- referencedFiles.add(filename);
45
- }
46
- }
47
- return referencedFiles;
48
- }
49
- /**
50
- * Get context documents from both sources:
51
- * 1. MD files in canvas folder NOT referenced by canvas
52
- * 2. All MD files in CONTEXT_DOCS_FOLDER (if configured)
53
- *
54
- * Files from context docs folder are prefixed with "context:" to distinguish them
55
- */
56
- export async function getContextDocuments(config, canvasSource) {
57
- const result = [];
58
- // 1. Get canvas folder context docs (not referenced by canvas)
59
- const allMdFiles = await getAllMdFilesInCanvasFolder(config, canvasSource);
60
- const referencedFiles = await getCanvasReferencedFiles(config, canvasSource);
61
- const canvasFolderDocs = allMdFiles.filter(f => !referencedFiles.has(f));
62
- result.push(...canvasFolderDocs);
63
- // 2. Get context docs folder files (if configured)
64
- const contextFolderDocs = await getAllMdFilesInContextDocsFolder(config);
65
- // Prefix with "context:" to distinguish from canvas folder docs
66
- result.push(...contextFolderDocs.map(f => `${CONTEXT_FOLDER_PREFIX}${f}`));
67
- return result;
68
- }
69
- /**
70
- * Parse doc name to determine source folder and actual filename
71
- */
72
- export function parseDocName(docName) {
73
- if (docName.startsWith(CONTEXT_FOLDER_PREFIX)) {
74
- const filename = docName.slice(CONTEXT_FOLDER_PREFIX.length);
75
- return {
76
- isContextFolder: true,
77
- filename: filename.endsWith('.md') ? filename : `${filename}.md`,
78
- };
79
- }
80
- return {
81
- isContextFolder: false,
82
- filename: docName.endsWith('.md') ? docName : `${docName}.md`,
83
- };
84
- }
85
- /**
86
- * Get full path to a context document
87
- * Handles both canvas folder docs and context folder docs (prefixed with "context:")
88
- */
89
- export function getContextDocPath(config, docName, canvasSource) {
90
- const { isContextFolder, filename } = parseDocName(docName);
91
- if (isContextFolder) {
92
- const contextFolderPath = getContextDocsFolderPath(config);
93
- if (!contextFolderPath) {
94
- throw new ValidationError('CONTEXT_DOCS_FOLDER is not configured');
95
- }
96
- return `${contextFolderPath}/${filename}`;
97
- }
98
- const folderPath = getCanvasFolderPath(config, canvasSource);
99
- return `${folderPath}/${filename}`;
100
- }
101
- /**
102
- * Check if a document is a valid context document (exists and not referenced by canvas)
103
- */
104
- export async function isContextDocument(config, docName, canvasSource) {
105
- const contextDocs = await getContextDocuments(config, canvasSource);
106
- const { isContextFolder, filename } = parseDocName(docName);
107
- if (isContextFolder) {
108
- return contextDocs.includes(`${CONTEXT_FOLDER_PREFIX}${filename}`);
109
- }
110
- return contextDocs.includes(filename);
111
- }
112
- /**
113
- * Read a single context document
114
- */
115
- export async function readContextDocument(config, docName, canvasSource, startLine, endLine) {
116
- const docPath = getContextDocPath(config, docName, canvasSource);
117
- if (!(await fileExists(docPath))) {
118
- throw new NotFoundError(`Context document not found: ${docName}`);
119
- }
120
- const content = await readFile(docPath);
121
- // If no line range specified, return full content
122
- if (startLine === undefined && endLine === undefined) {
123
- return content;
124
- }
125
- // Split into lines and apply range (0-based, start inclusive, end exclusive)
126
- const lines = content.split('\n');
127
- const start = startLine ?? 0;
128
- const end = endLine ?? lines.length;
129
- // Validate range
130
- if (start < 0 || start > lines.length) {
131
- throw new ValidationError(`Invalid start_line: ${start}. File has ${lines.length} lines (0-${lines.length - 1})`);
132
- }
133
- if (end < start) {
134
- throw new ValidationError(`end_line (${end}) must be >= start_line (${start})`);
135
- }
136
- return lines.slice(start, end).join('\n');
137
- }
138
- /**
139
- * Read all context documents
140
- */
141
- export async function readAllContextDocuments(config, canvasSource) {
142
- const contextDocs = await getContextDocuments(config, canvasSource);
143
- const result = {};
144
- for (const docName of contextDocs) {
145
- const docPath = getContextDocPath(config, docName, canvasSource);
146
- try {
147
- result[docName] = await readFile(docPath);
148
- }
149
- catch {
150
- // Skip files that can't be read
151
- }
152
- }
153
- return result;
154
- }
155
- /**
156
- * Create a new context document
157
- */
158
- export async function createContextDocument(config, docName, content, canvasSource) {
159
- const docPath = getContextDocPath(config, docName, canvasSource);
160
- if (await fileExists(docPath)) {
161
- throw new ConflictError(`Document already exists: ${docName}. Use 'replace' operation to overwrite.`);
162
- }
163
- await writeFileAtomic(docPath, content);
164
- }
165
- /**
166
- * Replace entire content of a context document
167
- */
168
- export async function replaceContextDocument(config, docName, content, canvasSource) {
169
- const docPath = getContextDocPath(config, docName, canvasSource);
170
- if (!(await fileExists(docPath))) {
171
- throw new NotFoundError(`Context document not found: ${docName}`);
172
- }
173
- await writeFileAtomic(docPath, content);
174
- }
175
- /**
176
- * Delete a context document
177
- */
178
- export async function deleteContextDocument(config, docName, canvasSource) {
179
- const docPath = getContextDocPath(config, docName, canvasSource);
180
- if (!(await fileExists(docPath))) {
181
- throw new NotFoundError(`Context document not found: ${docName}`);
182
- }
183
- await deleteFile(docPath);
184
- }
185
- /**
186
- * Insert content at a specific line in a context document
187
- */
188
- export async function insertAtLine(config, docName, content, startLine, canvasSource) {
189
- const docPath = getContextDocPath(config, docName, canvasSource);
190
- if (!(await fileExists(docPath))) {
191
- throw new NotFoundError(`Context document not found: ${docName}`);
192
- }
193
- const existingContent = await readFile(docPath);
194
- const lines = existingContent.split('\n');
195
- // Validate line number (0-based)
196
- if (startLine < 0 || startLine > lines.length) {
197
- throw new ValidationError(`Invalid start_line: ${startLine}. File has ${lines.length} lines (valid range: 0-${lines.length})`);
198
- }
199
- // Insert content at the specified line
200
- const newLines = content.split('\n');
201
- lines.splice(startLine, 0, ...newLines);
202
- await writeFileAtomic(docPath, lines.join('\n'));
203
- }
204
- /**
205
- * Replace content in a specific line range in a context document
206
- */
207
- export async function replaceAtRange(config, docName, content, startLine, endLine, canvasSource) {
208
- const docPath = getContextDocPath(config, docName, canvasSource);
209
- if (!(await fileExists(docPath))) {
210
- throw new NotFoundError(`Context document not found: ${docName}`);
211
- }
212
- const existingContent = await readFile(docPath);
213
- const lines = existingContent.split('\n');
214
- // Validate range (0-based, start inclusive, end exclusive)
215
- if (startLine < 0 || startLine > lines.length) {
216
- throw new ValidationError(`Invalid start_line: ${startLine}. File has ${lines.length} lines (valid range: 0-${lines.length - 1})`);
217
- }
218
- if (endLine < startLine) {
219
- throw new ValidationError(`end_line (${endLine}) must be >= start_line (${startLine})`);
220
- }
221
- if (endLine > lines.length) {
222
- throw new ValidationError(`Invalid end_line: ${endLine}. File has ${lines.length} lines (valid range: 0-${lines.length})`);
223
- }
224
- // Replace lines in range with new content
225
- const newLines = content.split('\n');
226
- lines.splice(startLine, endLine - startLine, ...newLines);
227
- await writeFileAtomic(docPath, lines.join('\n'));
228
- }
229
- //# sourceMappingURL=context-doc-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-doc-service.js","sourceRoot":"","sources":["../../src/services/context-doc-service.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { Config } from '../models/types.js';
2
- /**
3
- * Add a dependency between two accomplishments
4
- */
5
- export declare function addDependency(config: Config, blockerId: string, blockedId: string): Promise<{
6
- position: {
7
- x: number;
8
- y: number;
9
- };
10
- }>;
11
- /**
12
- * Remove a dependency between two accomplishments
13
- */
14
- export declare function removeDependency(config: Config, blockerId: string, blockedId: string): Promise<void>;
15
- /**
16
- * Get all dependencies for an accomplishment
17
- */
18
- export declare function getDependencies(config: Config, accomplishmentId: string): Promise<{
19
- blockers: string[];
20
- blocking: string[];
21
- }>;
22
- //# sourceMappingURL=dependency-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency-service.d.ts","sourceRoot":"","sources":["../../src/services/dependency-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAGP,MAAM,oBAAoB,CAAC;AAY5B;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAqDjD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgBrD"}