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,228 @@
1
+ /**
2
+ * V2 Index Manager
3
+ *
4
+ * Orchestrates index building, updates, and cache invalidation.
5
+ * Provides unified interface for entity lookups and queries.
6
+ */
7
+ import { ProjectIndex } from './index-service.js';
8
+ import { SearchIndex } from './search-service.js';
9
+ const DEFAULT_OPTIONS = {
10
+ autoRebuildInterval: 0,
11
+ };
12
+ // =============================================================================
13
+ // Index Manager Class
14
+ // =============================================================================
15
+ /**
16
+ * Central manager for all entity indexes.
17
+ * Coordinates ProjectIndex and SearchIndex.
18
+ */
19
+ export class IndexManager {
20
+ projectIndex;
21
+ searchIndex;
22
+ constructor(_options = {}) {
23
+ this.projectIndex = new ProjectIndex();
24
+ this.searchIndex = new SearchIndex();
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Lifecycle
28
+ // ---------------------------------------------------------------------------
29
+ /** Stop any running timers (no-op now, kept for API compatibility) */
30
+ stop() {
31
+ // No-op - auto-rebuild was removed with cache
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Index Operations
35
+ // ---------------------------------------------------------------------------
36
+ /** Index a single entity */
37
+ indexEntity(entity, fileMtime) {
38
+ // Create metadata for primary index
39
+ const metadata = this.createMetadata(entity, fileMtime);
40
+ this.projectIndex.set(metadata);
41
+ // Index for search
42
+ const content = this.extractSearchableContent(entity);
43
+ this.searchIndex.index(entity.id, entity.title, content, entity.type, entity.archived);
44
+ // Index relationships
45
+ this.indexRelationships(entity);
46
+ }
47
+ /** Remove entity from all indexes */
48
+ removeEntity(id) {
49
+ this.projectIndex.delete(id);
50
+ this.searchIndex.remove(id);
51
+ }
52
+ /** Clear all indexes */
53
+ clearAll() {
54
+ this.projectIndex.clear();
55
+ this.searchIndex.clear();
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Metadata Creation
59
+ // ---------------------------------------------------------------------------
60
+ createMetadata(entity, fileMtime) {
61
+ const base = {
62
+ id: entity.id,
63
+ type: entity.type,
64
+ title: entity.title,
65
+ workstream: entity.workstream,
66
+ status: entity.status,
67
+ archived: entity.archived,
68
+ in_progress: this.isInProgress(entity),
69
+ canvas_source: entity.canvas_source,
70
+ vault_path: entity.vault_path,
71
+ updated_at: entity.updated_at,
72
+ file_mtime: fileMtime,
73
+ children_count: 0,
74
+ };
75
+ // Add type-specific fields
76
+ if (entity.type === 'milestone' || entity.type === 'story') {
77
+ base.priority = entity.priority;
78
+ }
79
+ if (entity.type === 'story') {
80
+ base.parent_id = entity.parent;
81
+ }
82
+ if (entity.type === 'task') {
83
+ base.parent_id = entity.parent;
84
+ }
85
+ return base;
86
+ }
87
+ isInProgress(entity) {
88
+ if (entity.type === 'milestone' || entity.type === 'story' || entity.type === 'task') {
89
+ return entity.status === 'In Progress';
90
+ }
91
+ return false;
92
+ }
93
+ extractSearchableContent(entity) {
94
+ const parts = [entity.title];
95
+ if (entity.type === 'milestone') {
96
+ if (entity.objective)
97
+ parts.push(entity.objective);
98
+ }
99
+ if (entity.type === 'story') {
100
+ if (entity.outcome)
101
+ parts.push(entity.outcome);
102
+ if (entity.notes)
103
+ parts.push(entity.notes);
104
+ }
105
+ if (entity.type === 'task') {
106
+ if (entity.goal)
107
+ parts.push(entity.goal);
108
+ if (entity.description)
109
+ parts.push(entity.description);
110
+ }
111
+ if (entity.type === 'decision') {
112
+ if (entity.context)
113
+ parts.push(entity.context);
114
+ if (entity.decision)
115
+ parts.push(entity.decision);
116
+ if (entity.rationale)
117
+ parts.push(entity.rationale);
118
+ }
119
+ if (entity.type === 'document') {
120
+ if (entity.content)
121
+ parts.push(entity.content);
122
+ }
123
+ return parts.join(' ');
124
+ }
125
+ indexRelationships(entity) {
126
+ // Parent-child relationships
127
+ if (entity.type === 'story' && entity.parent) {
128
+ this.projectIndex.addRelationship(entity.parent, 'parent_of', entity.id);
129
+ }
130
+ if (entity.type === 'task' && entity.parent) {
131
+ this.projectIndex.addRelationship(entity.parent, 'parent_of', entity.id);
132
+ }
133
+ // Dependency relationships
134
+ if (entity.depends_on) {
135
+ for (const depId of entity.depends_on) {
136
+ this.projectIndex.addRelationship(depId, 'blocks', entity.id);
137
+ }
138
+ }
139
+ // Implementation relationships
140
+ if (entity.type === 'story' && entity.implements) {
141
+ for (const docId of entity.implements) {
142
+ this.projectIndex.addRelationship(entity.id, 'implements', docId);
143
+ }
144
+ }
145
+ // Supersedes relationships
146
+ if (entity.type === 'decision' && entity.supersedes) {
147
+ this.projectIndex.addRelationship(entity.id, 'supersedes', entity.supersedes);
148
+ }
149
+ }
150
+ // ---------------------------------------------------------------------------
151
+ // Query Operations
152
+ // ---------------------------------------------------------------------------
153
+ /** Get entity metadata by ID */
154
+ getMetadata(id) {
155
+ return this.projectIndex.get(id);
156
+ }
157
+ /** Check if entity exists in index */
158
+ hasMetadata(id) {
159
+ return this.projectIndex.has(id);
160
+ }
161
+ /** Check if entity exists */
162
+ hasEntity(id) {
163
+ return this.projectIndex.has(id);
164
+ }
165
+ /** Query entities with filters */
166
+ query(q) {
167
+ let results = this.projectIndex.getAll();
168
+ // Apply filters
169
+ if (q.types?.length) {
170
+ results = results.filter(m => q.types.includes(m.type));
171
+ }
172
+ if (q.statuses?.length) {
173
+ results = results.filter(m => q.statuses.includes(m.status));
174
+ }
175
+ if (q.workstreams?.length) {
176
+ results = results.filter(m => q.workstreams.includes(m.workstream));
177
+ }
178
+ if (q.priorities?.length) {
179
+ results = results.filter(m => m.priority && q.priorities.includes(m.priority));
180
+ }
181
+ if (q.parentId) {
182
+ results = results.filter(m => m.parent_id === q.parentId);
183
+ }
184
+ if (q.canvasPath) {
185
+ results = results.filter(m => m.canvas_source === q.canvasPath);
186
+ }
187
+ if (q.archived !== undefined) {
188
+ results = results.filter(m => m.archived === q.archived);
189
+ }
190
+ if (q.inProgress !== undefined) {
191
+ results = results.filter(m => m.in_progress === q.inProgress);
192
+ }
193
+ // Apply pagination
194
+ if (q.offset)
195
+ results = results.slice(q.offset);
196
+ if (q.limit)
197
+ results = results.slice(0, q.limit);
198
+ return results;
199
+ }
200
+ /** Search entities */
201
+ search(query, options) {
202
+ return this.searchIndex.search(query, options);
203
+ }
204
+ /** Get related entities */
205
+ getRelated(id, type) {
206
+ return this.projectIndex.getRelated(id, type);
207
+ }
208
+ /** Get children of entity */
209
+ getChildren(parentId) {
210
+ return this.projectIndex.getByParent(parentId);
211
+ }
212
+ /** Get entity by file path */
213
+ getByPath(path) {
214
+ const id = this.projectIndex.getIdByPath(path);
215
+ return id ? this.projectIndex.get(id) : undefined;
216
+ }
217
+ // ---------------------------------------------------------------------------
218
+ // Statistics
219
+ // ---------------------------------------------------------------------------
220
+ getStats() {
221
+ return {
222
+ entityCount: this.projectIndex.size,
223
+ searchStats: this.searchIndex.getStats(),
224
+ indexVersion: this.projectIndex.getVersion(),
225
+ };
226
+ }
227
+ }
228
+ //# sourceMappingURL=index-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.js","sourceRoot":"","sources":["../../../src/services/v2/index-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for V2 Index Manager
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=index-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.test.d.ts","sourceRoot":"","sources":["../../../src/services/v2/index-manager.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,386 @@
1
+ /**
2
+ * Tests for V2 Index Manager
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
5
+ import { IndexManager } from './index-manager.js';
6
+ describe('IndexManager', () => {
7
+ let manager;
8
+ // Helper to create mock entities - using 'as Milestone' to bypass strict type checking in tests
9
+ const createMilestone = (overrides = {}) => ({
10
+ id: 'M-001',
11
+ type: 'milestone',
12
+ title: 'Test Milestone',
13
+ workstream: 'engineering',
14
+ status: 'In Progress',
15
+ archived: false,
16
+ vault_path: '/vault/accomplishments/milestones/M-001.md',
17
+ canvas_source: '/vault/canvas.canvas',
18
+ created_at: '2024-01-01T00:00:00Z',
19
+ updated_at: '2024-01-15T00:00:00Z',
20
+ objective: 'Complete the project',
21
+ priority: 'High',
22
+ depends_on: [],
23
+ cssclasses: [],
24
+ ...overrides,
25
+ });
26
+ const createStory = (overrides = {}) => ({
27
+ id: 'S-001',
28
+ type: 'story',
29
+ title: 'Test Story',
30
+ workstream: 'engineering',
31
+ status: 'Not Started',
32
+ archived: false,
33
+ vault_path: '/vault/accomplishments/stories/S-001.md',
34
+ canvas_source: '/vault/canvas.canvas',
35
+ created_at: '2024-01-01T00:00:00Z',
36
+ updated_at: '2024-01-15T00:00:00Z',
37
+ parent: 'M-001',
38
+ outcome: 'User can login',
39
+ priority: 'High',
40
+ depends_on: [],
41
+ cssclasses: [],
42
+ ...overrides,
43
+ });
44
+ const createTask = (overrides = {}) => ({
45
+ id: 'T-001',
46
+ type: 'task',
47
+ title: 'Test Task',
48
+ workstream: 'engineering',
49
+ status: 'Not Started',
50
+ archived: false,
51
+ vault_path: '/vault/accomplishments/tasks/T-001.md',
52
+ canvas_source: '/vault/canvas.canvas',
53
+ created_at: '2024-01-01T00:00:00Z',
54
+ updated_at: '2024-01-15T00:00:00Z',
55
+ parent: 'S-001',
56
+ goal: 'Implement feature',
57
+ cssclasses: [],
58
+ ...overrides,
59
+ });
60
+ const createDecision = (overrides = {}) => ({
61
+ id: 'DEC-001',
62
+ type: 'decision',
63
+ title: 'Test Decision',
64
+ workstream: 'engineering',
65
+ status: 'Draft',
66
+ archived: false,
67
+ vault_path: '/vault/accomplishments/decisions/DEC-001.md',
68
+ created_at: '2024-01-01T00:00:00Z',
69
+ updated_at: '2024-01-15T00:00:00Z',
70
+ context: 'We need to choose a database',
71
+ decision: 'Use PostgreSQL',
72
+ rationale: 'Better for our use case',
73
+ cssclasses: [],
74
+ ...overrides,
75
+ });
76
+ const createDocument = (overrides = {}) => ({
77
+ id: 'DOC-001',
78
+ type: 'document',
79
+ title: 'Test Document',
80
+ workstream: 'engineering',
81
+ status: 'Draft',
82
+ archived: false,
83
+ vault_path: '/vault/accomplishments/documents/DOC-001.md',
84
+ created_at: '2024-01-01T00:00:00Z',
85
+ updated_at: '2024-01-15T00:00:00Z',
86
+ content: 'This is the document content',
87
+ doc_type: 'spec',
88
+ cssclasses: [],
89
+ ...overrides,
90
+ });
91
+ beforeEach(() => {
92
+ manager = new IndexManager();
93
+ });
94
+ afterEach(() => {
95
+ manager.stop();
96
+ });
97
+ describe('Constructor and Lifecycle', () => {
98
+ it('should create with default options', () => {
99
+ const stats = manager.getStats();
100
+ expect(stats.entityCount).toBe(0);
101
+ });
102
+ it('should start auto-rebuild timer when configured', () => {
103
+ vi.useFakeTimers();
104
+ const autoManager = new IndexManager({ autoRebuildInterval: 1000 });
105
+ // Index an entity
106
+ autoManager.indexEntity(createMilestone(), Date.now());
107
+ // Advance time - timer should fire without error
108
+ vi.advanceTimersByTime(1000);
109
+ autoManager.stop();
110
+ vi.useRealTimers();
111
+ });
112
+ it('should stop auto-rebuild timer', () => {
113
+ vi.useFakeTimers();
114
+ const autoManager = new IndexManager({ autoRebuildInterval: 1000 });
115
+ autoManager.stop();
116
+ // Should not throw when advancing time after stop
117
+ vi.advanceTimersByTime(2000);
118
+ vi.useRealTimers();
119
+ });
120
+ });
121
+ describe('indexEntity', () => {
122
+ it('should index a milestone', () => {
123
+ const milestone = createMilestone();
124
+ manager.indexEntity(milestone, Date.now());
125
+ expect(manager.hasEntity('M-001')).toBe(true);
126
+ expect(manager.getMetadata('M-001')?.title).toBe(milestone.title);
127
+ });
128
+ it('should index a story with parent relationship', () => {
129
+ const milestone = createMilestone();
130
+ const story = createStory();
131
+ manager.indexEntity(milestone, Date.now());
132
+ manager.indexEntity(story, Date.now());
133
+ expect(manager.hasEntity('S-001')).toBe(true);
134
+ const children = manager.getChildren('M-001');
135
+ expect(children).toHaveLength(1);
136
+ expect(children[0].id).toBe('S-001');
137
+ });
138
+ it('should index a task with parent relationship', () => {
139
+ const story = createStory();
140
+ const task = createTask();
141
+ manager.indexEntity(story, Date.now());
142
+ manager.indexEntity(task, Date.now());
143
+ const children = manager.getChildren('S-001');
144
+ expect(children).toHaveLength(1);
145
+ expect(children[0].id).toBe('T-001');
146
+ });
147
+ it('should index a decision', () => {
148
+ const decision = createDecision();
149
+ manager.indexEntity(decision, Date.now());
150
+ expect(manager.hasEntity('DEC-001')).toBe(true);
151
+ const metadata = manager.getMetadata('DEC-001');
152
+ expect(metadata?.type).toBe('decision');
153
+ });
154
+ it('should index a document', () => {
155
+ const document = createDocument();
156
+ manager.indexEntity(document, Date.now());
157
+ expect(manager.hasEntity('DOC-001')).toBe(true);
158
+ });
159
+ it('should index dependency relationships', () => {
160
+ const story1 = createStory({ id: 'S-001' });
161
+ const story2 = createStory({
162
+ id: 'S-002',
163
+ depends_on: ['S-001']
164
+ });
165
+ manager.indexEntity(story1, Date.now());
166
+ manager.indexEntity(story2, Date.now());
167
+ const blocked = manager.getRelated('S-001', 'blocks');
168
+ expect(blocked).toContain('S-002');
169
+ });
170
+ it('should index implements relationships', () => {
171
+ const doc = createDocument({ id: 'DOC-001' });
172
+ const story = createStory({
173
+ id: 'S-001',
174
+ implements: ['DOC-001']
175
+ });
176
+ manager.indexEntity(doc, Date.now());
177
+ manager.indexEntity(story, Date.now());
178
+ const implementing = manager.getRelated('S-001', 'implements');
179
+ expect(implementing).toContain('DOC-001');
180
+ });
181
+ it('should index supersedes relationships for decisions', () => {
182
+ const oldDecision = createDecision({ id: 'DEC-001' });
183
+ const newDecision = createDecision({
184
+ id: 'DEC-002',
185
+ supersedes: 'DEC-001'
186
+ });
187
+ manager.indexEntity(oldDecision, Date.now());
188
+ manager.indexEntity(newDecision, Date.now());
189
+ const superseding = manager.getRelated('DEC-002', 'supersedes');
190
+ expect(superseding).toContain('DEC-001');
191
+ });
192
+ });
193
+ describe('removeEntity', () => {
194
+ it('should remove entity from all indexes', () => {
195
+ const milestone = createMilestone();
196
+ manager.indexEntity(milestone, Date.now());
197
+ manager.removeEntity('M-001');
198
+ expect(manager.hasEntity('M-001')).toBe(false);
199
+ expect(manager.getMetadata('M-001')).toBeUndefined();
200
+ });
201
+ });
202
+ describe('clearAll', () => {
203
+ it('should clear all indexes', () => {
204
+ manager.indexEntity(createMilestone(), Date.now());
205
+ manager.indexEntity(createStory(), Date.now());
206
+ manager.clearAll();
207
+ expect(manager.getStats().entityCount).toBe(0);
208
+ });
209
+ });
210
+ describe('query', () => {
211
+ beforeEach(() => {
212
+ // Set up test data
213
+ manager.indexEntity(createMilestone({
214
+ id: 'M-001',
215
+ status: 'In Progress',
216
+ workstream: 'engineering',
217
+ priority: 'High'
218
+ }), Date.now());
219
+ manager.indexEntity(createMilestone({
220
+ id: 'M-002',
221
+ status: 'Completed',
222
+ workstream: 'product',
223
+ priority: 'Medium'
224
+ }), Date.now());
225
+ manager.indexEntity(createStory({
226
+ id: 'S-001',
227
+ status: 'Not Started',
228
+ workstream: 'engineering',
229
+ priority: 'High'
230
+ }), Date.now());
231
+ manager.indexEntity(createTask({
232
+ id: 'T-001',
233
+ status: 'In Progress',
234
+ archived: true
235
+ }), Date.now());
236
+ });
237
+ it('should query by type', () => {
238
+ const results = manager.query({ types: ['milestone'] });
239
+ expect(results).toHaveLength(2);
240
+ });
241
+ it('should query by status', () => {
242
+ const results = manager.query({ statuses: ['In Progress'] });
243
+ expect(results).toHaveLength(2);
244
+ });
245
+ it('should query by workstream', () => {
246
+ const results = manager.query({ workstreams: ['engineering'] });
247
+ // M-001, S-001, and T-001 all have workstream 'engineering'
248
+ expect(results).toHaveLength(3);
249
+ });
250
+ // Note: effort field has been removed from Story in favor of workstream
251
+ // This test is now obsolete and has been removed
252
+ it('should query by priority', () => {
253
+ const results = manager.query({ priorities: ['High'] });
254
+ expect(results).toHaveLength(2);
255
+ });
256
+ it('should query by archived status', () => {
257
+ const results = manager.query({ archived: true });
258
+ expect(results).toHaveLength(1);
259
+ expect(results[0].id).toBe('T-001');
260
+ });
261
+ it('should query by in_progress status', () => {
262
+ const results = manager.query({ inProgress: true });
263
+ expect(results.length).toBeGreaterThanOrEqual(1);
264
+ });
265
+ it('should apply pagination with limit', () => {
266
+ const results = manager.query({ limit: 2 });
267
+ expect(results).toHaveLength(2);
268
+ });
269
+ it('should apply pagination with offset', () => {
270
+ const allResults = manager.query({});
271
+ const offsetResults = manager.query({ offset: 2 });
272
+ expect(offsetResults).toHaveLength(allResults.length - 2);
273
+ });
274
+ it('should combine multiple filters', () => {
275
+ const results = manager.query({
276
+ types: ['milestone'],
277
+ statuses: ['In Progress'],
278
+ workstreams: ['engineering']
279
+ });
280
+ expect(results).toHaveLength(1);
281
+ expect(results[0].id).toBe('M-001');
282
+ });
283
+ });
284
+ describe('search', () => {
285
+ beforeEach(() => {
286
+ manager.indexEntity(createMilestone({
287
+ id: 'M-001',
288
+ title: 'Authentication System',
289
+ objective: 'Implement secure login'
290
+ }), Date.now());
291
+ manager.indexEntity(createStory({
292
+ id: 'S-001',
293
+ title: 'User Login Feature',
294
+ outcome: 'Users can authenticate'
295
+ }), Date.now());
296
+ });
297
+ it('should search by title', () => {
298
+ const results = manager.search('Authentication');
299
+ expect(results.length).toBeGreaterThanOrEqual(1);
300
+ });
301
+ it('should search by content', () => {
302
+ const results = manager.search('login');
303
+ expect(results.length).toBeGreaterThanOrEqual(1);
304
+ });
305
+ it('should return empty for no matches', () => {
306
+ const results = manager.search('nonexistent');
307
+ expect(results).toHaveLength(0);
308
+ });
309
+ });
310
+ describe('getByPath', () => {
311
+ it('should get entity by vault path', () => {
312
+ const milestone = createMilestone();
313
+ manager.indexEntity(milestone, Date.now());
314
+ const result = manager.getByPath(milestone.vault_path);
315
+ expect(result?.id).toBe('M-001');
316
+ });
317
+ it('should return undefined for unknown path', () => {
318
+ const result = manager.getByPath('/unknown/path.md');
319
+ expect(result).toBeUndefined();
320
+ });
321
+ });
322
+ describe('getStats', () => {
323
+ it('should return statistics', () => {
324
+ manager.indexEntity(createMilestone(), Date.now());
325
+ manager.indexEntity(createStory(), Date.now());
326
+ const stats = manager.getStats();
327
+ expect(stats.entityCount).toBe(2);
328
+ expect(stats.searchStats).toBeDefined();
329
+ expect(stats.indexVersion).toBeGreaterThanOrEqual(0);
330
+ });
331
+ });
332
+ describe('Metadata Creation', () => {
333
+ it('should create metadata with priority for milestones', () => {
334
+ const milestone = createMilestone({ priority: 'High' });
335
+ manager.indexEntity(milestone, Date.now());
336
+ const metadata = manager.getMetadata('M-001');
337
+ expect(metadata?.priority).toBe('High');
338
+ });
339
+ // Note: effort field has been removed from Story in favor of workstream
340
+ // This test is now obsolete and has been removed
341
+ it('should track in_progress status correctly', () => {
342
+ manager.indexEntity(createMilestone({ status: 'In Progress' }), Date.now());
343
+ manager.indexEntity(createMilestone({
344
+ id: 'M-002',
345
+ status: 'Completed'
346
+ }), Date.now());
347
+ const m1 = manager.getMetadata('M-001');
348
+ const m2 = manager.getMetadata('M-002');
349
+ expect(m1?.in_progress).toBe(true);
350
+ expect(m2?.in_progress).toBe(false);
351
+ });
352
+ });
353
+ describe('Query by canvas path', () => {
354
+ it('should query by canvas source', () => {
355
+ const canvas1 = '/vault/canvas1.canvas';
356
+ const canvas2 = '/vault/canvas2.canvas';
357
+ manager.indexEntity(createMilestone({
358
+ id: 'M-001',
359
+ canvas_source: canvas1
360
+ }), Date.now());
361
+ manager.indexEntity(createMilestone({
362
+ id: 'M-002',
363
+ canvas_source: canvas2
364
+ }), Date.now());
365
+ const results = manager.query({ canvasPath: canvas1 });
366
+ expect(results).toHaveLength(1);
367
+ expect(results[0].id).toBe('M-001');
368
+ });
369
+ });
370
+ describe('Query by parent', () => {
371
+ it('should query by parent ID', () => {
372
+ manager.indexEntity(createMilestone({ id: 'M-001' }), Date.now());
373
+ manager.indexEntity(createStory({
374
+ id: 'S-001',
375
+ parent: 'M-001'
376
+ }), Date.now());
377
+ manager.indexEntity(createStory({
378
+ id: 'S-002',
379
+ parent: 'M-001'
380
+ }), Date.now());
381
+ const results = manager.query({ parentId: 'M-001' });
382
+ expect(results).toHaveLength(2);
383
+ });
384
+ });
385
+ });
386
+ //# sourceMappingURL=index-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.test.js","sourceRoot":"","sources":["../../../src/services/v2/index-manager.test.ts"],"names":[],"mappings":"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"}