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.
- package/README.md +154 -182
- package/dist/index.js +207 -38
- package/dist/index.js.map +1 -1
- package/dist/integration.test.d.ts +8 -0
- package/dist/integration.test.d.ts.map +1 -0
- package/dist/integration.test.js +979 -0
- package/dist/integration.test.js.map +1 -0
- package/dist/models/types.d.ts +1 -2
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js.map +1 -1
- package/dist/models/v2-types.d.ts +460 -0
- package/dist/models/v2-types.d.ts.map +1 -0
- package/dist/models/v2-types.js +137 -0
- package/dist/models/v2-types.js.map +1 -0
- package/dist/models/v2-types.test.d.ts +5 -0
- package/dist/models/v2-types.test.d.ts.map +1 -0
- package/dist/models/v2-types.test.js +133 -0
- package/dist/models/v2-types.test.js.map +1 -0
- package/dist/parsers/canvas-parser.d.ts +1 -1
- package/dist/parsers/canvas-parser.d.ts.map +1 -1
- package/dist/parsers/canvas-parser.js +1 -1
- package/dist/parsers/canvas-parser.js.map +1 -1
- package/dist/parsers/markdown-parser.js +9 -9
- package/dist/parsers/markdown-parser.js.map +1 -1
- package/dist/services/v2/archive-manager.d.ts +96 -0
- package/dist/services/v2/archive-manager.d.ts.map +1 -0
- package/dist/services/v2/archive-manager.js +281 -0
- package/dist/services/v2/archive-manager.js.map +1 -0
- package/dist/services/v2/canvas-manager.d.ts +155 -0
- package/dist/services/v2/canvas-manager.d.ts.map +1 -0
- package/dist/services/v2/canvas-manager.js +540 -0
- package/dist/services/v2/canvas-manager.js.map +1 -0
- package/dist/services/v2/canvas-manager.test.d.ts +5 -0
- package/dist/services/v2/canvas-manager.test.d.ts.map +1 -0
- package/dist/services/v2/canvas-manager.test.js +327 -0
- package/dist/services/v2/canvas-manager.test.js.map +1 -0
- package/dist/services/v2/cascade-manager.d.ts +54 -0
- package/dist/services/v2/cascade-manager.d.ts.map +1 -0
- package/dist/services/v2/cascade-manager.js +220 -0
- package/dist/services/v2/cascade-manager.js.map +1 -0
- package/dist/services/v2/cycle-detector.d.ts +76 -0
- package/dist/services/v2/cycle-detector.d.ts.map +1 -0
- package/dist/services/v2/cycle-detector.js +183 -0
- package/dist/services/v2/cycle-detector.js.map +1 -0
- package/dist/services/v2/cycle-detector.test.d.ts +7 -0
- package/dist/services/v2/cycle-detector.test.d.ts.map +1 -0
- package/dist/services/v2/cycle-detector.test.js +125 -0
- package/dist/services/v2/cycle-detector.test.js.map +1 -0
- package/dist/services/v2/entity-parser.d.ts +54 -0
- package/dist/services/v2/entity-parser.d.ts.map +1 -0
- package/dist/services/v2/entity-parser.js +418 -0
- package/dist/services/v2/entity-parser.js.map +1 -0
- package/dist/services/v2/entity-parser.test.d.ts +5 -0
- package/dist/services/v2/entity-parser.test.d.ts.map +1 -0
- package/dist/services/v2/entity-parser.test.js +637 -0
- package/dist/services/v2/entity-parser.test.js.map +1 -0
- package/dist/services/v2/entity-serializer.d.ts +94 -0
- package/dist/services/v2/entity-serializer.d.ts.map +1 -0
- package/dist/services/v2/entity-serializer.js +583 -0
- package/dist/services/v2/entity-serializer.js.map +1 -0
- package/dist/services/v2/entity-serializer.test.d.ts +5 -0
- package/dist/services/v2/entity-serializer.test.d.ts.map +1 -0
- package/dist/services/v2/entity-serializer.test.js +241 -0
- package/dist/services/v2/entity-serializer.test.js.map +1 -0
- package/dist/services/v2/entity-validator.d.ts +65 -0
- package/dist/services/v2/entity-validator.d.ts.map +1 -0
- package/dist/services/v2/entity-validator.js +573 -0
- package/dist/services/v2/entity-validator.js.map +1 -0
- package/dist/services/v2/entity-validator.test.d.ts +5 -0
- package/dist/services/v2/entity-validator.test.d.ts.map +1 -0
- package/dist/services/v2/entity-validator.test.js +519 -0
- package/dist/services/v2/entity-validator.test.js.map +1 -0
- package/dist/services/v2/file-manager.d.ts +73 -0
- package/dist/services/v2/file-manager.d.ts.map +1 -0
- package/dist/services/v2/file-manager.js +310 -0
- package/dist/services/v2/file-manager.js.map +1 -0
- package/dist/services/v2/file-manager.test.d.ts +5 -0
- package/dist/services/v2/file-manager.test.d.ts.map +1 -0
- package/dist/services/v2/file-manager.test.js +339 -0
- package/dist/services/v2/file-manager.test.js.map +1 -0
- package/dist/services/v2/index-manager.d.ts +68 -0
- package/dist/services/v2/index-manager.d.ts.map +1 -0
- package/dist/services/v2/index-manager.js +228 -0
- package/dist/services/v2/index-manager.js.map +1 -0
- package/dist/services/v2/index-manager.test.d.ts +5 -0
- package/dist/services/v2/index-manager.test.d.ts.map +1 -0
- package/dist/services/v2/index-manager.test.js +386 -0
- package/dist/services/v2/index-manager.test.js.map +1 -0
- package/dist/services/v2/index-service.d.ts +82 -0
- package/dist/services/v2/index-service.d.ts.map +1 -0
- package/dist/services/v2/index-service.js +274 -0
- package/dist/services/v2/index-service.js.map +1 -0
- package/dist/services/v2/index-service.test.d.ts +5 -0
- package/dist/services/v2/index-service.test.d.ts.map +1 -0
- package/dist/services/v2/index-service.test.js +117 -0
- package/dist/services/v2/index-service.test.js.map +1 -0
- package/dist/services/v2/lifecycle-manager.d.ts +59 -0
- package/dist/services/v2/lifecycle-manager.d.ts.map +1 -0
- package/dist/services/v2/lifecycle-manager.js +310 -0
- package/dist/services/v2/lifecycle-manager.js.map +1 -0
- package/dist/services/v2/lifecycle-manager.test.d.ts +5 -0
- package/dist/services/v2/lifecycle-manager.test.d.ts.map +1 -0
- package/dist/services/v2/lifecycle-manager.test.js +141 -0
- package/dist/services/v2/lifecycle-manager.test.js.map +1 -0
- package/dist/services/v2/path-resolver.d.ts +64 -0
- package/dist/services/v2/path-resolver.d.ts.map +1 -0
- package/dist/services/v2/path-resolver.js +174 -0
- package/dist/services/v2/path-resolver.js.map +1 -0
- package/dist/services/v2/progress-computer.d.ts +46 -0
- package/dist/services/v2/progress-computer.d.ts.map +1 -0
- package/dist/services/v2/progress-computer.js +200 -0
- package/dist/services/v2/progress-computer.js.map +1 -0
- package/dist/services/v2/search-service.d.ts +68 -0
- package/dist/services/v2/search-service.d.ts.map +1 -0
- package/dist/services/v2/search-service.js +194 -0
- package/dist/services/v2/search-service.js.map +1 -0
- package/dist/services/v2/transitive-dependency-remover.d.ts +54 -0
- package/dist/services/v2/transitive-dependency-remover.d.ts.map +1 -0
- package/dist/services/v2/transitive-dependency-remover.js +156 -0
- package/dist/services/v2/transitive-dependency-remover.js.map +1 -0
- package/dist/services/v2/transitive-dependency-remover.test.d.ts +7 -0
- package/dist/services/v2/transitive-dependency-remover.test.d.ts.map +1 -0
- package/dist/services/v2/transitive-dependency-remover.test.js +119 -0
- package/dist/services/v2/transitive-dependency-remover.test.js.map +1 -0
- package/dist/services/v2/v2-runtime.d.ts +374 -0
- package/dist/services/v2/v2-runtime.d.ts.map +1 -0
- package/dist/services/v2/v2-runtime.js +1908 -0
- package/dist/services/v2/v2-runtime.js.map +1 -0
- package/dist/services/v2/v2-runtime.test.d.ts +5 -0
- package/dist/services/v2/v2-runtime.test.d.ts.map +1 -0
- package/dist/services/v2/v2-runtime.test.js +658 -0
- package/dist/services/v2/v2-runtime.test.js.map +1 -0
- package/dist/services/v2/workstream-normalizer.d.ts +59 -0
- package/dist/services/v2/workstream-normalizer.d.ts.map +1 -0
- package/dist/services/v2/workstream-normalizer.js +137 -0
- package/dist/services/v2/workstream-normalizer.js.map +1 -0
- package/dist/services/v2/workstream-normalizer.test.d.ts +7 -0
- package/dist/services/v2/workstream-normalizer.test.d.ts.map +1 -0
- package/dist/services/v2/workstream-normalizer.test.js +130 -0
- package/dist/services/v2/workstream-normalizer.test.js.map +1 -0
- package/dist/test-runner.d.ts +4 -1
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +44 -249
- package/dist/test-runner.js.map +1 -1
- package/dist/tools/batch-operations-tools.d.ts +54 -0
- package/dist/tools/batch-operations-tools.d.ts.map +1 -0
- package/dist/tools/batch-operations-tools.js +370 -0
- package/dist/tools/batch-operations-tools.js.map +1 -0
- package/dist/tools/decision-document-tools.d.ts +78 -0
- package/dist/tools/decision-document-tools.d.ts.map +1 -0
- package/dist/tools/decision-document-tools.js +260 -0
- package/dist/tools/decision-document-tools.js.map +1 -0
- package/dist/tools/entity-management-tools.d.ts +79 -0
- package/dist/tools/entity-management-tools.d.ts.map +1 -0
- package/dist/tools/entity-management-tools.js +851 -0
- package/dist/tools/entity-management-tools.js.map +1 -0
- package/dist/tools/entity-management-tools.test.d.ts +5 -0
- package/dist/tools/entity-management-tools.test.d.ts.map +1 -0
- package/dist/tools/entity-management-tools.test.js +530 -0
- package/dist/tools/entity-management-tools.test.js.map +1 -0
- package/dist/tools/index.d.ts +15 -271
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +510 -47
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/index.test.d.ts +8 -0
- package/dist/tools/index.test.d.ts.map +1 -0
- package/dist/tools/index.test.js +429 -0
- package/dist/tools/index.test.js.map +1 -0
- package/dist/tools/project-understanding-tools.d.ts +75 -0
- package/dist/tools/project-understanding-tools.d.ts.map +1 -0
- package/dist/tools/project-understanding-tools.js +751 -0
- package/dist/tools/project-understanding-tools.js.map +1 -0
- package/dist/tools/search-navigation-tools.d.ts +77 -0
- package/dist/tools/search-navigation-tools.d.ts.map +1 -0
- package/dist/tools/search-navigation-tools.js +379 -0
- package/dist/tools/search-navigation-tools.js.map +1 -0
- package/dist/tools/tool-types.d.ts +703 -0
- package/dist/tools/tool-types.d.ts.map +1 -0
- package/dist/tools/tool-types.js +7 -0
- package/dist/tools/tool-types.js.map +1 -0
- package/dist/utils/config.d.ts +0 -4
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +2 -19
- package/dist/utils/config.js.map +1 -1
- package/package.json +16 -1
- package/dist/services/accomplishment-service.d.ts +0 -33
- package/dist/services/accomplishment-service.d.ts.map +0 -1
- package/dist/services/accomplishment-service.js +0 -293
- package/dist/services/accomplishment-service.js.map +0 -1
- package/dist/services/canvas-service.d.ts +0 -96
- package/dist/services/canvas-service.d.ts.map +0 -1
- package/dist/services/canvas-service.js +0 -231
- package/dist/services/canvas-service.js.map +0 -1
- package/dist/services/context-doc-service.d.ts +0 -70
- package/dist/services/context-doc-service.d.ts.map +0 -1
- package/dist/services/context-doc-service.js +0 -229
- package/dist/services/context-doc-service.js.map +0 -1
- package/dist/services/dependency-service.d.ts +0 -22
- package/dist/services/dependency-service.d.ts.map +0 -1
- package/dist/services/dependency-service.js +0 -99
- package/dist/services/dependency-service.js.map +0 -1
- package/dist/services/status-indicator-service.d.ts +0 -40
- package/dist/services/status-indicator-service.d.ts.map +0 -1
- package/dist/services/status-indicator-service.js +0 -173
- package/dist/services/status-indicator-service.js.map +0 -1
- package/dist/services/task-service.d.ts +0 -32
- package/dist/services/task-service.d.ts.map +0 -1
- package/dist/services/task-service.js +0 -152
- package/dist/services/task-service.js.map +0 -1
- package/dist/test-real-vault.d.ts +0 -6
- package/dist/test-real-vault.d.ts.map +0 -1
- package/dist/test-real-vault.js +0 -30
- package/dist/test-real-vault.js.map +0 -1
- package/dist/tools/batch-operations.d.ts +0 -246
- package/dist/tools/batch-operations.d.ts.map +0 -1
- package/dist/tools/batch-operations.js +0 -235
- package/dist/tools/batch-operations.js.map +0 -1
- package/dist/tools/get-accomplishment.d.ts +0 -26
- package/dist/tools/get-accomplishment.d.ts.map +0 -1
- package/dist/tools/get-accomplishment.js +0 -53
- package/dist/tools/get-accomplishment.js.map +0 -1
- package/dist/tools/get-accomplishments-graph.d.ts +0 -26
- package/dist/tools/get-accomplishments-graph.d.ts.map +0 -1
- package/dist/tools/get-accomplishments-graph.js +0 -137
- package/dist/tools/get-accomplishments-graph.js.map +0 -1
- package/dist/tools/get-blocked-items.d.ts +0 -15
- package/dist/tools/get-blocked-items.d.ts.map +0 -1
- package/dist/tools/get-blocked-items.js +0 -73
- package/dist/tools/get-blocked-items.js.map +0 -1
- package/dist/tools/get-current-work.d.ts +0 -15
- package/dist/tools/get-current-work.d.ts.map +0 -1
- package/dist/tools/get-current-work.js +0 -68
- package/dist/tools/get-current-work.js.map +0 -1
- package/dist/tools/get-project-status.d.ts +0 -26
- package/dist/tools/get-project-status.d.ts.map +0 -1
- package/dist/tools/get-project-status.js +0 -98
- package/dist/tools/get-project-status.js.map +0 -1
- package/dist/tools/get-ready-to-start.d.ts +0 -15
- package/dist/tools/get-ready-to-start.d.ts.map +0 -1
- package/dist/tools/get-ready-to-start.js +0 -47
- package/dist/tools/get-ready-to-start.js.map +0 -1
- package/dist/tools/list-accomplishments.d.ts +0 -34
- package/dist/tools/list-accomplishments.d.ts.map +0 -1
- package/dist/tools/list-accomplishments.js +0 -34
- package/dist/tools/list-accomplishments.js.map +0 -1
- package/dist/tools/manage-accomplishment.d.ts +0 -147
- package/dist/tools/manage-accomplishment.d.ts.map +0 -1
- package/dist/tools/manage-accomplishment.js +0 -153
- package/dist/tools/manage-accomplishment.js.map +0 -1
- package/dist/tools/manage-dependency.d.ts +0 -41
- package/dist/tools/manage-dependency.d.ts.map +0 -1
- package/dist/tools/manage-dependency.js +0 -66
- package/dist/tools/manage-dependency.js.map +0 -1
- package/dist/tools/manage-task.d.ts +0 -119
- package/dist/tools/manage-task.d.ts.map +0 -1
- package/dist/tools/manage-task.js +0 -126
- package/dist/tools/manage-task.js.map +0 -1
- package/dist/tools/reconcile-canvas.d.ts +0 -33
- package/dist/tools/reconcile-canvas.d.ts.map +0 -1
- package/dist/tools/reconcile-canvas.js +0 -41
- package/dist/tools/reconcile-canvas.js.map +0 -1
- package/dist/tools/set-work-focus.d.ts +0 -48
- package/dist/tools/set-work-focus.d.ts.map +0 -1
- package/dist/tools/set-work-focus.js +0 -78
- package/dist/tools/set-work-focus.js.map +0 -1
- package/dist/tools/sync-dependencies.d.ts +0 -33
- package/dist/tools/sync-dependencies.d.ts.map +0 -1
- package/dist/tools/sync-dependencies.js +0 -144
- package/dist/tools/sync-dependencies.js.map +0 -1
package/dist/test-runner.js
CHANGED
|
@@ -1,262 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Simple test runner for
|
|
2
|
+
* Simple test runner for utility tools
|
|
3
3
|
* Run with: npx ts-node src/test-runner.ts
|
|
4
|
+
*
|
|
5
|
+
* This test runner only tests utility tools (read_docs, update_doc, list_workspaces, list_files).
|
|
6
|
+
* Entity management is done via V2 tools (create_entity, search_entities, etc.).
|
|
4
7
|
*/
|
|
5
8
|
import { getConfig } from './utils/config.js';
|
|
6
|
-
import {
|
|
7
|
-
import { loadCanvas } from './services/canvas-service.js';
|
|
8
|
-
import { findNodeByFile } from './parsers/canvas-parser.js';
|
|
9
|
-
import { findStatusIndicator } from './services/status-indicator-service.js';
|
|
9
|
+
import { handleReadDocs, handleListWorkspaces, handleListFiles, } from './tools/index.js';
|
|
10
10
|
// Set environment variables for testing
|
|
11
|
+
// VAULT_PATH should point to the project folder containing milestones/, stories/, etc.
|
|
11
12
|
process.env.VAULT_PATH = process.cwd() + '/test-vault';
|
|
12
|
-
process.env.
|
|
13
|
-
process.env.DEFAULT_CANVAS = 'projects/main.canvas';
|
|
13
|
+
process.env.DEFAULT_CANVAS = 'main.canvas';
|
|
14
14
|
const config = getConfig();
|
|
15
15
|
async function runTests() {
|
|
16
|
-
console.log('=== Obsidian
|
|
16
|
+
console.log('=== Obsidian MCP Server Utility Tools Tests ===\n');
|
|
17
17
|
console.log('Config:', config, '\n');
|
|
18
18
|
try {
|
|
19
|
-
// Test 1:
|
|
20
|
-
console.log('--- Test 1:
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const dep1 = await handleManageDependency(config, {
|
|
56
|
-
operation: 'add',
|
|
57
|
-
blocker_id: 'ACC-001',
|
|
58
|
-
blocked_id: 'ACC-002',
|
|
59
|
-
});
|
|
60
|
-
console.log('Added dependency:', JSON.stringify(dep1, null, 2));
|
|
61
|
-
// ACC-003 depends on ACC-002
|
|
62
|
-
const dep2 = await handleManageDependency(config, {
|
|
63
|
-
operation: 'add',
|
|
64
|
-
blocker_id: 'ACC-002',
|
|
65
|
-
blocked_id: 'ACC-003',
|
|
66
|
-
});
|
|
67
|
-
console.log('Added dependency:', JSON.stringify(dep2, null, 2));
|
|
68
|
-
// Test 2b: Create accomplishment WITH depends_on at creation time
|
|
69
|
-
console.log('\n--- Test 2b: Create Accomplishment with depends_on (edge creation test) ---');
|
|
70
|
-
const acc4 = await handleManageAccomplishment(config, {
|
|
71
|
-
operation: 'create',
|
|
72
|
-
data: {
|
|
73
|
-
title: 'Deploy to Production',
|
|
74
|
-
effort: 'Engineering',
|
|
75
|
-
priority: 'High',
|
|
76
|
-
outcome: 'Application is deployed and running in production',
|
|
77
|
-
depends_on: ['ACC-002', 'ACC-003'], // Should create edges at creation time
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
console.log('Created ACC4 with depends_on:', JSON.stringify(acc4, null, 2));
|
|
81
|
-
// Verify edges were created in canvas
|
|
82
|
-
console.log('\n--- Verifying canvas edges for ACC-004 ---');
|
|
83
|
-
const canvas = await loadCanvas(config);
|
|
84
|
-
// Find nodes
|
|
85
|
-
const acc2Node = findNodeByFile(canvas, 'accomplishments/Implement Core Features.md');
|
|
86
|
-
const acc3Node = findNodeByFile(canvas, 'accomplishments/Write Documentation.md');
|
|
87
|
-
const acc4Node = findNodeByFile(canvas, 'accomplishments/Deploy to Production.md');
|
|
88
|
-
console.log('ACC-002 node:', acc2Node ? `found (id: ${acc2Node.id})` : 'NOT FOUND');
|
|
89
|
-
console.log('ACC-003 node:', acc3Node ? `found (id: ${acc3Node.id})` : 'NOT FOUND');
|
|
90
|
-
console.log('ACC-004 node:', acc4Node ? `found (id: ${acc4Node.id})` : 'NOT FOUND');
|
|
91
|
-
// Check for edges
|
|
92
|
-
const edgeFromAcc2ToAcc4 = canvas.edges.find(e => e.fromNode === acc2Node?.id && e.toNode === acc4Node?.id);
|
|
93
|
-
const edgeFromAcc3ToAcc4 = canvas.edges.find(e => e.fromNode === acc3Node?.id && e.toNode === acc4Node?.id);
|
|
94
|
-
console.log('Edge ACC-002 -> ACC-004:', edgeFromAcc2ToAcc4 ? '✅ EXISTS' : '❌ MISSING');
|
|
95
|
-
console.log('Edge ACC-003 -> ACC-004:', edgeFromAcc3ToAcc4 ? '✅ EXISTS' : '❌ MISSING');
|
|
96
|
-
if (!edgeFromAcc2ToAcc4 || !edgeFromAcc3ToAcc4) {
|
|
97
|
-
throw new Error('FAILED: Edges were not created when passing depends_on at creation time!');
|
|
98
|
-
}
|
|
99
|
-
console.log('\n✅ SUCCESS: Edges are correctly created when passing depends_on at creation time!');
|
|
100
|
-
// Test 3: Add tasks
|
|
101
|
-
console.log('\n--- Test 3: Add Tasks ---');
|
|
102
|
-
const task1 = await handleManageTask(config, {
|
|
103
|
-
operation: 'add',
|
|
104
|
-
accomplishment_id: 'ACC-001',
|
|
105
|
-
data: {
|
|
106
|
-
name: 'Install Node.js',
|
|
107
|
-
goal: 'Have Node.js v20+ installed',
|
|
108
|
-
description: 'Download and install Node.js LTS',
|
|
109
|
-
estimate: 0.5,
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
console.log('Added task:', JSON.stringify(task1, null, 2));
|
|
113
|
-
const task2 = await handleManageTask(config, {
|
|
114
|
-
operation: 'add',
|
|
115
|
-
accomplishment_id: 'ACC-001',
|
|
116
|
-
data: {
|
|
117
|
-
name: 'Configure IDE',
|
|
118
|
-
goal: 'IDE is set up with extensions',
|
|
119
|
-
description: 'Install VS Code and required extensions',
|
|
120
|
-
estimate: 1,
|
|
121
|
-
},
|
|
122
|
-
});
|
|
123
|
-
console.log('Added task:', JSON.stringify(task2, null, 2));
|
|
124
|
-
// Test 4: Set work focus
|
|
125
|
-
console.log('\n--- Test 4: Set Work Focus ---');
|
|
126
|
-
const focus = await handleSetWorkFocus(config, {
|
|
127
|
-
accomplishment_id: 'ACC-001',
|
|
128
|
-
in_progress: true,
|
|
129
|
-
task_id: 'ACC-001:Task 1:Install Node.js',
|
|
130
|
-
task_status: 'InProgress',
|
|
131
|
-
});
|
|
132
|
-
console.log('Set focus:', JSON.stringify(focus, null, 2));
|
|
133
|
-
// Test 5: Get accomplishment details
|
|
134
|
-
console.log('\n--- Test 5: Get Accomplishment Details ---');
|
|
135
|
-
const details = await handleGetAccomplishment(config, { id: 'ACC-001' });
|
|
136
|
-
console.log('ACC-001 details:', JSON.stringify(details, null, 2));
|
|
137
|
-
// Test 6: List accomplishments
|
|
138
|
-
console.log('\n--- Test 6: List Accomplishments ---');
|
|
139
|
-
const list = await handleListAccomplishments(config, {});
|
|
140
|
-
console.log('All accomplishments:', JSON.stringify(list, null, 2));
|
|
141
|
-
// Test 7: Get current work
|
|
142
|
-
console.log('\n--- Test 7: Get Current Work ---');
|
|
143
|
-
const currentWork = await handleGetCurrentWork(config, {});
|
|
144
|
-
console.log('Current work:', JSON.stringify(currentWork, null, 2));
|
|
145
|
-
// Test 8: Get blocked items
|
|
146
|
-
console.log('\n--- Test 8: Get Blocked Items ---');
|
|
147
|
-
const blocked = await handleGetBlockedItems(config, {});
|
|
148
|
-
console.log('Blocked items:', JSON.stringify(blocked, null, 2));
|
|
149
|
-
// Test 9: Get ready to start
|
|
150
|
-
console.log('\n--- Test 9: Get Ready to Start ---');
|
|
151
|
-
const ready = await handleGetReadyToStart(config, {});
|
|
152
|
-
console.log('Ready to start:', JSON.stringify(ready, null, 2));
|
|
153
|
-
// Test 10: Get project status
|
|
154
|
-
console.log('\n--- Test 10: Get Project Status ---');
|
|
155
|
-
const status = await handleGetProjectStatus(config, {});
|
|
156
|
-
console.log('Project status:', JSON.stringify(status, null, 2));
|
|
157
|
-
// Test 11: Get accomplishments graph (with orphan detection)
|
|
158
|
-
console.log('\n--- Test 11: Get Accomplishments Graph (with orphan detection) ---');
|
|
159
|
-
// Create orphaned accomplishments (not connected to main graph)
|
|
160
|
-
const orphan1 = await handleManageAccomplishment(config, {
|
|
161
|
-
operation: 'create',
|
|
162
|
-
data: {
|
|
163
|
-
title: 'Orphan Task A',
|
|
164
|
-
effort: 'Research',
|
|
165
|
-
priority: 'Low',
|
|
166
|
-
outcome: 'Standalone research task',
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
console.log('Created orphan1:', JSON.stringify(orphan1, null, 2));
|
|
170
|
-
const orphan2 = await handleManageAccomplishment(config, {
|
|
171
|
-
operation: 'create',
|
|
172
|
-
data: {
|
|
173
|
-
title: 'Orphan Task B',
|
|
174
|
-
effort: 'Research',
|
|
175
|
-
priority: 'Low',
|
|
176
|
-
outcome: 'Another standalone task',
|
|
177
|
-
},
|
|
178
|
-
});
|
|
179
|
-
console.log('Created orphan2:', JSON.stringify(orphan2, null, 2));
|
|
180
|
-
// Create a small connected orphan graph (2 nodes connected to each other but not to main)
|
|
181
|
-
const orphan3 = await handleManageAccomplishment(config, {
|
|
182
|
-
operation: 'create',
|
|
183
|
-
data: {
|
|
184
|
-
title: 'Mini Graph Node 1',
|
|
185
|
-
effort: 'Infra',
|
|
186
|
-
priority: 'Medium',
|
|
187
|
-
outcome: 'Part of mini orphan graph',
|
|
188
|
-
},
|
|
189
|
-
});
|
|
190
|
-
console.log('Created orphan3:', JSON.stringify(orphan3, null, 2));
|
|
191
|
-
await handleManageDependency(config, {
|
|
192
|
-
operation: 'add',
|
|
193
|
-
blocker_id: 'ACC-007',
|
|
194
|
-
blocked_id: 'ACC-006',
|
|
195
|
-
});
|
|
196
|
-
const graph = await handleGetAccomplishmentsGraph(config, {});
|
|
197
|
-
console.log('Accomplishments graph:', JSON.stringify(graph, null, 2));
|
|
198
|
-
// Verify orphan detection
|
|
199
|
-
const graphResult = graph;
|
|
200
|
-
console.log('\n--- Orphan Detection Verification ---');
|
|
201
|
-
console.log(`Main graph nodes: ${graphResult.main_graph.node_count}`);
|
|
202
|
-
console.log(`Orphaned graph count: ${graphResult.orphaned_graph_count}`);
|
|
203
|
-
if (graphResult.orphaned_graph_count === 2) {
|
|
204
|
-
console.log('✅ SUCCESS: Correctly detected 2 orphaned graphs (1 single node + 1 two-node graph)');
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
console.log(`❌ UNEXPECTED: Expected 2 orphaned graphs, got ${graphResult.orphaned_graph_count}`);
|
|
208
|
-
}
|
|
209
|
-
// Test 11: Batch Operations
|
|
210
|
-
console.log('\n=== Test 11: Batch Operations ===');
|
|
211
|
-
const batchResult = await handleBatchOperations(config, {
|
|
212
|
-
accomplishments: [
|
|
213
|
-
{ title: 'Batch Test 1', effort: 'Engineering', priority: 'High' },
|
|
214
|
-
{ title: 'Batch Test 2', effort: 'Engineering', depends_on: ['$0'] },
|
|
215
|
-
{ title: 'Batch Test 3', effort: 'Engineering', depends_on: ['$1'] },
|
|
216
|
-
],
|
|
217
|
-
tasks: [
|
|
218
|
-
{ accomplishment_ref: '$0', name: 'Task A', goal: 'Goal A' },
|
|
219
|
-
{ accomplishment_ref: '$0', name: 'Task B', goal: 'Goal B' },
|
|
220
|
-
{ accomplishment_ref: '$1', name: 'Task C', goal: 'Goal C' },
|
|
221
|
-
],
|
|
222
|
-
});
|
|
223
|
-
console.log('Batch result:', JSON.stringify(batchResult, null, 2));
|
|
224
|
-
if (batchResult.success &&
|
|
225
|
-
batchResult.created_accomplishments.length === 3 &&
|
|
226
|
-
batchResult.created_tasks.length === 3 &&
|
|
227
|
-
batchResult.created_dependencies.length === 2) {
|
|
228
|
-
console.log('✅ SUCCESS: Batch operations created 3 accomplishments, 3 tasks, 2 dependencies');
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
console.log('❌ UNEXPECTED: Batch operations did not create expected items');
|
|
232
|
-
}
|
|
233
|
-
// Test 12: Status Indicators
|
|
234
|
-
console.log('\n=== Test 12: Status Indicators ===');
|
|
235
|
-
// Check that status indicators were created for batch operations
|
|
236
|
-
const canvasAfterBatch = await loadCanvas(config);
|
|
237
|
-
const batchAcc1Id = batchResult.created_accomplishments[0].id;
|
|
238
|
-
const indicator1 = findStatusIndicator(canvasAfterBatch, batchAcc1Id);
|
|
239
|
-
if (indicator1 && indicator1.text === '⚪') {
|
|
240
|
-
console.log(`✅ SUCCESS: Status indicator created for ${batchAcc1Id}: ${indicator1.text}`);
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
console.log(`❌ UNEXPECTED: Status indicator not found or wrong emoji for ${batchAcc1Id}`);
|
|
244
|
-
}
|
|
245
|
-
// Test reconcile_canvas
|
|
246
|
-
console.log('\n=== Test 13: Reconcile Canvas ===');
|
|
247
|
-
const reconcileResult = await handleReconcileCanvas(config, {});
|
|
248
|
-
console.log('Reconcile result:', JSON.stringify(reconcileResult, null, 2));
|
|
249
|
-
if (reconcileResult.success) {
|
|
250
|
-
console.log(`✅ SUCCESS: Reconciled canvas - ${reconcileResult.created} created, ${reconcileResult.updated} updated, ${reconcileResult.removed} removed`);
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
console.log('❌ UNEXPECTED: Reconcile failed');
|
|
254
|
-
}
|
|
255
|
-
// Verify all accomplishments have indicators
|
|
256
|
-
const canvasAfterReconcile = await loadCanvas(config);
|
|
257
|
-
const statusNodes = canvasAfterReconcile.nodes.filter(n => n.id.startsWith('status-'));
|
|
258
|
-
console.log(`Status indicator nodes on canvas: ${statusNodes.length}`);
|
|
259
|
-
console.log('\n=== All Tests Completed Successfully ===');
|
|
19
|
+
// Test 1: List Workspaces
|
|
20
|
+
console.log('--- Test 1: List Workspaces ---');
|
|
21
|
+
const workspaces = await handleListWorkspaces(config, {});
|
|
22
|
+
console.log('Workspaces:', JSON.stringify(workspaces, null, 2));
|
|
23
|
+
// Test 2: List Files
|
|
24
|
+
console.log('\n--- Test 2: List Files ---');
|
|
25
|
+
try {
|
|
26
|
+
// Use first workspace from list if available
|
|
27
|
+
const workspaceList = workspaces;
|
|
28
|
+
if (workspaceList.workspaces && workspaceList.workspaces.length > 0) {
|
|
29
|
+
const files = await handleListFiles(config, { workspace: workspaceList.workspaces[0].name });
|
|
30
|
+
console.log('Files:', JSON.stringify(files, null, 2));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.log('No workspaces available to list files');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
console.log('List files skipped:', e.message);
|
|
38
|
+
}
|
|
39
|
+
// Test 3: Read Docs
|
|
40
|
+
console.log('\n--- Test 3: Read Docs ---');
|
|
41
|
+
try {
|
|
42
|
+
const workspaceList = workspaces;
|
|
43
|
+
if (workspaceList.workspaces && workspaceList.workspaces.length > 0) {
|
|
44
|
+
const docs = await handleReadDocs(config, { workspace: workspaceList.workspaces[0].name, doc_name: 'README.md' });
|
|
45
|
+
console.log('Docs:', JSON.stringify(docs, null, 2));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log('No workspaces available to read docs');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
console.log('Read docs skipped (file may not exist):', e.message);
|
|
53
|
+
}
|
|
54
|
+
console.log('\n=== All Utility Tool Tests Completed ===');
|
|
260
55
|
}
|
|
261
56
|
catch (error) {
|
|
262
57
|
console.error('Test failed:', error);
|
package/dist/test-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
import type { Entity, EntityId, EntityType } from '../models/v2-types.js';
|
|
11
|
+
import type { BatchUpdateInput, BatchUpdateOutput, EntityStatus, EntityFull } from './tool-types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Dependencies for batch operations tools.
|
|
14
|
+
* Injected at runtime to allow for testing and flexibility.
|
|
15
|
+
*/
|
|
16
|
+
export interface BatchOperationsDependencies {
|
|
17
|
+
/** Create a new entity */
|
|
18
|
+
createEntity: (type: EntityType, data: Record<string, unknown>) => Promise<Entity>;
|
|
19
|
+
/** Get entity by ID */
|
|
20
|
+
getEntity: (id: EntityId) => Promise<Entity | null>;
|
|
21
|
+
/** Check if entity exists */
|
|
22
|
+
entityExists: (id: EntityId) => boolean;
|
|
23
|
+
/** Get entity type from ID */
|
|
24
|
+
getEntityType: (id: EntityId) => EntityType | null;
|
|
25
|
+
/** Update entity status */
|
|
26
|
+
updateEntityStatus: (id: EntityId, status: EntityStatus) => Promise<void>;
|
|
27
|
+
/** Write entity to disk */
|
|
28
|
+
writeEntity: (entity: Entity) => Promise<void>;
|
|
29
|
+
/** Archive entity */
|
|
30
|
+
archiveEntity: (id: EntityId, archivePath: string) => Promise<void>;
|
|
31
|
+
/** Get children of an entity */
|
|
32
|
+
getChildren: (id: EntityId) => Promise<Entity[]>;
|
|
33
|
+
/** Validate status transition */
|
|
34
|
+
validateStatusTransition: (entity: Entity, newStatus: EntityStatus) => {
|
|
35
|
+
valid: boolean;
|
|
36
|
+
reason?: string;
|
|
37
|
+
};
|
|
38
|
+
/** Compute cascade effects */
|
|
39
|
+
computeCascadeEffects: (entity: Entity, newStatus: EntityStatus) => Promise<EntityId[]>;
|
|
40
|
+
/** Get current timestamp */
|
|
41
|
+
getCurrentTimestamp: () => string;
|
|
42
|
+
/** Add node to canvas */
|
|
43
|
+
addToCanvas?: (entity: Entity, canvasPath: string) => Promise<boolean>;
|
|
44
|
+
/** Remove node from canvas */
|
|
45
|
+
removeFromCanvas?: (id: EntityId, canvasPath: string) => Promise<boolean>;
|
|
46
|
+
/** Convert entity to full representation */
|
|
47
|
+
toEntityFull: (entity: Entity) => Promise<EntityFull>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Unified batch operation with client_id support for idempotency and cross-referencing.
|
|
51
|
+
* Supports create, update, and archive operations in a single call.
|
|
52
|
+
*/
|
|
53
|
+
export declare function batchUpdate(input: BatchUpdateInput, deps: BatchOperationsDependencies): Promise<BatchUpdateOutput>;
|
|
54
|
+
//# sourceMappingURL=batch-operations-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-operations-tools.d.ts","sourceRoot":"","sources":["../../src/tools/batch-operations-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EACR,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,YAAY,EACZ,UAAU,EAIX,MAAM,iBAAiB,CAAC;AAQzB;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,0BAA0B;IAC1B,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnF,uBAAuB;IACvB,SAAS,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,YAAY,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC;IAExC,8BAA8B;IAC9B,aAAa,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,UAAU,GAAG,IAAI,CAAC;IAEnD,2BAA2B;IAC3B,kBAAkB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E,2BAA2B;IAC3B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,qBAAqB;IACrB,aAAa,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE,gCAAgC;IAChC,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjD,iCAAiC;IACjC,wBAAwB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,KAAK;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3G,8BAA8B;IAC9B,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExF,4BAA4B;IAC5B,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAElC,yBAAyB;IACzB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1E,4CAA4C;IAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACvD;AAUD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAkZ5B"}
|