obsidian-accomplishments-mcp 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/README.md +154 -182
  2. package/dist/index.js +207 -38
  3. package/dist/index.js.map +1 -1
  4. package/dist/integration.test.d.ts +8 -0
  5. package/dist/integration.test.d.ts.map +1 -0
  6. package/dist/integration.test.js +979 -0
  7. package/dist/integration.test.js.map +1 -0
  8. package/dist/models/types.d.ts +1 -2
  9. package/dist/models/types.d.ts.map +1 -1
  10. package/dist/models/types.js.map +1 -1
  11. package/dist/models/v2-types.d.ts +460 -0
  12. package/dist/models/v2-types.d.ts.map +1 -0
  13. package/dist/models/v2-types.js +137 -0
  14. package/dist/models/v2-types.js.map +1 -0
  15. package/dist/models/v2-types.test.d.ts +5 -0
  16. package/dist/models/v2-types.test.d.ts.map +1 -0
  17. package/dist/models/v2-types.test.js +133 -0
  18. package/dist/models/v2-types.test.js.map +1 -0
  19. package/dist/parsers/canvas-parser.d.ts +1 -1
  20. package/dist/parsers/canvas-parser.d.ts.map +1 -1
  21. package/dist/parsers/canvas-parser.js +1 -1
  22. package/dist/parsers/canvas-parser.js.map +1 -1
  23. package/dist/parsers/markdown-parser.js +9 -9
  24. package/dist/parsers/markdown-parser.js.map +1 -1
  25. package/dist/services/v2/archive-manager.d.ts +96 -0
  26. package/dist/services/v2/archive-manager.d.ts.map +1 -0
  27. package/dist/services/v2/archive-manager.js +281 -0
  28. package/dist/services/v2/archive-manager.js.map +1 -0
  29. package/dist/services/v2/canvas-manager.d.ts +155 -0
  30. package/dist/services/v2/canvas-manager.d.ts.map +1 -0
  31. package/dist/services/v2/canvas-manager.js +540 -0
  32. package/dist/services/v2/canvas-manager.js.map +1 -0
  33. package/dist/services/v2/canvas-manager.test.d.ts +5 -0
  34. package/dist/services/v2/canvas-manager.test.d.ts.map +1 -0
  35. package/dist/services/v2/canvas-manager.test.js +327 -0
  36. package/dist/services/v2/canvas-manager.test.js.map +1 -0
  37. package/dist/services/v2/cascade-manager.d.ts +54 -0
  38. package/dist/services/v2/cascade-manager.d.ts.map +1 -0
  39. package/dist/services/v2/cascade-manager.js +220 -0
  40. package/dist/services/v2/cascade-manager.js.map +1 -0
  41. package/dist/services/v2/cycle-detector.d.ts +76 -0
  42. package/dist/services/v2/cycle-detector.d.ts.map +1 -0
  43. package/dist/services/v2/cycle-detector.js +183 -0
  44. package/dist/services/v2/cycle-detector.js.map +1 -0
  45. package/dist/services/v2/cycle-detector.test.d.ts +7 -0
  46. package/dist/services/v2/cycle-detector.test.d.ts.map +1 -0
  47. package/dist/services/v2/cycle-detector.test.js +125 -0
  48. package/dist/services/v2/cycle-detector.test.js.map +1 -0
  49. package/dist/services/v2/entity-parser.d.ts +54 -0
  50. package/dist/services/v2/entity-parser.d.ts.map +1 -0
  51. package/dist/services/v2/entity-parser.js +418 -0
  52. package/dist/services/v2/entity-parser.js.map +1 -0
  53. package/dist/services/v2/entity-parser.test.d.ts +5 -0
  54. package/dist/services/v2/entity-parser.test.d.ts.map +1 -0
  55. package/dist/services/v2/entity-parser.test.js +637 -0
  56. package/dist/services/v2/entity-parser.test.js.map +1 -0
  57. package/dist/services/v2/entity-serializer.d.ts +94 -0
  58. package/dist/services/v2/entity-serializer.d.ts.map +1 -0
  59. package/dist/services/v2/entity-serializer.js +583 -0
  60. package/dist/services/v2/entity-serializer.js.map +1 -0
  61. package/dist/services/v2/entity-serializer.test.d.ts +5 -0
  62. package/dist/services/v2/entity-serializer.test.d.ts.map +1 -0
  63. package/dist/services/v2/entity-serializer.test.js +241 -0
  64. package/dist/services/v2/entity-serializer.test.js.map +1 -0
  65. package/dist/services/v2/entity-validator.d.ts +65 -0
  66. package/dist/services/v2/entity-validator.d.ts.map +1 -0
  67. package/dist/services/v2/entity-validator.js +573 -0
  68. package/dist/services/v2/entity-validator.js.map +1 -0
  69. package/dist/services/v2/entity-validator.test.d.ts +5 -0
  70. package/dist/services/v2/entity-validator.test.d.ts.map +1 -0
  71. package/dist/services/v2/entity-validator.test.js +519 -0
  72. package/dist/services/v2/entity-validator.test.js.map +1 -0
  73. package/dist/services/v2/file-manager.d.ts +73 -0
  74. package/dist/services/v2/file-manager.d.ts.map +1 -0
  75. package/dist/services/v2/file-manager.js +310 -0
  76. package/dist/services/v2/file-manager.js.map +1 -0
  77. package/dist/services/v2/file-manager.test.d.ts +5 -0
  78. package/dist/services/v2/file-manager.test.d.ts.map +1 -0
  79. package/dist/services/v2/file-manager.test.js +339 -0
  80. package/dist/services/v2/file-manager.test.js.map +1 -0
  81. package/dist/services/v2/index-manager.d.ts +68 -0
  82. package/dist/services/v2/index-manager.d.ts.map +1 -0
  83. package/dist/services/v2/index-manager.js +228 -0
  84. package/dist/services/v2/index-manager.js.map +1 -0
  85. package/dist/services/v2/index-manager.test.d.ts +5 -0
  86. package/dist/services/v2/index-manager.test.d.ts.map +1 -0
  87. package/dist/services/v2/index-manager.test.js +386 -0
  88. package/dist/services/v2/index-manager.test.js.map +1 -0
  89. package/dist/services/v2/index-service.d.ts +82 -0
  90. package/dist/services/v2/index-service.d.ts.map +1 -0
  91. package/dist/services/v2/index-service.js +274 -0
  92. package/dist/services/v2/index-service.js.map +1 -0
  93. package/dist/services/v2/index-service.test.d.ts +5 -0
  94. package/dist/services/v2/index-service.test.d.ts.map +1 -0
  95. package/dist/services/v2/index-service.test.js +117 -0
  96. package/dist/services/v2/index-service.test.js.map +1 -0
  97. package/dist/services/v2/lifecycle-manager.d.ts +59 -0
  98. package/dist/services/v2/lifecycle-manager.d.ts.map +1 -0
  99. package/dist/services/v2/lifecycle-manager.js +310 -0
  100. package/dist/services/v2/lifecycle-manager.js.map +1 -0
  101. package/dist/services/v2/lifecycle-manager.test.d.ts +5 -0
  102. package/dist/services/v2/lifecycle-manager.test.d.ts.map +1 -0
  103. package/dist/services/v2/lifecycle-manager.test.js +141 -0
  104. package/dist/services/v2/lifecycle-manager.test.js.map +1 -0
  105. package/dist/services/v2/path-resolver.d.ts +64 -0
  106. package/dist/services/v2/path-resolver.d.ts.map +1 -0
  107. package/dist/services/v2/path-resolver.js +174 -0
  108. package/dist/services/v2/path-resolver.js.map +1 -0
  109. package/dist/services/v2/progress-computer.d.ts +46 -0
  110. package/dist/services/v2/progress-computer.d.ts.map +1 -0
  111. package/dist/services/v2/progress-computer.js +200 -0
  112. package/dist/services/v2/progress-computer.js.map +1 -0
  113. package/dist/services/v2/search-service.d.ts +68 -0
  114. package/dist/services/v2/search-service.d.ts.map +1 -0
  115. package/dist/services/v2/search-service.js +194 -0
  116. package/dist/services/v2/search-service.js.map +1 -0
  117. package/dist/services/v2/transitive-dependency-remover.d.ts +54 -0
  118. package/dist/services/v2/transitive-dependency-remover.d.ts.map +1 -0
  119. package/dist/services/v2/transitive-dependency-remover.js +156 -0
  120. package/dist/services/v2/transitive-dependency-remover.js.map +1 -0
  121. package/dist/services/v2/transitive-dependency-remover.test.d.ts +7 -0
  122. package/dist/services/v2/transitive-dependency-remover.test.d.ts.map +1 -0
  123. package/dist/services/v2/transitive-dependency-remover.test.js +119 -0
  124. package/dist/services/v2/transitive-dependency-remover.test.js.map +1 -0
  125. package/dist/services/v2/v2-runtime.d.ts +374 -0
  126. package/dist/services/v2/v2-runtime.d.ts.map +1 -0
  127. package/dist/services/v2/v2-runtime.js +1908 -0
  128. package/dist/services/v2/v2-runtime.js.map +1 -0
  129. package/dist/services/v2/v2-runtime.test.d.ts +5 -0
  130. package/dist/services/v2/v2-runtime.test.d.ts.map +1 -0
  131. package/dist/services/v2/v2-runtime.test.js +658 -0
  132. package/dist/services/v2/v2-runtime.test.js.map +1 -0
  133. package/dist/services/v2/workstream-normalizer.d.ts +59 -0
  134. package/dist/services/v2/workstream-normalizer.d.ts.map +1 -0
  135. package/dist/services/v2/workstream-normalizer.js +137 -0
  136. package/dist/services/v2/workstream-normalizer.js.map +1 -0
  137. package/dist/services/v2/workstream-normalizer.test.d.ts +7 -0
  138. package/dist/services/v2/workstream-normalizer.test.d.ts.map +1 -0
  139. package/dist/services/v2/workstream-normalizer.test.js +130 -0
  140. package/dist/services/v2/workstream-normalizer.test.js.map +1 -0
  141. package/dist/test-runner.d.ts +4 -1
  142. package/dist/test-runner.d.ts.map +1 -1
  143. package/dist/test-runner.js +44 -249
  144. package/dist/test-runner.js.map +1 -1
  145. package/dist/tools/batch-operations-tools.d.ts +54 -0
  146. package/dist/tools/batch-operations-tools.d.ts.map +1 -0
  147. package/dist/tools/batch-operations-tools.js +370 -0
  148. package/dist/tools/batch-operations-tools.js.map +1 -0
  149. package/dist/tools/decision-document-tools.d.ts +78 -0
  150. package/dist/tools/decision-document-tools.d.ts.map +1 -0
  151. package/dist/tools/decision-document-tools.js +260 -0
  152. package/dist/tools/decision-document-tools.js.map +1 -0
  153. package/dist/tools/entity-management-tools.d.ts +79 -0
  154. package/dist/tools/entity-management-tools.d.ts.map +1 -0
  155. package/dist/tools/entity-management-tools.js +851 -0
  156. package/dist/tools/entity-management-tools.js.map +1 -0
  157. package/dist/tools/entity-management-tools.test.d.ts +5 -0
  158. package/dist/tools/entity-management-tools.test.d.ts.map +1 -0
  159. package/dist/tools/entity-management-tools.test.js +530 -0
  160. package/dist/tools/entity-management-tools.test.js.map +1 -0
  161. package/dist/tools/index.d.ts +15 -271
  162. package/dist/tools/index.d.ts.map +1 -1
  163. package/dist/tools/index.js +510 -47
  164. package/dist/tools/index.js.map +1 -1
  165. package/dist/tools/index.test.d.ts +8 -0
  166. package/dist/tools/index.test.d.ts.map +1 -0
  167. package/dist/tools/index.test.js +429 -0
  168. package/dist/tools/index.test.js.map +1 -0
  169. package/dist/tools/project-understanding-tools.d.ts +75 -0
  170. package/dist/tools/project-understanding-tools.d.ts.map +1 -0
  171. package/dist/tools/project-understanding-tools.js +751 -0
  172. package/dist/tools/project-understanding-tools.js.map +1 -0
  173. package/dist/tools/search-navigation-tools.d.ts +77 -0
  174. package/dist/tools/search-navigation-tools.d.ts.map +1 -0
  175. package/dist/tools/search-navigation-tools.js +379 -0
  176. package/dist/tools/search-navigation-tools.js.map +1 -0
  177. package/dist/tools/tool-types.d.ts +703 -0
  178. package/dist/tools/tool-types.d.ts.map +1 -0
  179. package/dist/tools/tool-types.js +7 -0
  180. package/dist/tools/tool-types.js.map +1 -0
  181. package/dist/utils/config.d.ts +0 -4
  182. package/dist/utils/config.d.ts.map +1 -1
  183. package/dist/utils/config.js +2 -19
  184. package/dist/utils/config.js.map +1 -1
  185. package/package.json +16 -1
  186. package/dist/services/accomplishment-service.d.ts +0 -33
  187. package/dist/services/accomplishment-service.d.ts.map +0 -1
  188. package/dist/services/accomplishment-service.js +0 -293
  189. package/dist/services/accomplishment-service.js.map +0 -1
  190. package/dist/services/canvas-service.d.ts +0 -96
  191. package/dist/services/canvas-service.d.ts.map +0 -1
  192. package/dist/services/canvas-service.js +0 -231
  193. package/dist/services/canvas-service.js.map +0 -1
  194. package/dist/services/context-doc-service.d.ts +0 -70
  195. package/dist/services/context-doc-service.d.ts.map +0 -1
  196. package/dist/services/context-doc-service.js +0 -229
  197. package/dist/services/context-doc-service.js.map +0 -1
  198. package/dist/services/dependency-service.d.ts +0 -22
  199. package/dist/services/dependency-service.d.ts.map +0 -1
  200. package/dist/services/dependency-service.js +0 -99
  201. package/dist/services/dependency-service.js.map +0 -1
  202. package/dist/services/status-indicator-service.d.ts +0 -40
  203. package/dist/services/status-indicator-service.d.ts.map +0 -1
  204. package/dist/services/status-indicator-service.js +0 -173
  205. package/dist/services/status-indicator-service.js.map +0 -1
  206. package/dist/services/task-service.d.ts +0 -32
  207. package/dist/services/task-service.d.ts.map +0 -1
  208. package/dist/services/task-service.js +0 -152
  209. package/dist/services/task-service.js.map +0 -1
  210. package/dist/test-real-vault.d.ts +0 -6
  211. package/dist/test-real-vault.d.ts.map +0 -1
  212. package/dist/test-real-vault.js +0 -30
  213. package/dist/test-real-vault.js.map +0 -1
  214. package/dist/tools/batch-operations.d.ts +0 -246
  215. package/dist/tools/batch-operations.d.ts.map +0 -1
  216. package/dist/tools/batch-operations.js +0 -235
  217. package/dist/tools/batch-operations.js.map +0 -1
  218. package/dist/tools/get-accomplishment.d.ts +0 -26
  219. package/dist/tools/get-accomplishment.d.ts.map +0 -1
  220. package/dist/tools/get-accomplishment.js +0 -53
  221. package/dist/tools/get-accomplishment.js.map +0 -1
  222. package/dist/tools/get-accomplishments-graph.d.ts +0 -26
  223. package/dist/tools/get-accomplishments-graph.d.ts.map +0 -1
  224. package/dist/tools/get-accomplishments-graph.js +0 -137
  225. package/dist/tools/get-accomplishments-graph.js.map +0 -1
  226. package/dist/tools/get-blocked-items.d.ts +0 -15
  227. package/dist/tools/get-blocked-items.d.ts.map +0 -1
  228. package/dist/tools/get-blocked-items.js +0 -73
  229. package/dist/tools/get-blocked-items.js.map +0 -1
  230. package/dist/tools/get-current-work.d.ts +0 -15
  231. package/dist/tools/get-current-work.d.ts.map +0 -1
  232. package/dist/tools/get-current-work.js +0 -68
  233. package/dist/tools/get-current-work.js.map +0 -1
  234. package/dist/tools/get-project-status.d.ts +0 -26
  235. package/dist/tools/get-project-status.d.ts.map +0 -1
  236. package/dist/tools/get-project-status.js +0 -98
  237. package/dist/tools/get-project-status.js.map +0 -1
  238. package/dist/tools/get-ready-to-start.d.ts +0 -15
  239. package/dist/tools/get-ready-to-start.d.ts.map +0 -1
  240. package/dist/tools/get-ready-to-start.js +0 -47
  241. package/dist/tools/get-ready-to-start.js.map +0 -1
  242. package/dist/tools/list-accomplishments.d.ts +0 -34
  243. package/dist/tools/list-accomplishments.d.ts.map +0 -1
  244. package/dist/tools/list-accomplishments.js +0 -34
  245. package/dist/tools/list-accomplishments.js.map +0 -1
  246. package/dist/tools/manage-accomplishment.d.ts +0 -147
  247. package/dist/tools/manage-accomplishment.d.ts.map +0 -1
  248. package/dist/tools/manage-accomplishment.js +0 -153
  249. package/dist/tools/manage-accomplishment.js.map +0 -1
  250. package/dist/tools/manage-dependency.d.ts +0 -41
  251. package/dist/tools/manage-dependency.d.ts.map +0 -1
  252. package/dist/tools/manage-dependency.js +0 -66
  253. package/dist/tools/manage-dependency.js.map +0 -1
  254. package/dist/tools/manage-task.d.ts +0 -119
  255. package/dist/tools/manage-task.d.ts.map +0 -1
  256. package/dist/tools/manage-task.js +0 -126
  257. package/dist/tools/manage-task.js.map +0 -1
  258. package/dist/tools/reconcile-canvas.d.ts +0 -33
  259. package/dist/tools/reconcile-canvas.d.ts.map +0 -1
  260. package/dist/tools/reconcile-canvas.js +0 -41
  261. package/dist/tools/reconcile-canvas.js.map +0 -1
  262. package/dist/tools/set-work-focus.d.ts +0 -48
  263. package/dist/tools/set-work-focus.d.ts.map +0 -1
  264. package/dist/tools/set-work-focus.js +0 -78
  265. package/dist/tools/set-work-focus.js.map +0 -1
  266. package/dist/tools/sync-dependencies.d.ts +0 -33
  267. package/dist/tools/sync-dependencies.d.ts.map +0 -1
  268. package/dist/tools/sync-dependencies.js +0 -144
  269. package/dist/tools/sync-dependencies.js.map +0 -1
@@ -0,0 +1,370 @@
1
+ /**
2
+ * Batch Operations Tools
3
+ *
4
+ * Category 2: Batch Operations
5
+ * - batch_update: NEW unified batch operation with client_id support
6
+ * - batch_operations: DEPRECATED - Create multiple entities with dependencies
7
+ * - batch_update_status: DEPRECATED - Update status of multiple entities
8
+ * - batch_archive: DEPRECATED - Archive multiple entities
9
+ */
10
+ // =============================================================================
11
+ // Batch Operations
12
+ // =============================================================================
13
+ // =============================================================================
14
+ // Unified Batch Update
15
+ // =============================================================================
16
+ /**
17
+ * Unified batch operation with client_id support for idempotency and cross-referencing.
18
+ * Supports create, update, and archive operations in a single call.
19
+ */
20
+ export async function batchUpdate(input, deps) {
21
+ const { ops, options } = input;
22
+ const atomic = options?.atomic ?? false;
23
+ const includeEntities = options?.include_entities ?? false;
24
+ const requestedFields = options?.fields;
25
+ const dryRun = options?.dry_run ?? false;
26
+ // Map of client_id → real EntityId (for cross-referencing within batch)
27
+ const clientIdMap = new Map();
28
+ // Track processed client_ids for idempotency
29
+ const processedClientIds = new Set();
30
+ const results = [];
31
+ const dryRunPreviews = [];
32
+ let succeeded = 0;
33
+ let failed = 0;
34
+ // Helper to filter entity fields based on requested fields
35
+ const filterEntityFields = (entityFull) => {
36
+ if (!requestedFields || requestedFields.length === 0) {
37
+ return entityFull; // Return all fields if none specified
38
+ }
39
+ const filtered = {};
40
+ for (const field of requestedFields) {
41
+ if (field in entityFull) {
42
+ filtered[field] = entityFull[field];
43
+ }
44
+ }
45
+ return filtered;
46
+ };
47
+ // Helper to compute field changes for dry_run preview
48
+ const computeChanges = (entity, payload) => {
49
+ const changes = [];
50
+ // Check all fields in the payload, not just a hardcoded list
51
+ for (const field of Object.keys(payload)) {
52
+ if (payload[field] !== undefined) {
53
+ const before = entity[field];
54
+ const after = payload[field];
55
+ // Check if values are different
56
+ const beforeStr = JSON.stringify(before);
57
+ const afterStr = JSON.stringify(after);
58
+ if (beforeStr !== afterStr) {
59
+ const change = { field, before, after };
60
+ // For array fields, compute added/removed
61
+ if (Array.isArray(before) && Array.isArray(after)) {
62
+ const beforeSet = new Set(before);
63
+ const afterSet = new Set(after);
64
+ change.added = after.filter(v => !beforeSet.has(v));
65
+ change.removed = before.filter(v => !afterSet.has(v));
66
+ }
67
+ changes.push(change);
68
+ }
69
+ }
70
+ }
71
+ return changes;
72
+ };
73
+ // Helper to resolve client_ids in payload
74
+ const resolveClientIds = (payload) => {
75
+ const resolved = { ...payload };
76
+ // Resolve parent reference
77
+ if (resolved.parent && typeof resolved.parent === 'string') {
78
+ const parentId = clientIdMap.get(resolved.parent);
79
+ if (parentId) {
80
+ resolved.parent = parentId;
81
+ }
82
+ }
83
+ // Resolve depends_on references
84
+ if (resolved.depends_on && Array.isArray(resolved.depends_on)) {
85
+ resolved.depends_on = resolved.depends_on.map((dep) => {
86
+ const resolvedId = clientIdMap.get(dep);
87
+ return resolvedId || dep;
88
+ });
89
+ }
90
+ // Resolve enables references (for decisions)
91
+ if (resolved.enables && Array.isArray(resolved.enables)) {
92
+ resolved.enables = resolved.enables.map((ref) => {
93
+ const resolvedId = clientIdMap.get(ref);
94
+ return resolvedId || ref;
95
+ });
96
+ }
97
+ // Resolve implements references
98
+ if (resolved.implements && Array.isArray(resolved.implements)) {
99
+ resolved.implements = resolved.implements.map((ref) => {
100
+ const resolvedId = clientIdMap.get(ref);
101
+ return resolvedId || ref;
102
+ });
103
+ }
104
+ return resolved;
105
+ };
106
+ for (const op of ops) {
107
+ // Skip duplicate client_ids (idempotency)
108
+ if (processedClientIds.has(op.client_id)) {
109
+ // Return existing result if we have one
110
+ const existingResult = results.find(r => r.client_id === op.client_id);
111
+ if (existingResult) {
112
+ results.push({ ...existingResult });
113
+ }
114
+ continue;
115
+ }
116
+ processedClientIds.add(op.client_id);
117
+ try {
118
+ switch (op.op) {
119
+ case 'create': {
120
+ if (!op.type) {
121
+ throw new Error('type is required for create operation');
122
+ }
123
+ if (!op.payload.title) {
124
+ throw new Error('title is required for create operation');
125
+ }
126
+ // Resolve client_ids in payload
127
+ const resolvedPayload = resolveClientIds(op.payload);
128
+ if (dryRun) {
129
+ // In dry_run mode, just preview what would be created
130
+ const preview = {
131
+ client_id: op.client_id,
132
+ op: 'create',
133
+ changes: Object.entries(resolvedPayload).map(([field, value]) => ({
134
+ field,
135
+ before: undefined,
136
+ after: value,
137
+ })),
138
+ validation_errors: [],
139
+ };
140
+ dryRunPreviews.push(preview);
141
+ succeeded++;
142
+ break;
143
+ }
144
+ // Create the entity
145
+ const entity = await deps.createEntity(op.type, resolvedPayload);
146
+ // Store mapping for cross-references
147
+ clientIdMap.set(op.client_id, entity.id);
148
+ // Add to canvas if requested
149
+ if (options?.add_to_canvas && deps.addToCanvas && options.canvas_source) {
150
+ await deps.addToCanvas(entity, options.canvas_source);
151
+ }
152
+ // Build result with optional entity data
153
+ const createResult = {
154
+ client_id: op.client_id,
155
+ status: 'ok',
156
+ id: entity.id,
157
+ };
158
+ // Include entity data if requested
159
+ if (includeEntities) {
160
+ const entityFull = await deps.toEntityFull(entity);
161
+ createResult.entity = filterEntityFields(entityFull);
162
+ }
163
+ results.push(createResult);
164
+ succeeded++;
165
+ break;
166
+ }
167
+ case 'update': {
168
+ if (!op.id) {
169
+ throw new Error('id is required for update operation');
170
+ }
171
+ // Get entity
172
+ const entity = await deps.getEntity(op.id);
173
+ if (!entity) {
174
+ throw new Error(`Entity not found: ${op.id}`);
175
+ }
176
+ // Resolve client_ids in payload
177
+ const resolvedPayload = resolveClientIds(op.payload);
178
+ // Validate status transition if status is being changed
179
+ const validationErrors = [];
180
+ if (resolvedPayload.status && resolvedPayload.status !== entity.status) {
181
+ const validation = deps.validateStatusTransition(entity, resolvedPayload.status);
182
+ if (!validation.valid) {
183
+ validationErrors.push(validation.reason || 'Invalid status transition');
184
+ }
185
+ }
186
+ if (dryRun) {
187
+ // In dry_run mode, compute and preview changes without executing
188
+ const preview = {
189
+ client_id: op.client_id,
190
+ id: op.id,
191
+ op: 'update',
192
+ changes: computeChanges(entity, resolvedPayload),
193
+ validation_errors: validationErrors,
194
+ };
195
+ dryRunPreviews.push(preview);
196
+ if (validationErrors.length === 0) {
197
+ succeeded++;
198
+ }
199
+ else {
200
+ failed++;
201
+ }
202
+ break;
203
+ }
204
+ // Throw validation errors in non-dry_run mode
205
+ if (validationErrors.length > 0) {
206
+ throw new Error(validationErrors[0]);
207
+ }
208
+ // Track what was updated
209
+ let statusChanged = false;
210
+ let dependenciesAdded = 0;
211
+ let fieldsUpdated = 0;
212
+ // Handle status update
213
+ if (resolvedPayload.status && resolvedPayload.status !== entity.status) {
214
+ entity.status = resolvedPayload.status;
215
+ statusChanged = true;
216
+ }
217
+ // Handle depends_on - add to existing dependencies
218
+ if (resolvedPayload.depends_on && Array.isArray(resolvedPayload.depends_on) && 'depends_on' in entity) {
219
+ const currentDeps = entity.depends_on || [];
220
+ const newDeps = resolvedPayload.depends_on;
221
+ const mergedDeps = [...new Set([...currentDeps, ...newDeps])];
222
+ dependenciesAdded = mergedDeps.length - currentDeps.length;
223
+ entity.depends_on = mergedDeps;
224
+ }
225
+ // Handle other field updates (title, priority, content, parent, etc.)
226
+ const fieldsToUpdate = ['title', 'priority', 'content', 'workstream',
227
+ 'target_date', 'owner', 'acceptance_criteria', 'implements', 'enables', 'parent'];
228
+ for (const field of fieldsToUpdate) {
229
+ if (field in resolvedPayload && resolvedPayload[field] !== undefined) {
230
+ // For array fields like implements/enables, merge with existing
231
+ if ((field === 'implements' || field === 'enables') && Array.isArray(resolvedPayload[field])) {
232
+ const current = entity[field] || [];
233
+ const newValues = resolvedPayload[field];
234
+ entity[field] = [...new Set([...current, ...newValues])];
235
+ }
236
+ else {
237
+ entity[field] = resolvedPayload[field];
238
+ }
239
+ fieldsUpdated++;
240
+ }
241
+ }
242
+ // Update timestamp and write if anything changed
243
+ if (statusChanged || dependenciesAdded > 0 || fieldsUpdated > 0) {
244
+ entity.updated_at = deps.getCurrentTimestamp();
245
+ await deps.writeEntity(entity);
246
+ }
247
+ // Store mapping for potential cross-references
248
+ clientIdMap.set(op.client_id, op.id);
249
+ // Build result with optional entity data
250
+ const updateResult = {
251
+ client_id: op.client_id,
252
+ status: 'ok',
253
+ id: op.id,
254
+ };
255
+ // Include entity data if requested
256
+ if (includeEntities) {
257
+ const entityFull = await deps.toEntityFull(entity);
258
+ updateResult.entity = filterEntityFields(entityFull);
259
+ }
260
+ results.push(updateResult);
261
+ succeeded++;
262
+ break;
263
+ }
264
+ case 'archive': {
265
+ if (!op.id) {
266
+ throw new Error('id is required for archive operation');
267
+ }
268
+ // Get entity
269
+ const entity = await deps.getEntity(op.id);
270
+ if (!entity) {
271
+ throw new Error(`Entity not found: ${op.id}`);
272
+ }
273
+ if (dryRun) {
274
+ // In dry_run mode, preview what would be archived
275
+ const preview = {
276
+ client_id: op.client_id,
277
+ id: op.id,
278
+ op: 'archive',
279
+ changes: [{ field: 'archived', before: entity.archived, after: true }],
280
+ validation_errors: [],
281
+ };
282
+ dryRunPreviews.push(preview);
283
+ succeeded++;
284
+ break;
285
+ }
286
+ // Compute archive path
287
+ const now = new Date();
288
+ const quarter = Math.ceil((now.getMonth() + 1) / 3);
289
+ const archivePath = `archive/${now.getFullYear()}-Q${quarter}`;
290
+ // Archive with cascade if requested
291
+ if (op.payload.cascade) {
292
+ // Archive children first
293
+ const children = await deps.getChildren(op.id);
294
+ for (const child of children) {
295
+ // Recursively get grandchildren for stories
296
+ if (child.type === 'story') {
297
+ const grandchildren = await deps.getChildren(child.id);
298
+ for (const grandchild of grandchildren) {
299
+ await deps.archiveEntity(grandchild.id, archivePath);
300
+ if (options?.add_to_canvas === false && deps.removeFromCanvas && options.canvas_source) {
301
+ await deps.removeFromCanvas(grandchild.id, options.canvas_source);
302
+ }
303
+ }
304
+ }
305
+ await deps.archiveEntity(child.id, archivePath);
306
+ if (options?.add_to_canvas === false && deps.removeFromCanvas && options.canvas_source) {
307
+ await deps.removeFromCanvas(child.id, options.canvas_source);
308
+ }
309
+ }
310
+ }
311
+ await deps.archiveEntity(op.id, archivePath);
312
+ if (options?.add_to_canvas === false && deps.removeFromCanvas && options.canvas_source) {
313
+ await deps.removeFromCanvas(op.id, options.canvas_source);
314
+ }
315
+ // Build result with optional entity data
316
+ const archiveResult = {
317
+ client_id: op.client_id,
318
+ status: 'ok',
319
+ id: op.id,
320
+ };
321
+ // Include entity data if requested (re-fetch after archive to get updated state)
322
+ if (includeEntities) {
323
+ const archivedEntity = await deps.getEntity(op.id);
324
+ if (archivedEntity) {
325
+ const entityFull = await deps.toEntityFull(archivedEntity);
326
+ archiveResult.entity = filterEntityFields(entityFull);
327
+ }
328
+ }
329
+ results.push(archiveResult);
330
+ succeeded++;
331
+ break;
332
+ }
333
+ default:
334
+ throw new Error(`Unknown operation type: ${op.op}`);
335
+ }
336
+ }
337
+ catch (error) {
338
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
339
+ if (atomic) {
340
+ // In atomic mode, fail the entire batch
341
+ throw new Error(`Batch operation failed at ${op.client_id}: ${errorMessage}`);
342
+ }
343
+ results.push({
344
+ client_id: op.client_id,
345
+ status: 'error',
346
+ error: {
347
+ code: 'OPERATION_FAILED',
348
+ message: errorMessage,
349
+ },
350
+ });
351
+ failed++;
352
+ }
353
+ }
354
+ // Build output
355
+ const output = {
356
+ results: dryRun ? [] : results,
357
+ summary: {
358
+ total: ops.length,
359
+ succeeded,
360
+ failed,
361
+ },
362
+ };
363
+ // Add dry_run specific fields
364
+ if (dryRun) {
365
+ output.dry_run = true;
366
+ output.would_update = dryRunPreviews;
367
+ }
368
+ return output;
369
+ }
370
+ //# sourceMappingURL=batch-operations-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-operations-tools.js","sourceRoot":"","sources":["../../src/tools/batch-operations-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Decision & Document Management Tools
3
+ *
4
+ * Category 5: Decision & Document Management
5
+ * - manage_documents: Consolidated tool for document/decision management
6
+ * - get_decision_history: Get decision history for a topic
7
+ * - supersede_document: Update document based on decision
8
+ * - get_document_history: Get document version history
9
+ * - check_freshness: Check if document is up-to-date
10
+ *
11
+ * DEPRECATED:
12
+ * - create_decision: Use create_entity with type: 'decision' instead
13
+ */
14
+ import type { Entity, EntityId, Decision, Document } from '../models/v2-types.js';
15
+ import type { GetDecisionHistoryInput, GetDecisionHistoryOutput, SupersedeDocumentInput, SupersedeDocumentOutput, GetDocumentHistoryInput, GetDocumentHistoryOutput, CheckDocumentFreshnessInput, CheckDocumentFreshnessOutput, ManageDocumentsInput, ManageDocumentsOutput, EntityFull, Workstream } from './tool-types.js';
16
+ /**
17
+ * Dependencies for decision and document tools.
18
+ */
19
+ export interface DecisionDocumentDependencies {
20
+ /** Create a new decision */
21
+ createDecision: (data: {
22
+ title: string;
23
+ context: string;
24
+ decision: string;
25
+ rationale: string;
26
+ workstream: Workstream;
27
+ decided_by: string;
28
+ blocks?: EntityId[];
29
+ supersedes?: EntityId;
30
+ }) => Promise<Decision>;
31
+ /** Get entity by ID */
32
+ getEntity: (id: EntityId) => Promise<Entity | null>;
33
+ /** Get all decisions */
34
+ getAllDecisions: (options?: {
35
+ workstream?: Workstream;
36
+ includeSuperseded?: boolean;
37
+ includeArchived?: boolean;
38
+ }) => Promise<Decision[]>;
39
+ /** Get all documents */
40
+ getAllDocuments: () => Promise<Document[]>;
41
+ /** Update document */
42
+ updateDocument: (id: EntityId, data: Partial<Document>) => Promise<Document>;
43
+ /** Convert entity to full representation */
44
+ toEntityFull: (entity: Entity) => Promise<EntityFull>;
45
+ /** Get current timestamp */
46
+ getCurrentTimestamp: () => string;
47
+ /** Generate next ID */
48
+ generateId: (type: 'decision' | 'document') => Promise<EntityId>;
49
+ /** Get decisions that affect a document */
50
+ getDecisionsAffectingDocument: (docId: EntityId) => Promise<Decision[]>;
51
+ /** Search content for pattern */
52
+ searchContent: (entityId: EntityId, pattern: string) => Promise<boolean>;
53
+ /** Add entity to canvas (optional) */
54
+ addToCanvas?: (entity: Entity, canvasPath: string) => Promise<boolean>;
55
+ }
56
+ /**
57
+ * Consolidated tool for document and decision management.
58
+ * Dispatches to the appropriate handler based on action.
59
+ */
60
+ export declare function manageDocuments(input: ManageDocumentsInput, deps: DecisionDocumentDependencies): Promise<ManageDocumentsOutput>;
61
+ /**
62
+ * Get decision history for a topic or workstream.
63
+ * By default includes archived decisions since most decisions are archived after being decided.
64
+ */
65
+ export declare function getDecisionHistory(input: GetDecisionHistoryInput, deps: DecisionDocumentDependencies): Promise<GetDecisionHistoryOutput>;
66
+ /**
67
+ * Update a document based on a decision, creating a new version.
68
+ */
69
+ export declare function supersedeDocument(input: SupersedeDocumentInput, deps: DecisionDocumentDependencies): Promise<SupersedeDocumentOutput>;
70
+ /**
71
+ * Get version history for a document.
72
+ */
73
+ export declare function getDocumentHistory(input: GetDocumentHistoryInput, deps: DecisionDocumentDependencies): Promise<GetDocumentHistoryOutput>;
74
+ /**
75
+ * Check if a document is up-to-date with related decisions.
76
+ */
77
+ export declare function checkDocumentFreshness(input: CheckDocumentFreshnessInput, deps: DecisionDocumentDependencies): Promise<CheckDocumentFreshnessOutput>;
78
+ //# sourceMappingURL=decision-document-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-document-tools.d.ts","sourceRoot":"","sources":["../../src/tools/decision-document-tools.ts"],"names":[],"mappings":"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"}