obsidian-accomplishments-mcp 0.1.10 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -331
- 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 -296
- 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 -42
- package/dist/tools/get-accomplishment.d.ts.map +0 -1
- package/dist/tools/get-accomplishment.js +0 -93
- 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 -42
- package/dist/tools/list-accomplishments.d.ts.map +0 -1
- package/dist/tools/list-accomplishments.js +0 -40
- 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
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import { NotFoundError, } from '../models/types.js';
|
|
2
|
-
import { parseCanvas, serializeCanvas, findNodeByFile } from '../parsers/canvas-parser.js';
|
|
3
|
-
import { readFile, writeFileAtomic, fileExists } from '../utils/file-utils.js';
|
|
4
|
-
import { getCanvasPath } from '../utils/config.js';
|
|
5
|
-
import { generateId } from '../utils/file-utils.js';
|
|
6
|
-
/**
|
|
7
|
-
* Apply multiple operations to canvas atomically with merge strategy.
|
|
8
|
-
*
|
|
9
|
-
* Flow:
|
|
10
|
-
* 1. Read current canvas (captures Obsidian's latest state)
|
|
11
|
-
* 2. Apply our operations in memory (our changes take precedence on conflicts)
|
|
12
|
-
* 3. Write to temp file
|
|
13
|
-
* 4. Atomic rename to canvas file
|
|
14
|
-
* 5. Trigger Obsidian reload
|
|
15
|
-
*
|
|
16
|
-
* This minimizes race conditions with Obsidian and preserves user changes
|
|
17
|
-
* that don't conflict with our operations.
|
|
18
|
-
*/
|
|
19
|
-
export async function applyCanvasOperations(config, operations, canvasSource) {
|
|
20
|
-
if (operations.length === 0)
|
|
21
|
-
return;
|
|
22
|
-
const canvasPath = getCanvasPath(config, canvasSource);
|
|
23
|
-
// Step 1: Read current canvas (captures any user changes)
|
|
24
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
25
|
-
// Step 2: Apply our operations (our changes win on conflicts)
|
|
26
|
-
for (const op of operations) {
|
|
27
|
-
switch (op.type) {
|
|
28
|
-
case 'add_node': {
|
|
29
|
-
// Check if node with same file already exists
|
|
30
|
-
const existing = findNodeByFile(canvas, op.node.file);
|
|
31
|
-
if (existing) {
|
|
32
|
-
// Update to our values (our changes win)
|
|
33
|
-
Object.assign(existing, op.node);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
canvas.nodes.push(op.node);
|
|
37
|
-
}
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
case 'remove_node': {
|
|
41
|
-
const node = findNodeByFile(canvas, op.filePath);
|
|
42
|
-
if (node) {
|
|
43
|
-
canvas.nodes = canvas.nodes.filter(n => n.id !== node.id);
|
|
44
|
-
canvas.edges = canvas.edges.filter(e => e.fromNode !== node.id && e.toNode !== node.id);
|
|
45
|
-
}
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
case 'update_position': {
|
|
49
|
-
const node = findNodeByFile(canvas, op.filePath);
|
|
50
|
-
if (node) {
|
|
51
|
-
node.x = op.position.x;
|
|
52
|
-
node.y = op.position.y;
|
|
53
|
-
}
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
case 'add_edge': {
|
|
57
|
-
const fromNode = findNodeByFile(canvas, op.fromFilePath);
|
|
58
|
-
const toNode = findNodeByFile(canvas, op.toFilePath);
|
|
59
|
-
if (fromNode && toNode) {
|
|
60
|
-
// Only add if not already exists
|
|
61
|
-
const exists = canvas.edges.some(e => e.fromNode === fromNode.id && e.toNode === toNode.id);
|
|
62
|
-
if (!exists) {
|
|
63
|
-
canvas.edges.push({
|
|
64
|
-
id: generateId(),
|
|
65
|
-
fromNode: fromNode.id,
|
|
66
|
-
toNode: toNode.id,
|
|
67
|
-
fromSide: 'right',
|
|
68
|
-
toSide: 'left',
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
case 'remove_edge': {
|
|
75
|
-
const fromNode = findNodeByFile(canvas, op.fromFilePath);
|
|
76
|
-
const toNode = findNodeByFile(canvas, op.toFilePath);
|
|
77
|
-
if (fromNode && toNode) {
|
|
78
|
-
canvas.edges = canvas.edges.filter(e => !(e.fromNode === fromNode.id && e.toNode === toNode.id));
|
|
79
|
-
}
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Steps 3-4: Write to temp file and atomic rename (handled by writeFileAtomic)
|
|
85
|
-
const content = serializeCanvas(canvas);
|
|
86
|
-
await writeFileAtomic(canvasPath, content);
|
|
87
|
-
// Note: Obsidian auto-detects file changes, no need to trigger reload
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Load a canvas file
|
|
91
|
-
*/
|
|
92
|
-
export async function loadCanvas(config, canvasSource) {
|
|
93
|
-
const canvasPath = getCanvasPath(config, canvasSource);
|
|
94
|
-
if (!(await fileExists(canvasPath))) {
|
|
95
|
-
throw new NotFoundError(`Canvas file not found: ${canvasPath}`);
|
|
96
|
-
}
|
|
97
|
-
const content = await readFile(canvasPath);
|
|
98
|
-
return parseCanvas(content);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Save a canvas file
|
|
102
|
-
*/
|
|
103
|
-
export async function saveCanvas(config, canvas, canvasSource) {
|
|
104
|
-
const canvasPath = getCanvasPath(config, canvasSource);
|
|
105
|
-
const content = serializeCanvas(canvas);
|
|
106
|
-
await writeFileAtomic(canvasPath, content);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Get all accomplishment IDs from canvas by reading file nodes
|
|
110
|
-
*/
|
|
111
|
-
export async function getAllAccomplishmentIds(config, canvasSource) {
|
|
112
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
113
|
-
const ids = [];
|
|
114
|
-
// Get all file nodes that are in the accomplishments folder
|
|
115
|
-
for (const node of canvas.nodes) {
|
|
116
|
-
if (node.type === 'file' && node.file?.startsWith(config.accomplishmentsFolder)) {
|
|
117
|
-
// Read the file to get the ID from frontmatter
|
|
118
|
-
try {
|
|
119
|
-
const filePath = `${config.vaultPath}/${node.file}`;
|
|
120
|
-
const content = await readFile(filePath);
|
|
121
|
-
const idMatch = content.match(/^id:\s*(.+)$/m);
|
|
122
|
-
if (idMatch) {
|
|
123
|
-
ids.push(idMatch[1].trim());
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
// File might not exist or be readable
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return ids;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Generate next accomplishment ID
|
|
135
|
-
*/
|
|
136
|
-
export async function generateAccomplishmentId(config, canvasSource) {
|
|
137
|
-
const existingIds = await getAllAccomplishmentIds(config, canvasSource);
|
|
138
|
-
const numbers = existingIds
|
|
139
|
-
.map(id => {
|
|
140
|
-
const match = id.match(/^ACC-(\d+)$/);
|
|
141
|
-
return match ? parseInt(match[1], 10) : 0;
|
|
142
|
-
})
|
|
143
|
-
.filter(n => !isNaN(n));
|
|
144
|
-
const maxNumber = numbers.length > 0 ? Math.max(...numbers) : 0;
|
|
145
|
-
return `ACC-${String(maxNumber + 1).padStart(3, '0')}`;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Add a node to canvas for an accomplishment
|
|
149
|
-
* Uses merge-based approach to handle concurrent Obsidian edits
|
|
150
|
-
*/
|
|
151
|
-
export async function addAccomplishmentNode(config, filePath, position, canvasSource) {
|
|
152
|
-
const node = {
|
|
153
|
-
id: generateId(),
|
|
154
|
-
type: 'file',
|
|
155
|
-
file: filePath,
|
|
156
|
-
x: position.x,
|
|
157
|
-
y: position.y,
|
|
158
|
-
width: 400,
|
|
159
|
-
height: 300,
|
|
160
|
-
};
|
|
161
|
-
await applyCanvasOperations(config, [{ type: 'add_node', node }], canvasSource);
|
|
162
|
-
return node;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Remove an accomplishment node from canvas
|
|
166
|
-
* Uses merge-based approach to handle concurrent Obsidian edits
|
|
167
|
-
*/
|
|
168
|
-
export async function removeAccomplishmentNode(config, filePath, canvasSource) {
|
|
169
|
-
await applyCanvasOperations(config, [{ type: 'remove_node', filePath }], canvasSource);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Update node position
|
|
173
|
-
* Uses merge-based approach to handle concurrent Obsidian edits
|
|
174
|
-
*/
|
|
175
|
-
export async function updateNodePosition(config, filePath, position, canvasSource) {
|
|
176
|
-
await applyCanvasOperations(config, [{ type: 'update_position', filePath, position }], canvasSource);
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Add a dependency edge between two accomplishments
|
|
180
|
-
* Uses merge-based approach to handle concurrent Obsidian edits
|
|
181
|
-
*/
|
|
182
|
-
export async function addDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource) {
|
|
183
|
-
// First check if nodes exist (read-only operation)
|
|
184
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
185
|
-
const blockerNode = findNodeByFile(canvas, blockerFilePath);
|
|
186
|
-
const blockedNode = findNodeByFile(canvas, blockedFilePath);
|
|
187
|
-
if (!blockerNode || !blockedNode) {
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
// Check if edge already exists
|
|
191
|
-
const existingEdge = canvas.edges.find(e => e.fromNode === blockerNode.id && e.toNode === blockedNode.id);
|
|
192
|
-
if (existingEdge) {
|
|
193
|
-
return existingEdge;
|
|
194
|
-
}
|
|
195
|
-
// Apply the operation with merge strategy
|
|
196
|
-
await applyCanvasOperations(config, [{ type: 'add_edge', fromFilePath: blockerFilePath, toFilePath: blockedFilePath }], canvasSource);
|
|
197
|
-
// Return the edge info (re-read to get the actual edge created)
|
|
198
|
-
const updatedCanvas = await loadCanvas(config, canvasSource);
|
|
199
|
-
const newBlockerNode = findNodeByFile(updatedCanvas, blockerFilePath);
|
|
200
|
-
const newBlockedNode = findNodeByFile(updatedCanvas, blockedFilePath);
|
|
201
|
-
return updatedCanvas.edges.find(e => e.fromNode === newBlockerNode?.id && e.toNode === newBlockedNode?.id) || null;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Remove a dependency edge
|
|
205
|
-
* Uses merge-based approach to handle concurrent Obsidian edits
|
|
206
|
-
*/
|
|
207
|
-
export async function removeDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource) {
|
|
208
|
-
await applyCanvasOperations(config, [{ type: 'remove_edge', fromFilePath: blockerFilePath, toFilePath: blockedFilePath }], canvasSource);
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Get node by file path
|
|
212
|
-
*/
|
|
213
|
-
export async function getNodeByFilePath(config, filePath, canvasSource) {
|
|
214
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
215
|
-
return findNodeByFile(canvas, filePath);
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Get node IDs for given file paths
|
|
219
|
-
*/
|
|
220
|
-
export async function getNodeIdsByFilePaths(config, filePaths, canvasSource) {
|
|
221
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
222
|
-
const nodeIds = [];
|
|
223
|
-
for (const filePath of filePaths) {
|
|
224
|
-
const node = findNodeByFile(canvas, filePath);
|
|
225
|
-
if (node) {
|
|
226
|
-
nodeIds.push(node.id);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return nodeIds;
|
|
230
|
-
}
|
|
231
|
-
//# sourceMappingURL=canvas-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-service.js","sourceRoot":"","sources":["../../src/services/canvas-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { Config } from '../models/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Get the folder path where the canvas file is located
|
|
4
|
-
*/
|
|
5
|
-
export declare function getCanvasFolderPath(config: Config, canvasSource?: string): string;
|
|
6
|
-
/**
|
|
7
|
-
* Get all MD files in the canvas folder
|
|
8
|
-
*/
|
|
9
|
-
export declare function getAllMdFilesInCanvasFolder(config: Config, canvasSource?: string): Promise<string[]>;
|
|
10
|
-
/**
|
|
11
|
-
* Get all MD files in the context docs folder (if configured)
|
|
12
|
-
*/
|
|
13
|
-
export declare function getAllMdFilesInContextDocsFolder(config: Config): Promise<string[]>;
|
|
14
|
-
/**
|
|
15
|
-
* Get all files referenced by the canvas
|
|
16
|
-
*/
|
|
17
|
-
export declare function getCanvasReferencedFiles(config: Config, canvasSource?: string): Promise<Set<string>>;
|
|
18
|
-
/**
|
|
19
|
-
* Get context documents from both sources:
|
|
20
|
-
* 1. MD files in canvas folder NOT referenced by canvas
|
|
21
|
-
* 2. All MD files in CONTEXT_DOCS_FOLDER (if configured)
|
|
22
|
-
*
|
|
23
|
-
* Files from context docs folder are prefixed with "context:" to distinguish them
|
|
24
|
-
*/
|
|
25
|
-
export declare function getContextDocuments(config: Config, canvasSource?: string): Promise<string[]>;
|
|
26
|
-
/**
|
|
27
|
-
* Parse doc name to determine source folder and actual filename
|
|
28
|
-
*/
|
|
29
|
-
export declare function parseDocName(docName: string): {
|
|
30
|
-
isContextFolder: boolean;
|
|
31
|
-
filename: string;
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Get full path to a context document
|
|
35
|
-
* Handles both canvas folder docs and context folder docs (prefixed with "context:")
|
|
36
|
-
*/
|
|
37
|
-
export declare function getContextDocPath(config: Config, docName: string, canvasSource?: string): string;
|
|
38
|
-
/**
|
|
39
|
-
* Check if a document is a valid context document (exists and not referenced by canvas)
|
|
40
|
-
*/
|
|
41
|
-
export declare function isContextDocument(config: Config, docName: string, canvasSource?: string): Promise<boolean>;
|
|
42
|
-
/**
|
|
43
|
-
* Read a single context document
|
|
44
|
-
*/
|
|
45
|
-
export declare function readContextDocument(config: Config, docName: string, canvasSource?: string, startLine?: number, endLine?: number): Promise<string>;
|
|
46
|
-
/**
|
|
47
|
-
* Read all context documents
|
|
48
|
-
*/
|
|
49
|
-
export declare function readAllContextDocuments(config: Config, canvasSource?: string): Promise<Record<string, string>>;
|
|
50
|
-
/**
|
|
51
|
-
* Create a new context document
|
|
52
|
-
*/
|
|
53
|
-
export declare function createContextDocument(config: Config, docName: string, content: string, canvasSource?: string): Promise<void>;
|
|
54
|
-
/**
|
|
55
|
-
* Replace entire content of a context document
|
|
56
|
-
*/
|
|
57
|
-
export declare function replaceContextDocument(config: Config, docName: string, content: string, canvasSource?: string): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Delete a context document
|
|
60
|
-
*/
|
|
61
|
-
export declare function deleteContextDocument(config: Config, docName: string, canvasSource?: string): Promise<void>;
|
|
62
|
-
/**
|
|
63
|
-
* Insert content at a specific line in a context document
|
|
64
|
-
*/
|
|
65
|
-
export declare function insertAtLine(config: Config, docName: string, content: string, startLine: number, canvasSource?: string): Promise<void>;
|
|
66
|
-
/**
|
|
67
|
-
* Replace content in a specific line range in a context document
|
|
68
|
-
*/
|
|
69
|
-
export declare function replaceAtRange(config: Config, docName: string, content: string, startLine: number, endLine: number, canvasSource?: string): Promise<void>;
|
|
70
|
-
//# sourceMappingURL=context-doc-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-doc-service.d.ts","sourceRoot":"","sources":["../../src/services/context-doc-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { NotFoundError, ValidationError, ConflictError } from '../models/types.js';
|
|
2
|
-
import { loadCanvas } from './canvas-service.js';
|
|
3
|
-
import { readFile, writeFileAtomic, deleteFile, fileExists, listFiles } from '../utils/file-utils.js';
|
|
4
|
-
import { getCanvasPath, getContextDocsFolderPath } from '../utils/config.js';
|
|
5
|
-
import { dirname } from 'path';
|
|
6
|
-
// Prefix used to identify docs from the context docs folder
|
|
7
|
-
const CONTEXT_FOLDER_PREFIX = 'context:';
|
|
8
|
-
/**
|
|
9
|
-
* Get the folder path where the canvas file is located
|
|
10
|
-
*/
|
|
11
|
-
export function getCanvasFolderPath(config, canvasSource) {
|
|
12
|
-
const canvasPath = getCanvasPath(config, canvasSource);
|
|
13
|
-
return dirname(canvasPath);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Get all MD files in the canvas folder
|
|
17
|
-
*/
|
|
18
|
-
export async function getAllMdFilesInCanvasFolder(config, canvasSource) {
|
|
19
|
-
const folderPath = getCanvasFolderPath(config, canvasSource);
|
|
20
|
-
const files = await listFiles(folderPath);
|
|
21
|
-
return files.filter(f => f.endsWith('.md'));
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get all MD files in the context docs folder (if configured)
|
|
25
|
-
*/
|
|
26
|
-
export async function getAllMdFilesInContextDocsFolder(config) {
|
|
27
|
-
const folderPath = getContextDocsFolderPath(config);
|
|
28
|
-
if (!folderPath)
|
|
29
|
-
return [];
|
|
30
|
-
const files = await listFiles(folderPath);
|
|
31
|
-
return files.filter(f => f.endsWith('.md'));
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get all files referenced by the canvas
|
|
35
|
-
*/
|
|
36
|
-
export async function getCanvasReferencedFiles(config, canvasSource) {
|
|
37
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
38
|
-
const referencedFiles = new Set();
|
|
39
|
-
for (const node of canvas.nodes) {
|
|
40
|
-
if (node.type === 'file' && node.file) {
|
|
41
|
-
// Extract just the filename from the path
|
|
42
|
-
const parts = node.file.split('/');
|
|
43
|
-
const filename = parts[parts.length - 1];
|
|
44
|
-
referencedFiles.add(filename);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return referencedFiles;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get context documents from both sources:
|
|
51
|
-
* 1. MD files in canvas folder NOT referenced by canvas
|
|
52
|
-
* 2. All MD files in CONTEXT_DOCS_FOLDER (if configured)
|
|
53
|
-
*
|
|
54
|
-
* Files from context docs folder are prefixed with "context:" to distinguish them
|
|
55
|
-
*/
|
|
56
|
-
export async function getContextDocuments(config, canvasSource) {
|
|
57
|
-
const result = [];
|
|
58
|
-
// 1. Get canvas folder context docs (not referenced by canvas)
|
|
59
|
-
const allMdFiles = await getAllMdFilesInCanvasFolder(config, canvasSource);
|
|
60
|
-
const referencedFiles = await getCanvasReferencedFiles(config, canvasSource);
|
|
61
|
-
const canvasFolderDocs = allMdFiles.filter(f => !referencedFiles.has(f));
|
|
62
|
-
result.push(...canvasFolderDocs);
|
|
63
|
-
// 2. Get context docs folder files (if configured)
|
|
64
|
-
const contextFolderDocs = await getAllMdFilesInContextDocsFolder(config);
|
|
65
|
-
// Prefix with "context:" to distinguish from canvas folder docs
|
|
66
|
-
result.push(...contextFolderDocs.map(f => `${CONTEXT_FOLDER_PREFIX}${f}`));
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Parse doc name to determine source folder and actual filename
|
|
71
|
-
*/
|
|
72
|
-
export function parseDocName(docName) {
|
|
73
|
-
if (docName.startsWith(CONTEXT_FOLDER_PREFIX)) {
|
|
74
|
-
const filename = docName.slice(CONTEXT_FOLDER_PREFIX.length);
|
|
75
|
-
return {
|
|
76
|
-
isContextFolder: true,
|
|
77
|
-
filename: filename.endsWith('.md') ? filename : `${filename}.md`,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
isContextFolder: false,
|
|
82
|
-
filename: docName.endsWith('.md') ? docName : `${docName}.md`,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Get full path to a context document
|
|
87
|
-
* Handles both canvas folder docs and context folder docs (prefixed with "context:")
|
|
88
|
-
*/
|
|
89
|
-
export function getContextDocPath(config, docName, canvasSource) {
|
|
90
|
-
const { isContextFolder, filename } = parseDocName(docName);
|
|
91
|
-
if (isContextFolder) {
|
|
92
|
-
const contextFolderPath = getContextDocsFolderPath(config);
|
|
93
|
-
if (!contextFolderPath) {
|
|
94
|
-
throw new ValidationError('CONTEXT_DOCS_FOLDER is not configured');
|
|
95
|
-
}
|
|
96
|
-
return `${contextFolderPath}/${filename}`;
|
|
97
|
-
}
|
|
98
|
-
const folderPath = getCanvasFolderPath(config, canvasSource);
|
|
99
|
-
return `${folderPath}/${filename}`;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Check if a document is a valid context document (exists and not referenced by canvas)
|
|
103
|
-
*/
|
|
104
|
-
export async function isContextDocument(config, docName, canvasSource) {
|
|
105
|
-
const contextDocs = await getContextDocuments(config, canvasSource);
|
|
106
|
-
const { isContextFolder, filename } = parseDocName(docName);
|
|
107
|
-
if (isContextFolder) {
|
|
108
|
-
return contextDocs.includes(`${CONTEXT_FOLDER_PREFIX}${filename}`);
|
|
109
|
-
}
|
|
110
|
-
return contextDocs.includes(filename);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Read a single context document
|
|
114
|
-
*/
|
|
115
|
-
export async function readContextDocument(config, docName, canvasSource, startLine, endLine) {
|
|
116
|
-
const docPath = getContextDocPath(config, docName, canvasSource);
|
|
117
|
-
if (!(await fileExists(docPath))) {
|
|
118
|
-
throw new NotFoundError(`Context document not found: ${docName}`);
|
|
119
|
-
}
|
|
120
|
-
const content = await readFile(docPath);
|
|
121
|
-
// If no line range specified, return full content
|
|
122
|
-
if (startLine === undefined && endLine === undefined) {
|
|
123
|
-
return content;
|
|
124
|
-
}
|
|
125
|
-
// Split into lines and apply range (0-based, start inclusive, end exclusive)
|
|
126
|
-
const lines = content.split('\n');
|
|
127
|
-
const start = startLine ?? 0;
|
|
128
|
-
const end = endLine ?? lines.length;
|
|
129
|
-
// Validate range
|
|
130
|
-
if (start < 0 || start > lines.length) {
|
|
131
|
-
throw new ValidationError(`Invalid start_line: ${start}. File has ${lines.length} lines (0-${lines.length - 1})`);
|
|
132
|
-
}
|
|
133
|
-
if (end < start) {
|
|
134
|
-
throw new ValidationError(`end_line (${end}) must be >= start_line (${start})`);
|
|
135
|
-
}
|
|
136
|
-
return lines.slice(start, end).join('\n');
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Read all context documents
|
|
140
|
-
*/
|
|
141
|
-
export async function readAllContextDocuments(config, canvasSource) {
|
|
142
|
-
const contextDocs = await getContextDocuments(config, canvasSource);
|
|
143
|
-
const result = {};
|
|
144
|
-
for (const docName of contextDocs) {
|
|
145
|
-
const docPath = getContextDocPath(config, docName, canvasSource);
|
|
146
|
-
try {
|
|
147
|
-
result[docName] = await readFile(docPath);
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
// Skip files that can't be read
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return result;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Create a new context document
|
|
157
|
-
*/
|
|
158
|
-
export async function createContextDocument(config, docName, content, canvasSource) {
|
|
159
|
-
const docPath = getContextDocPath(config, docName, canvasSource);
|
|
160
|
-
if (await fileExists(docPath)) {
|
|
161
|
-
throw new ConflictError(`Document already exists: ${docName}. Use 'replace' operation to overwrite.`);
|
|
162
|
-
}
|
|
163
|
-
await writeFileAtomic(docPath, content);
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Replace entire content of a context document
|
|
167
|
-
*/
|
|
168
|
-
export async function replaceContextDocument(config, docName, content, canvasSource) {
|
|
169
|
-
const docPath = getContextDocPath(config, docName, canvasSource);
|
|
170
|
-
if (!(await fileExists(docPath))) {
|
|
171
|
-
throw new NotFoundError(`Context document not found: ${docName}`);
|
|
172
|
-
}
|
|
173
|
-
await writeFileAtomic(docPath, content);
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Delete a context document
|
|
177
|
-
*/
|
|
178
|
-
export async function deleteContextDocument(config, docName, canvasSource) {
|
|
179
|
-
const docPath = getContextDocPath(config, docName, canvasSource);
|
|
180
|
-
if (!(await fileExists(docPath))) {
|
|
181
|
-
throw new NotFoundError(`Context document not found: ${docName}`);
|
|
182
|
-
}
|
|
183
|
-
await deleteFile(docPath);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Insert content at a specific line in a context document
|
|
187
|
-
*/
|
|
188
|
-
export async function insertAtLine(config, docName, content, startLine, canvasSource) {
|
|
189
|
-
const docPath = getContextDocPath(config, docName, canvasSource);
|
|
190
|
-
if (!(await fileExists(docPath))) {
|
|
191
|
-
throw new NotFoundError(`Context document not found: ${docName}`);
|
|
192
|
-
}
|
|
193
|
-
const existingContent = await readFile(docPath);
|
|
194
|
-
const lines = existingContent.split('\n');
|
|
195
|
-
// Validate line number (0-based)
|
|
196
|
-
if (startLine < 0 || startLine > lines.length) {
|
|
197
|
-
throw new ValidationError(`Invalid start_line: ${startLine}. File has ${lines.length} lines (valid range: 0-${lines.length})`);
|
|
198
|
-
}
|
|
199
|
-
// Insert content at the specified line
|
|
200
|
-
const newLines = content.split('\n');
|
|
201
|
-
lines.splice(startLine, 0, ...newLines);
|
|
202
|
-
await writeFileAtomic(docPath, lines.join('\n'));
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Replace content in a specific line range in a context document
|
|
206
|
-
*/
|
|
207
|
-
export async function replaceAtRange(config, docName, content, startLine, endLine, canvasSource) {
|
|
208
|
-
const docPath = getContextDocPath(config, docName, canvasSource);
|
|
209
|
-
if (!(await fileExists(docPath))) {
|
|
210
|
-
throw new NotFoundError(`Context document not found: ${docName}`);
|
|
211
|
-
}
|
|
212
|
-
const existingContent = await readFile(docPath);
|
|
213
|
-
const lines = existingContent.split('\n');
|
|
214
|
-
// Validate range (0-based, start inclusive, end exclusive)
|
|
215
|
-
if (startLine < 0 || startLine > lines.length) {
|
|
216
|
-
throw new ValidationError(`Invalid start_line: ${startLine}. File has ${lines.length} lines (valid range: 0-${lines.length - 1})`);
|
|
217
|
-
}
|
|
218
|
-
if (endLine < startLine) {
|
|
219
|
-
throw new ValidationError(`end_line (${endLine}) must be >= start_line (${startLine})`);
|
|
220
|
-
}
|
|
221
|
-
if (endLine > lines.length) {
|
|
222
|
-
throw new ValidationError(`Invalid end_line: ${endLine}. File has ${lines.length} lines (valid range: 0-${lines.length})`);
|
|
223
|
-
}
|
|
224
|
-
// Replace lines in range with new content
|
|
225
|
-
const newLines = content.split('\n');
|
|
226
|
-
lines.splice(startLine, endLine - startLine, ...newLines);
|
|
227
|
-
await writeFileAtomic(docPath, lines.join('\n'));
|
|
228
|
-
}
|
|
229
|
-
//# sourceMappingURL=context-doc-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-doc-service.js","sourceRoot":"","sources":["../../src/services/context-doc-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Config } from '../models/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Add a dependency between two accomplishments
|
|
4
|
-
*/
|
|
5
|
-
export declare function addDependency(config: Config, blockerId: string, blockedId: string): Promise<{
|
|
6
|
-
position: {
|
|
7
|
-
x: number;
|
|
8
|
-
y: number;
|
|
9
|
-
};
|
|
10
|
-
}>;
|
|
11
|
-
/**
|
|
12
|
-
* Remove a dependency between two accomplishments
|
|
13
|
-
*/
|
|
14
|
-
export declare function removeDependency(config: Config, blockerId: string, blockedId: string): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Get all dependencies for an accomplishment
|
|
17
|
-
*/
|
|
18
|
-
export declare function getDependencies(config: Config, accomplishmentId: string): Promise<{
|
|
19
|
-
blockers: string[];
|
|
20
|
-
blocking: string[];
|
|
21
|
-
}>;
|
|
22
|
-
//# sourceMappingURL=dependency-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-service.d.ts","sourceRoot":"","sources":["../../src/services/dependency-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAGP,MAAM,oBAAoB,CAAC;AAY5B;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAqDjD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgBrD"}
|