obsidian-accomplishments-mcp 0.1.10 → 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 -331
  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 -296
  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 -42
  219. package/dist/tools/get-accomplishment.d.ts.map +0 -1
  220. package/dist/tools/get-accomplishment.js +0 -93
  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 -42
  243. package/dist/tools/list-accomplishments.d.ts.map +0 -1
  244. package/dist/tools/list-accomplishments.js +0 -40
  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
@@ -0,0 +1,174 @@
1
+ /**
2
+ * V2 Path Resolver
3
+ *
4
+ * Resolves entity paths, archive paths, and file naming conventions.
5
+ */
6
+ import * as path from 'path';
7
+ import { getEntityTypeFromId, } from '../../models/v2-types.js';
8
+ // =============================================================================
9
+ // Path Constants
10
+ // =============================================================================
11
+ /** Folder names for each entity type */
12
+ const TYPE_FOLDERS = {
13
+ milestone: 'milestones',
14
+ story: 'stories',
15
+ task: 'tasks',
16
+ decision: 'decisions',
17
+ document: 'documents',
18
+ feature: 'features',
19
+ };
20
+ /** Archive folder structure */
21
+ const ARCHIVE_FOLDER = 'archive';
22
+ // =============================================================================
23
+ // Path Resolver Class
24
+ // =============================================================================
25
+ /**
26
+ * Resolves file paths for entities in the vault.
27
+ */
28
+ export class PathResolver {
29
+ config;
30
+ constructor(config) {
31
+ this.config = config;
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Entity Paths
35
+ // ---------------------------------------------------------------------------
36
+ /** Get folder path for entity type */
37
+ getTypeFolderPath(type) {
38
+ return path.join(this.config.entitiesFolder, TYPE_FOLDERS[type]);
39
+ }
40
+ /** Get absolute folder path for entity type */
41
+ getAbsoluteTypeFolderPath(type) {
42
+ return path.join(this.config.vaultPath, this.getTypeFolderPath(type));
43
+ }
44
+ /** Generate file path for entity */
45
+ getEntityPath(id, title) {
46
+ const type = getEntityTypeFromId(id);
47
+ if (!type)
48
+ throw new Error(`Invalid entity ID: ${id}`);
49
+ const folder = this.getTypeFolderPath(type);
50
+ const filename = this.generateFilename(id, title);
51
+ return path.join(folder, filename);
52
+ }
53
+ /** Get absolute file path for entity */
54
+ getAbsoluteEntityPath(id, title) {
55
+ return path.join(this.config.vaultPath, this.getEntityPath(id, title));
56
+ }
57
+ /** Generate filename from title (ID is stored in frontmatter, not filename) */
58
+ generateFilename(_id, title) {
59
+ const sanitized = this.sanitizeTitle(title);
60
+ return `${sanitized}.md`;
61
+ }
62
+ /** Sanitize title for use in filename */
63
+ sanitizeTitle(title) {
64
+ return title
65
+ .replace(/[<>:"/\\|?*]/g, '') // Remove invalid chars
66
+ .replace(/\s+/g, '_') // Replace spaces with underscores
67
+ .replace(/_+/g, '_') // Collapse multiple underscores
68
+ .replace(/^_|_$/g, '') // Trim leading/trailing underscores
69
+ .substring(0, 100); // Limit length
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Archive Paths
73
+ // ---------------------------------------------------------------------------
74
+ /** Get archive folder path for a date */
75
+ getArchiveFolderPath(date = new Date()) {
76
+ const year = date.getFullYear();
77
+ const quarter = Math.ceil((date.getMonth() + 1) / 3);
78
+ return path.join(this.config.archiveFolder, `${year}-Q${quarter}`);
79
+ }
80
+ /** Get absolute archive folder path */
81
+ getAbsoluteArchiveFolderPath(date = new Date()) {
82
+ return path.join(this.config.vaultPath, this.getArchiveFolderPath(date));
83
+ }
84
+ /** Get archive path for entity */
85
+ getArchivePath(id, title, date = new Date()) {
86
+ const archiveFolder = this.getArchiveFolderPath(date);
87
+ const filename = this.generateFilename(id, title);
88
+ return path.join(archiveFolder, filename);
89
+ }
90
+ /** Get absolute archive path for entity */
91
+ getAbsoluteArchivePath(id, title, date = new Date()) {
92
+ return path.join(this.config.vaultPath, this.getArchivePath(id, title, date));
93
+ }
94
+ // ---------------------------------------------------------------------------
95
+ // Path Parsing
96
+ // ---------------------------------------------------------------------------
97
+ /**
98
+ * Extract entity ID from file path.
99
+ * NOTE: Since IDs are no longer in filenames, this returns null.
100
+ * Use entity-parser to get ID from frontmatter instead.
101
+ * @deprecated IDs are stored in frontmatter, not filenames
102
+ */
103
+ extractIdFromPath(_filePath) {
104
+ // IDs are no longer in filenames - they're in frontmatter
105
+ // This method is kept for backward compatibility but always returns null
106
+ return null;
107
+ }
108
+ /** Check if path is in archive */
109
+ isArchivePath(filePath) {
110
+ return filePath.startsWith(this.config.archiveFolder);
111
+ }
112
+ /** Check if path is an entity file (based on folder location) */
113
+ isEntityPath(filePath) {
114
+ if (!filePath.endsWith('.md'))
115
+ return false;
116
+ // Check if file is in one of the entity folders
117
+ const type = this.getTypeFromPath(filePath);
118
+ return type !== null;
119
+ }
120
+ /** Get entity type from path */
121
+ getTypeFromPath(filePath) {
122
+ for (const [type, folder] of Object.entries(TYPE_FOLDERS)) {
123
+ if (filePath.includes(`/${folder}/`) || filePath.startsWith(`${folder}/`)) {
124
+ return type;
125
+ }
126
+ }
127
+ return null;
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // Canvas Paths
131
+ // ---------------------------------------------------------------------------
132
+ /** Get canvas folder path */
133
+ getCanvasFolderPath() {
134
+ return this.config.canvasFolder;
135
+ }
136
+ /** Get absolute canvas folder path */
137
+ getAbsoluteCanvasFolderPath() {
138
+ return path.join(this.config.vaultPath, this.config.canvasFolder);
139
+ }
140
+ /** Check if path is a canvas file */
141
+ isCanvasPath(filePath) {
142
+ return filePath.endsWith('.canvas');
143
+ }
144
+ // ---------------------------------------------------------------------------
145
+ // Folder Utilities
146
+ // ---------------------------------------------------------------------------
147
+ /** Get all entity folder paths */
148
+ getAllEntityFolders() {
149
+ return Object.values(TYPE_FOLDERS).map(folder => path.join(this.config.entitiesFolder, folder));
150
+ }
151
+ /** Get all absolute entity folder paths */
152
+ getAllAbsoluteEntityFolders() {
153
+ return this.getAllEntityFolders().map(folder => path.join(this.config.vaultPath, folder));
154
+ }
155
+ /** Get config */
156
+ /** Convert absolute path to vault-relative path */
157
+ toVaultPath(absolutePath) {
158
+ if (absolutePath.startsWith(this.config.vaultPath)) {
159
+ return absolutePath.slice(this.config.vaultPath.length + 1);
160
+ }
161
+ return absolutePath;
162
+ }
163
+ /** Convert vault-relative path to absolute path */
164
+ toAbsolutePath(vaultPath) {
165
+ if (path.isAbsolute(vaultPath))
166
+ return vaultPath;
167
+ return path.join(this.config.vaultPath, vaultPath);
168
+ }
169
+ /** Get config */
170
+ getConfig() {
171
+ return this.config;
172
+ }
173
+ }
174
+ //# sourceMappingURL=path-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-resolver.js","sourceRoot":"","sources":["../../../src/services/v2/path-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * V2 Progress Computer
3
+ *
4
+ * Computes progress metrics for entities based on their children's status.
5
+ */
6
+ import { Entity, EntityId, EntityType } from '../../models/v2-types.js';
7
+ export interface ProgressMetrics {
8
+ total: number;
9
+ completed: number;
10
+ in_progress: number;
11
+ not_started: number;
12
+ blocked: number;
13
+ percentage: number;
14
+ }
15
+ export interface EntityProgress {
16
+ entity_id: EntityId;
17
+ entity_type: EntityType;
18
+ direct_progress: ProgressMetrics;
19
+ nested_progress?: ProgressMetrics;
20
+ }
21
+ /**
22
+ * Computes progress metrics for entities.
23
+ */
24
+ export declare class ProgressComputer {
25
+ private getEntity;
26
+ private getChildren;
27
+ setEntityCallback(fn: (id: EntityId) => Entity | undefined): void;
28
+ setChildrenCallback(fn: (id: EntityId, type?: EntityType) => Entity[]): void;
29
+ /** Compute progress for any entity */
30
+ computeProgress(entityId: EntityId): EntityProgress | undefined;
31
+ /** Compute progress for a milestone (stories and nested tasks) */
32
+ computeMilestoneProgress(milestoneId: EntityId): EntityProgress;
33
+ /** Compute progress for a story (tasks) */
34
+ computeStoryProgress(storyId: EntityId): EntityProgress;
35
+ /** Compute metrics for a list of entities (stories) */
36
+ private computeMetrics;
37
+ /** Compute metrics for a list of tasks */
38
+ private computeTaskMetrics;
39
+ /** Return empty metrics */
40
+ private emptyMetrics;
41
+ /** Check if an entity is complete based on its type */
42
+ isComplete(entity: Entity): boolean;
43
+ /** Get completion percentage as a formatted string */
44
+ formatProgress(progress: ProgressMetrics): string;
45
+ }
46
+ //# sourceMappingURL=progress-computer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-computer.d.ts","sourceRoot":"","sources":["../../../src/services/v2/progress-computer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EAIX,MAAM,0BAA0B,CAAC;AAMlC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,QAAQ,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAMD;;GAEG;AACH,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,SAAS,CAAyD;IAC1E,OAAO,CAAC,WAAW,CAA2D;IAM9E,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI;IAIjE,mBAAmB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,UAAU,KAAK,MAAM,EAAE,GAAG,IAAI;IAQ5E,sCAAsC;IACtC,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS;IAkB/D,kEAAkE;IAClE,wBAAwB,CAAC,WAAW,EAAE,QAAQ,GAAG,cAAc;IAiD/D,2CAA2C;IAC3C,oBAAoB,CAAC,OAAO,EAAE,QAAQ,GAAG,cAAc;IAevD,uDAAuD;IACvD,OAAO,CAAC,cAAc;IAkCtB,0CAA0C;IAC1C,OAAO,CAAC,kBAAkB;IAkC1B,2BAA2B;IAC3B,OAAO,CAAC,YAAY;IAepB,uDAAuD;IACvD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAenC,sDAAsD;IACtD,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;CAGlD"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * V2 Progress Computer
3
+ *
4
+ * Computes progress metrics for entities based on their children's status.
5
+ */
6
+ // =============================================================================
7
+ // Progress Computer Class
8
+ // =============================================================================
9
+ /**
10
+ * Computes progress metrics for entities.
11
+ */
12
+ export class ProgressComputer {
13
+ // Callbacks for external dependencies
14
+ getEntity = () => undefined;
15
+ getChildren = () => [];
16
+ // ---------------------------------------------------------------------------
17
+ // Configuration
18
+ // ---------------------------------------------------------------------------
19
+ setEntityCallback(fn) {
20
+ this.getEntity = fn;
21
+ }
22
+ setChildrenCallback(fn) {
23
+ this.getChildren = fn;
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // Progress Computation
27
+ // ---------------------------------------------------------------------------
28
+ /** Compute progress for any entity */
29
+ computeProgress(entityId) {
30
+ const entity = this.getEntity(entityId);
31
+ if (!entity)
32
+ return undefined;
33
+ switch (entity.type) {
34
+ case 'milestone':
35
+ return this.computeMilestoneProgress(entityId);
36
+ case 'story':
37
+ return this.computeStoryProgress(entityId);
38
+ default:
39
+ return {
40
+ entity_id: entityId,
41
+ entity_type: entity.type,
42
+ direct_progress: this.emptyMetrics(),
43
+ };
44
+ }
45
+ }
46
+ /** Compute progress for a milestone (stories and nested tasks) */
47
+ computeMilestoneProgress(milestoneId) {
48
+ const stories = this.getChildren(milestoneId, 'story');
49
+ const directProgress = this.computeMetrics(stories);
50
+ // Compute nested task progress across all stories
51
+ let totalTasks = 0;
52
+ let completedTasks = 0;
53
+ let inProgressTasks = 0;
54
+ let notStartedTasks = 0;
55
+ let blockedTasks = 0;
56
+ for (const story of stories) {
57
+ const tasks = this.getChildren(story.id, 'task');
58
+ totalTasks += tasks.length;
59
+ for (const task of tasks) {
60
+ switch (task.status) {
61
+ case 'Completed':
62
+ completedTasks++;
63
+ break;
64
+ case 'In Progress':
65
+ inProgressTasks++;
66
+ break;
67
+ case 'Not Started':
68
+ notStartedTasks++;
69
+ break;
70
+ case 'Blocked':
71
+ blockedTasks++;
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ const nestedProgress = {
77
+ total: totalTasks,
78
+ completed: completedTasks,
79
+ in_progress: inProgressTasks,
80
+ not_started: notStartedTasks,
81
+ blocked: blockedTasks,
82
+ percentage: totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0,
83
+ };
84
+ return {
85
+ entity_id: milestoneId,
86
+ entity_type: 'milestone',
87
+ direct_progress: directProgress,
88
+ nested_progress: nestedProgress,
89
+ };
90
+ }
91
+ /** Compute progress for a story (tasks) */
92
+ computeStoryProgress(storyId) {
93
+ const tasks = this.getChildren(storyId, 'task');
94
+ const directProgress = this.computeTaskMetrics(tasks);
95
+ return {
96
+ entity_id: storyId,
97
+ entity_type: 'story',
98
+ direct_progress: directProgress,
99
+ };
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Helper Methods
103
+ // ---------------------------------------------------------------------------
104
+ /** Compute metrics for a list of entities (stories) */
105
+ computeMetrics(entities) {
106
+ const metrics = {
107
+ total: entities.length,
108
+ completed: 0,
109
+ in_progress: 0,
110
+ not_started: 0,
111
+ blocked: 0,
112
+ percentage: 0,
113
+ };
114
+ for (const entity of entities) {
115
+ switch (entity.status) {
116
+ case 'Completed':
117
+ metrics.completed++;
118
+ break;
119
+ case 'In Progress':
120
+ metrics.in_progress++;
121
+ break;
122
+ case 'Not Started':
123
+ metrics.not_started++;
124
+ break;
125
+ case 'Blocked':
126
+ metrics.blocked++;
127
+ break;
128
+ }
129
+ }
130
+ metrics.percentage = metrics.total > 0
131
+ ? Math.round((metrics.completed / metrics.total) * 100)
132
+ : 0;
133
+ return metrics;
134
+ }
135
+ /** Compute metrics for a list of tasks */
136
+ computeTaskMetrics(tasks) {
137
+ const metrics = {
138
+ total: tasks.length,
139
+ completed: 0,
140
+ in_progress: 0,
141
+ not_started: 0,
142
+ blocked: 0,
143
+ percentage: 0,
144
+ };
145
+ for (const task of tasks) {
146
+ switch (task.status) {
147
+ case 'Completed':
148
+ metrics.completed++;
149
+ break;
150
+ case 'In Progress':
151
+ metrics.in_progress++;
152
+ break;
153
+ case 'Not Started':
154
+ metrics.not_started++;
155
+ break;
156
+ case 'Blocked':
157
+ metrics.blocked++;
158
+ break;
159
+ }
160
+ }
161
+ metrics.percentage = metrics.total > 0
162
+ ? Math.round((metrics.completed / metrics.total) * 100)
163
+ : 0;
164
+ return metrics;
165
+ }
166
+ /** Return empty metrics */
167
+ emptyMetrics() {
168
+ return {
169
+ total: 0,
170
+ completed: 0,
171
+ in_progress: 0,
172
+ not_started: 0,
173
+ blocked: 0,
174
+ percentage: 0,
175
+ };
176
+ }
177
+ // ---------------------------------------------------------------------------
178
+ // Utility Methods
179
+ // ---------------------------------------------------------------------------
180
+ /** Check if an entity is complete based on its type */
181
+ isComplete(entity) {
182
+ switch (entity.type) {
183
+ case 'milestone':
184
+ case 'story':
185
+ case 'task':
186
+ return entity.status === 'Completed';
187
+ case 'decision':
188
+ return entity.status === 'Decided' || entity.status === 'Superseded';
189
+ case 'document':
190
+ return entity.status === 'Approved' || entity.status === 'Superseded';
191
+ case 'feature':
192
+ return entity.status === 'Complete';
193
+ }
194
+ }
195
+ /** Get completion percentage as a formatted string */
196
+ formatProgress(progress) {
197
+ return `${progress.completed}/${progress.total} (${progress.percentage}%)`;
198
+ }
199
+ }
200
+ //# sourceMappingURL=progress-computer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-computer.js","sourceRoot":"","sources":["../../../src/services/v2/progress-computer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * V2 Search Service
3
+ *
4
+ * Provides token-based inverted index for full-text search across entities.
5
+ */
6
+ import { EntityId } from '../../models/v2-types.js';
7
+ /** Search result with relevance score */
8
+ export interface SearchResult {
9
+ id: EntityId;
10
+ score: number;
11
+ matches: {
12
+ field: string;
13
+ positions: number[];
14
+ }[];
15
+ }
16
+ /** Search options */
17
+ export interface SearchOptions {
18
+ /** Fields to search (default: all) */
19
+ fields?: ('title' | 'content' | 'tags')[];
20
+ /** Maximum results to return */
21
+ limit?: number;
22
+ /** Minimum score threshold */
23
+ minScore?: number;
24
+ /** Filter by entity type */
25
+ types?: string[];
26
+ /** Include archived entities */
27
+ includeArchived?: boolean;
28
+ }
29
+ /**
30
+ * Token-based inverted index for full-text search.
31
+ */
32
+ export declare class SearchIndex {
33
+ /** Inverted index: token -> Set of entity IDs */
34
+ private titleIndex;
35
+ private contentIndex;
36
+ /** Document frequency for TF-IDF scoring */
37
+ private documentCount;
38
+ private tokenDocFreq;
39
+ /** Entity metadata cache for filtering */
40
+ private entityMeta;
41
+ /** Add or update entity in search index */
42
+ index(id: EntityId, title: string, content: string, type: string, archived: boolean): void;
43
+ /** Remove entity from search index */
44
+ remove(id: EntityId): void;
45
+ /** Clear all indexes */
46
+ clear(): void;
47
+ /** Search for entities matching query */
48
+ search(query: string, options?: SearchOptions): SearchResult[];
49
+ /** Tokenize text into searchable tokens */
50
+ private tokenize;
51
+ /** Add entity to token index */
52
+ private addToIndex;
53
+ /** Increment document frequency for token */
54
+ private incrementDocFreq;
55
+ /** Decrement document frequency for token */
56
+ private decrementDocFreq;
57
+ /** Calculate IDF (Inverse Document Frequency) for token */
58
+ private calculateIDF;
59
+ /** Add match info to results */
60
+ private addMatch;
61
+ /** Get index statistics */
62
+ getStats(): {
63
+ documentCount: number;
64
+ titleTokens: number;
65
+ contentTokens: number;
66
+ };
67
+ }
68
+ //# sourceMappingURL=search-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-service.d.ts","sourceRoot":"","sources":["../../../src/services/v2/search-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AAMpE,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,EAAE,CAAC;CACL;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;GAEG;AACH,qBAAa,WAAW;IACtB,iDAAiD;IACjD,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,YAAY,CAAyC;IAE7D,4CAA4C;IAC5C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAkC;IAEtD,0CAA0C;IAC1C,OAAO,CAAC,UAAU,CAAiE;IAMnF,2CAA2C;IAC3C,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAuB1F,sCAAsC;IACtC,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAuB1B,wBAAwB;IACxB,KAAK,IAAI,IAAI;IAYb,yCAAyC;IACzC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,EAAE;IAwDlE,2CAA2C;IAC3C,OAAO,CAAC,QAAQ;IAUhB,gCAAgC;IAChC,OAAO,CAAC,UAAU;IAMlB,6CAA6C;IAC7C,OAAO,CAAC,gBAAgB;IAIxB,6CAA6C;IAC7C,OAAO,CAAC,gBAAgB;IASxB,2DAA2D;IAC3D,OAAO,CAAC,YAAY;IAMpB,gCAAgC;IAChC,OAAO,CAAC,QAAQ;IAkBhB,2BAA2B;IAC3B,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;CAOlF"}