obsidian-accomplishments-mcp 0.1.10 → 0.1.12

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 +156 -184
  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,429 @@
1
+ /**
2
+ * Integration Tests for tools/index.ts
3
+ *
4
+ * Tests the tool definitions, exports, and utility tool handlers.
5
+ * These tests exercise the utility tools that are kept after V1 deprecation.
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
+ import * as fs from 'fs/promises';
9
+ import * as path from 'path';
10
+ import * as os from 'os';
11
+ // Import from tools/index.ts to test the exports
12
+ import { allToolDefinitions, utilityToolDefinitions, entityToolDefinitions, handleReadDocs, handleUpdateDoc, handleListWorkspaces, handleListFiles, readDocsDefinition, updateDocDefinition, listWorkspacesDefinition, listFilesDefinition, } from './index.js';
13
+ // =============================================================================
14
+ // Test Setup
15
+ // =============================================================================
16
+ describe('Tools Index Integration Tests', () => {
17
+ let tempDir;
18
+ let config;
19
+ beforeEach(async () => {
20
+ // Create temp directory structure
21
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'tools-index-test-'));
22
+ // Create workspace structure
23
+ const docsPath = path.join(tempDir, 'docs');
24
+ await fs.mkdir(docsPath, { recursive: true });
25
+ await fs.mkdir(path.join(docsPath, 'subfolder'), { recursive: true });
26
+ // Create workspaces.json
27
+ const workspacesConfig = {
28
+ docs: {
29
+ path: docsPath,
30
+ description: 'Documentation workspace',
31
+ },
32
+ empty: {
33
+ path: path.join(tempDir, 'empty'),
34
+ description: 'Empty workspace',
35
+ },
36
+ };
37
+ await fs.mkdir(path.join(tempDir, 'empty'), { recursive: true });
38
+ await fs.writeFile(path.join(tempDir, 'workspaces.json'), JSON.stringify(workspacesConfig, null, 2));
39
+ // Create test documents
40
+ await fs.writeFile(path.join(docsPath, 'test-doc.md'), 'Line 0\nLine 1\nLine 2\nLine 3\nLine 4');
41
+ await fs.writeFile(path.join(docsPath, 'subfolder', 'nested-doc.md'), '# Nested Document\n\nContent here.');
42
+ config = {
43
+ vaultPath: tempDir,
44
+ workspaces: workspacesConfig,
45
+ defaultCanvas: 'canvas.canvas',
46
+ };
47
+ });
48
+ afterEach(async () => {
49
+ await fs.rm(tempDir, { recursive: true, force: true });
50
+ });
51
+ // ===========================================================================
52
+ // Tool Definitions Tests
53
+ // ===========================================================================
54
+ describe('Tool Definitions', () => {
55
+ it('should export allToolDefinitions with all tools', () => {
56
+ expect(allToolDefinitions).toBeDefined();
57
+ expect(Array.isArray(allToolDefinitions)).toBe(true);
58
+ expect(allToolDefinitions.length).toBeGreaterThan(0);
59
+ // Should include both utility and entity tools
60
+ const toolNames = allToolDefinitions.map((t) => t.name);
61
+ expect(toolNames).toContain('read_docs');
62
+ expect(toolNames).toContain('update_doc');
63
+ expect(toolNames).toContain('list_workspaces');
64
+ expect(toolNames).toContain('list_files');
65
+ expect(toolNames).toContain('create_entity');
66
+ expect(toolNames).toContain('search_entities');
67
+ });
68
+ it('should export utilityToolDefinitions with utility tools', () => {
69
+ expect(utilityToolDefinitions).toBeDefined();
70
+ expect(Array.isArray(utilityToolDefinitions)).toBe(true);
71
+ expect(utilityToolDefinitions.length).toBe(4);
72
+ const toolNames = utilityToolDefinitions.map((t) => t.name);
73
+ expect(toolNames).toContain('read_docs');
74
+ expect(toolNames).toContain('update_doc');
75
+ expect(toolNames).toContain('list_workspaces');
76
+ expect(toolNames).toContain('list_files');
77
+ });
78
+ it('should export entityToolDefinitions with entity tools', () => {
79
+ expect(entityToolDefinitions).toBeDefined();
80
+ expect(Array.isArray(entityToolDefinitions)).toBe(true);
81
+ expect(entityToolDefinitions.length).toBeGreaterThan(0);
82
+ const toolNames = entityToolDefinitions.map((t) => t.name);
83
+ // Entity management (consolidated)
84
+ expect(toolNames).toContain('create_entity');
85
+ expect(toolNames).toContain('update_entity');
86
+ // Batch operations (consolidated)
87
+ expect(toolNames).toContain('batch_update');
88
+ // Project understanding
89
+ expect(toolNames).toContain('get_project_overview');
90
+ expect(toolNames).toContain('analyze_project_state');
91
+ // Search & navigation (consolidated)
92
+ expect(toolNames).toContain('search_entities');
93
+ expect(toolNames).toContain('get_entity');
94
+ expect(toolNames).toContain('get_entities'); // Bulk retrieval
95
+ // Decision & document (consolidated)
96
+ expect(toolNames).toContain('manage_documents');
97
+ // Feature coverage
98
+ expect(toolNames).toContain('get_feature_coverage');
99
+ });
100
+ it('should have batch_update with include_entities and fields options', () => {
101
+ const batchUpdateTool = entityToolDefinitions.find((t) => t.name === 'batch_update');
102
+ expect(batchUpdateTool).toBeDefined();
103
+ const options = batchUpdateTool?.inputSchema.properties?.options;
104
+ const optionsProps = options?.properties;
105
+ expect(optionsProps?.include_entities).toBeDefined();
106
+ expect(optionsProps?.fields).toBeDefined();
107
+ });
108
+ it('should have get_feature_coverage with summary_only, feature_ids, and fields options', () => {
109
+ const featureCoverageTool = entityToolDefinitions.find((t) => t.name === 'get_feature_coverage');
110
+ expect(featureCoverageTool).toBeDefined();
111
+ const props = featureCoverageTool?.inputSchema.properties;
112
+ expect(props?.summary_only).toBeDefined();
113
+ expect(props?.feature_ids).toBeDefined();
114
+ expect(props?.fields).toBeDefined();
115
+ });
116
+ it('should have get_entities tool with ids and fields parameters', () => {
117
+ const getEntitiesTool = entityToolDefinitions.find((t) => t.name === 'get_entities');
118
+ expect(getEntitiesTool).toBeDefined();
119
+ const props = getEntitiesTool?.inputSchema.properties;
120
+ expect(props?.ids).toBeDefined();
121
+ expect(props?.fields).toBeDefined();
122
+ expect(getEntitiesTool?.inputSchema.required).toContain('ids');
123
+ });
124
+ it('should have valid inputSchema for each tool definition', () => {
125
+ for (const tool of allToolDefinitions) {
126
+ expect(tool.name).toBeDefined();
127
+ expect(typeof tool.name).toBe('string');
128
+ expect(tool.description).toBeDefined();
129
+ expect(typeof tool.description).toBe('string');
130
+ expect(tool.inputSchema).toBeDefined();
131
+ expect(tool.inputSchema.type).toBe('object');
132
+ }
133
+ });
134
+ it('should export individual tool definitions', () => {
135
+ expect(readDocsDefinition).toBeDefined();
136
+ expect(readDocsDefinition.name).toBe('read_docs');
137
+ expect(updateDocDefinition).toBeDefined();
138
+ expect(updateDocDefinition.name).toBe('update_doc');
139
+ expect(listWorkspacesDefinition).toBeDefined();
140
+ expect(listWorkspacesDefinition.name).toBe('list_workspaces');
141
+ expect(listFilesDefinition).toBeDefined();
142
+ expect(listFilesDefinition.name).toBe('list_files');
143
+ });
144
+ });
145
+ // ===========================================================================
146
+ // list_workspaces Tool Tests
147
+ // ===========================================================================
148
+ describe('list_workspaces Tool', () => {
149
+ it('should list all configured workspaces', async () => {
150
+ const result = await handleListWorkspaces(config, {});
151
+ expect(result.workspaces).toBeDefined();
152
+ expect(Array.isArray(result.workspaces)).toBe(true);
153
+ expect(result.count).toBe(2);
154
+ const workspaceNames = result.workspaces.map((w) => w.name);
155
+ expect(workspaceNames).toContain('docs');
156
+ expect(workspaceNames).toContain('empty');
157
+ const docsWorkspace = result.workspaces.find((w) => w.name === 'docs');
158
+ expect(docsWorkspace?.description).toBe('Documentation workspace');
159
+ });
160
+ it('should include config_last_changed timestamp', async () => {
161
+ const result = await handleListWorkspaces(config, {});
162
+ expect(result.config_last_changed).toBeDefined();
163
+ expect(typeof result.config_last_changed).toBe('string');
164
+ });
165
+ });
166
+ // ===========================================================================
167
+ // list_files Tool Tests
168
+ // ===========================================================================
169
+ describe('list_files Tool', () => {
170
+ it('should list all markdown files in a workspace', async () => {
171
+ const result = await handleListFiles(config, { workspace: 'docs' });
172
+ expect(result.workspace).toBe('docs');
173
+ expect(result.workspace_description).toBe('Documentation workspace');
174
+ expect(result.count).toBe(2);
175
+ expect(result.files.length).toBe(2);
176
+ const fileNames = result.files.map((f) => f.name);
177
+ expect(fileNames).toContain('test-doc.md');
178
+ expect(fileNames).toContain('subfolder/nested-doc.md');
179
+ });
180
+ it('should include last_changed for each file', async () => {
181
+ const result = await handleListFiles(config, { workspace: 'docs' });
182
+ for (const file of result.files) {
183
+ expect(file.last_changed).toBeDefined();
184
+ expect(typeof file.last_changed).toBe('string');
185
+ }
186
+ });
187
+ it('should return empty list for empty workspace', async () => {
188
+ const result = await handleListFiles(config, { workspace: 'empty' });
189
+ expect(result.count).toBe(0);
190
+ expect(result.files).toEqual([]);
191
+ });
192
+ it('should throw error for missing workspace parameter', async () => {
193
+ await expect(handleListFiles(config, {})).rejects.toThrow('workspace parameter is required');
194
+ });
195
+ it('should throw error for non-existent workspace', async () => {
196
+ await expect(handleListFiles(config, { workspace: 'nonexistent' })).rejects.toThrow('Workspace not found: nonexistent');
197
+ });
198
+ });
199
+ // ===========================================================================
200
+ // read_docs Tool Tests
201
+ // ===========================================================================
202
+ describe('read_docs Tool', () => {
203
+ it('should read entire document content', async () => {
204
+ const result = await handleReadDocs(config, {
205
+ workspace: 'docs',
206
+ doc_name: 'test-doc.md',
207
+ });
208
+ expect(result.workspace).toBe('docs');
209
+ expect(result.workspace_description).toBe('Documentation workspace');
210
+ expect(result.doc_name).toBe('test-doc.md');
211
+ expect(result.content).toBe('Line 0\nLine 1\nLine 2\nLine 3\nLine 4');
212
+ expect(result.line_count).toBe(5);
213
+ expect(result.last_changed).toBeDefined();
214
+ });
215
+ it('should add .md extension if missing', async () => {
216
+ const result = await handleReadDocs(config, {
217
+ workspace: 'docs',
218
+ doc_name: 'test-doc',
219
+ });
220
+ expect(result.doc_name).toBe('test-doc.md');
221
+ expect(result.content).toContain('Line 0');
222
+ });
223
+ it('should read document with line range', async () => {
224
+ const result = await handleReadDocs(config, {
225
+ workspace: 'docs',
226
+ doc_name: 'test-doc.md',
227
+ from_line: 1,
228
+ to_line: 3,
229
+ });
230
+ expect(result.content).toBe('Line 1\nLine 2');
231
+ expect(result.range).toEqual({ from_line: 1, to_line: 3 });
232
+ expect(result.line_count).toBe(5); // Total lines in file
233
+ });
234
+ it('should read nested document', async () => {
235
+ const result = await handleReadDocs(config, {
236
+ workspace: 'docs',
237
+ doc_name: 'subfolder/nested-doc.md',
238
+ });
239
+ expect(result.content).toContain('# Nested Document');
240
+ });
241
+ it('should throw error for missing workspace parameter', async () => {
242
+ await expect(handleReadDocs(config, { doc_name: 'test.md' })).rejects.toThrow('workspace parameter is required');
243
+ });
244
+ it('should throw error for missing doc_name parameter', async () => {
245
+ await expect(handleReadDocs(config, { workspace: 'docs' })).rejects.toThrow('doc_name parameter is required');
246
+ });
247
+ it('should throw error for non-existent workspace', async () => {
248
+ await expect(handleReadDocs(config, { workspace: 'nonexistent', doc_name: 'test.md' })).rejects.toThrow('Workspace not found: nonexistent');
249
+ });
250
+ it('should throw error for non-existent document', async () => {
251
+ await expect(handleReadDocs(config, { workspace: 'docs', doc_name: 'nonexistent.md' })).rejects.toThrow('Document not found: nonexistent.md in workspace docs');
252
+ });
253
+ });
254
+ // ===========================================================================
255
+ // update_doc Tool Tests
256
+ // ===========================================================================
257
+ describe('update_doc Tool', () => {
258
+ it('should create a new document', async () => {
259
+ const result = await handleUpdateDoc(config, {
260
+ workspace: 'docs',
261
+ name: 'new-doc.md',
262
+ operation: 'create',
263
+ content: 'New document content\nLine 2',
264
+ });
265
+ expect(result.success).toBe(true);
266
+ expect(result.operation).toBe('create');
267
+ expect(result.doc_name).toBe('new-doc.md');
268
+ expect(result.line_count).toBe(2);
269
+ // Verify file was created
270
+ const readResult = await handleReadDocs(config, {
271
+ workspace: 'docs',
272
+ doc_name: 'new-doc.md',
273
+ });
274
+ expect(readResult.content).toBe('New document content\nLine 2');
275
+ });
276
+ it('should add .md extension when creating', async () => {
277
+ const result = await handleUpdateDoc(config, {
278
+ workspace: 'docs',
279
+ name: 'auto-ext',
280
+ operation: 'create',
281
+ content: 'Content',
282
+ });
283
+ expect(result.doc_name).toBe('auto-ext.md');
284
+ });
285
+ it('should throw error when creating existing document', async () => {
286
+ await expect(handleUpdateDoc(config, {
287
+ workspace: 'docs',
288
+ name: 'test-doc.md',
289
+ operation: 'create',
290
+ content: 'Content',
291
+ })).rejects.toThrow('Document already exists: test-doc.md in workspace docs');
292
+ });
293
+ it('should replace entire document content', async () => {
294
+ const result = await handleUpdateDoc(config, {
295
+ workspace: 'docs',
296
+ name: 'test-doc.md',
297
+ operation: 'replace',
298
+ content: 'Replaced content',
299
+ });
300
+ expect(result.success).toBe(true);
301
+ expect(result.operation).toBe('replace');
302
+ expect(result.line_count).toBe(1);
303
+ const readResult = await handleReadDocs(config, {
304
+ workspace: 'docs',
305
+ doc_name: 'test-doc.md',
306
+ });
307
+ expect(readResult.content).toBe('Replaced content');
308
+ });
309
+ it('should throw error when replacing non-existent document', async () => {
310
+ await expect(handleUpdateDoc(config, {
311
+ workspace: 'docs',
312
+ name: 'nonexistent.md',
313
+ operation: 'replace',
314
+ content: 'Content',
315
+ })).rejects.toThrow('Document not found: nonexistent.md in workspace docs');
316
+ });
317
+ it('should delete a document', async () => {
318
+ // First create a doc to delete
319
+ await handleUpdateDoc(config, {
320
+ workspace: 'docs',
321
+ name: 'to-delete.md',
322
+ operation: 'create',
323
+ content: 'To be deleted',
324
+ });
325
+ const result = await handleUpdateDoc(config, {
326
+ workspace: 'docs',
327
+ name: 'to-delete.md',
328
+ operation: 'delete',
329
+ });
330
+ expect(result.success).toBe(true);
331
+ expect(result.operation).toBe('delete');
332
+ // Verify file was deleted
333
+ await expect(handleReadDocs(config, { workspace: 'docs', doc_name: 'to-delete.md' })).rejects.toThrow('Document not found');
334
+ });
335
+ it('should throw error when deleting non-existent document', async () => {
336
+ await expect(handleUpdateDoc(config, {
337
+ workspace: 'docs',
338
+ name: 'nonexistent.md',
339
+ operation: 'delete',
340
+ })).rejects.toThrow('Document not found: nonexistent.md in workspace docs');
341
+ });
342
+ it('should insert content at specific line', async () => {
343
+ const result = await handleUpdateDoc(config, {
344
+ workspace: 'docs',
345
+ name: 'test-doc.md',
346
+ operation: 'insert_at',
347
+ content: 'Inserted line',
348
+ start_line: 2,
349
+ });
350
+ expect(result.success).toBe(true);
351
+ expect(result.operation).toBe('insert_at');
352
+ expect(result.affected_range).toEqual({ start_line: 2, end_line: 3 });
353
+ const readResult = await handleReadDocs(config, {
354
+ workspace: 'docs',
355
+ doc_name: 'test-doc.md',
356
+ });
357
+ const lines = readResult.content.split('\n');
358
+ expect(lines[2]).toBe('Inserted line');
359
+ expect(lines.length).toBe(6); // Original 5 + 1 inserted
360
+ });
361
+ it('should replace content at specific line range', async () => {
362
+ // Reset test-doc first
363
+ await handleUpdateDoc(config, {
364
+ workspace: 'docs',
365
+ name: 'test-doc.md',
366
+ operation: 'replace',
367
+ content: 'Line 0\nLine 1\nLine 2\nLine 3\nLine 4',
368
+ });
369
+ const result = await handleUpdateDoc(config, {
370
+ workspace: 'docs',
371
+ name: 'test-doc.md',
372
+ operation: 'replace_at',
373
+ content: 'New Line A\nNew Line B',
374
+ start_line: 1,
375
+ end_line: 3,
376
+ });
377
+ expect(result.success).toBe(true);
378
+ expect(result.operation).toBe('replace_at');
379
+ expect(result.affected_range).toEqual({ start_line: 1, end_line: 3 });
380
+ const readResult = await handleReadDocs(config, {
381
+ workspace: 'docs',
382
+ doc_name: 'test-doc.md',
383
+ });
384
+ const lines = readResult.content.split('\n');
385
+ expect(lines[0]).toBe('Line 0');
386
+ expect(lines[1]).toBe('New Line A');
387
+ expect(lines[2]).toBe('New Line B');
388
+ expect(lines[3]).toBe('Line 3');
389
+ });
390
+ it('should throw error for missing required parameters', async () => {
391
+ await expect(handleUpdateDoc(config, { name: 'test.md', operation: 'create' })).rejects.toThrow('workspace parameter is required');
392
+ await expect(handleUpdateDoc(config, { workspace: 'docs', operation: 'create' })).rejects.toThrow('name parameter is required');
393
+ await expect(handleUpdateDoc(config, {
394
+ workspace: 'docs',
395
+ name: 'test.md',
396
+ operation: 'create',
397
+ })).rejects.toThrow('content is required for create operation');
398
+ await expect(handleUpdateDoc(config, {
399
+ workspace: 'docs',
400
+ name: 'test-doc.md',
401
+ operation: 'insert_at',
402
+ content: 'test',
403
+ })).rejects.toThrow('start_line is required for insert_at operation');
404
+ await expect(handleUpdateDoc(config, {
405
+ workspace: 'docs',
406
+ name: 'test-doc.md',
407
+ operation: 'replace_at',
408
+ content: 'test',
409
+ start_line: 0,
410
+ })).rejects.toThrow('end_line is required for replace_at operation');
411
+ });
412
+ it('should throw error for unknown operation', async () => {
413
+ await expect(handleUpdateDoc(config, {
414
+ workspace: 'docs',
415
+ name: 'test.md',
416
+ operation: 'unknown',
417
+ })).rejects.toThrow('Unknown operation: unknown');
418
+ });
419
+ it('should throw error for non-existent workspace', async () => {
420
+ await expect(handleUpdateDoc(config, {
421
+ workspace: 'nonexistent',
422
+ name: 'test.md',
423
+ operation: 'create',
424
+ content: 'test',
425
+ })).rejects.toThrow('Workspace not found: nonexistent');
426
+ });
427
+ });
428
+ });
429
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/tools/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Project Understanding Tools
3
+ *
4
+ * Category 3: Project Understanding
5
+ * - get_project_overview: High-level project status
6
+ * - get_workstream_status: Workstream-specific status
7
+ * - analyze_project_state: Deep analysis with blockers and suggestions
8
+ */
9
+ import type { Entity, EntityId, EntityType } from '../models/v2-types.js';
10
+ import type { GetProjectOverviewInput, GetProjectOverviewOutput, GetWorkstreamStatusInput, GetWorkstreamStatusOutput, AnalyzeProjectStateInput, AnalyzeProjectStateOutput, EntitySummary, Workstream, GetSchemaInput, GetSchemaOutput } from './tool-types.js';
11
+ /**
12
+ * Dependencies for project understanding tools.
13
+ */
14
+ export interface ProjectUnderstandingDependencies {
15
+ /** Get all entities, optionally filtered */
16
+ getAllEntities: (options?: {
17
+ includeCompleted?: boolean;
18
+ includeArchived?: boolean;
19
+ workstream?: Workstream;
20
+ types?: EntityType[];
21
+ }) => Promise<Entity[]>;
22
+ /** Convert entity to summary */
23
+ toEntitySummary: (entity: Entity) => EntitySummary;
24
+ /** Get entities blocking a given entity */
25
+ getBlockers: (id: EntityId) => Promise<Entity[]>;
26
+ /** Get entities blocked by a given entity */
27
+ getBlockedBy: (id: EntityId) => Promise<Entity[]>;
28
+ /** Get entity update timestamp */
29
+ getLastUpdated: (entity: Entity) => Date;
30
+ }
31
+ /**
32
+ * Get high-level project status across all workstreams.
33
+ * Enhanced to support workstream filtering and grouping (consolidates get_workstream_status).
34
+ */
35
+ export declare function getProjectOverview(input: GetProjectOverviewInput, deps: ProjectUnderstandingDependencies): Promise<GetProjectOverviewOutput>;
36
+ /**
37
+ * Get detailed status for a specific workstream.
38
+ *
39
+ * @deprecated Use `getProjectOverview` with `workstream` filter instead.
40
+ * Example: `getProjectOverview({ workstream: 'auth', group_by: 'status' })`
41
+ */
42
+ export declare function getWorkstreamStatus(input: GetWorkstreamStatusInput, deps: ProjectUnderstandingDependencies): Promise<GetWorkstreamStatusOutput>;
43
+ /**
44
+ * Deep analysis of project state with blockers and suggested actions.
45
+ */
46
+ export declare function analyzeProjectState(input: AnalyzeProjectStateInput, deps: ProjectUnderstandingDependencies): Promise<AnalyzeProjectStateOutput>;
47
+ import type { GetFeatureCoverageInput, GetFeatureCoverageOutput } from './tool-types.js';
48
+ import type { Feature, Document } from '../models/v2-types.js';
49
+ /**
50
+ * Dependencies for feature coverage tool.
51
+ */
52
+ export interface FeatureCoverageDependencies {
53
+ /** Get all features */
54
+ getAllFeatures: (options?: {
55
+ tier?: string;
56
+ phase?: string;
57
+ includeDeferred?: boolean;
58
+ }) => Promise<Feature[]>;
59
+ /** Get entity by ID */
60
+ getEntity: (id: EntityId) => Promise<Entity | null>;
61
+ /** Get all documents */
62
+ getAllDocuments: (options?: {
63
+ workstream?: string;
64
+ }) => Promise<Document[]>;
65
+ }
66
+ /**
67
+ * Get feature coverage analysis showing implementation, documentation, and testing status.
68
+ */
69
+ export declare function getFeatureCoverage(input: GetFeatureCoverageInput, deps: FeatureCoverageDependencies): Promise<GetFeatureCoverageOutput>;
70
+ /**
71
+ * Get entity schema information.
72
+ * Returns field definitions, valid values, and relationship info.
73
+ */
74
+ export declare function getSchema(input: GetSchemaInput): GetSchemaOutput;
75
+ //# sourceMappingURL=project-understanding-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-understanding-tools.d.ts","sourceRoot":"","sources":["../../src/tools/project-understanding-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EACR,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,UAAU,EAGV,cAAc,EACd,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAMzB;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,4CAA4C;IAC5C,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;KACtB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAExB,gCAAgC;IAChC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;IAEnD,2CAA2C;IAC3C,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjD,6CAA6C;IAC7C,YAAY,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAElD,kCAAkC;IAClC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,wBAAwB,CAAC,CA4GnC;AAwGD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,EAC/B,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,yBAAyB,CAAC,CAgGpC;AAOD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,EAC/B,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,yBAAyB,CAAC,CAuJpC;AAMD,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EACV,OAAO,EAIP,QAAQ,EAIT,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,uBAAuB;IACvB,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzB,uBAAuB;IACvB,SAAS,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEpD,wBAAwB;IACxB,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAiMnC;AAmHD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAqBhE"}