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
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { NotFoundError, ValidationError, } from '../models/types.js';
|
|
2
|
-
import { getAccomplishment, repositionAccomplishment } from './accomplishment-service.js';
|
|
3
|
-
import { serializeAccomplishment } from '../parsers/markdown-parser.js';
|
|
4
|
-
import { getAccomplishmentFilePath, getRelativeAccomplishmentPath } from '../utils/config.js';
|
|
5
|
-
import { writeFileAtomic } from '../utils/file-utils.js';
|
|
6
|
-
import { loadCanvas, addDependencyEdge, removeDependencyEdge, } from './canvas-service.js';
|
|
7
|
-
import { wouldCreateCycle, findNodeByFile } from '../parsers/canvas-parser.js';
|
|
8
|
-
/**
|
|
9
|
-
* Add a dependency between two accomplishments
|
|
10
|
-
*/
|
|
11
|
-
export async function addDependency(config, blockerId, blockedId) {
|
|
12
|
-
// Validate both accomplishments exist
|
|
13
|
-
const blocker = await getAccomplishment(config, blockerId);
|
|
14
|
-
const blocked = await getAccomplishment(config, blockedId);
|
|
15
|
-
if (!blocker) {
|
|
16
|
-
throw new NotFoundError(`Blocker accomplishment not found: ${blockerId}`);
|
|
17
|
-
}
|
|
18
|
-
if (!blocked) {
|
|
19
|
-
throw new NotFoundError(`Blocked accomplishment not found: ${blockedId}`);
|
|
20
|
-
}
|
|
21
|
-
// Check for circular dependency
|
|
22
|
-
const canvasSource = blocked.frontmatter.canvas_source;
|
|
23
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
24
|
-
const blockerFilePath = getRelativeAccomplishmentPath(config, blocker.frontmatter.title);
|
|
25
|
-
const blockedFilePath = getRelativeAccomplishmentPath(config, blocked.frontmatter.title);
|
|
26
|
-
const blockerNode = findNodeByFile(canvas, blockerFilePath);
|
|
27
|
-
const blockedNode = findNodeByFile(canvas, blockedFilePath);
|
|
28
|
-
if (blockerNode && blockedNode) {
|
|
29
|
-
if (wouldCreateCycle(canvas, blockerNode.id, blockedNode.id)) {
|
|
30
|
-
throw new ValidationError(`Adding dependency would create a circular dependency: ${blockerId} -> ${blockedId}`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// Check if dependency already exists
|
|
34
|
-
if (blocked.frontmatter.depends_on.includes(blockerId)) {
|
|
35
|
-
// Already exists, just return current position
|
|
36
|
-
const node = findNodeByFile(canvas, blockedFilePath);
|
|
37
|
-
return { position: { x: node?.x || 0, y: node?.y || 0 } };
|
|
38
|
-
}
|
|
39
|
-
// Add to depends_on array
|
|
40
|
-
blocked.frontmatter.depends_on.push(blockerId);
|
|
41
|
-
blocked.frontmatter.updated = new Date().toISOString();
|
|
42
|
-
// Save blocked accomplishment
|
|
43
|
-
const filePath = getAccomplishmentFilePath(config, blocked.frontmatter.title);
|
|
44
|
-
const content = serializeAccomplishment(blocked);
|
|
45
|
-
await writeFileAtomic(filePath, content);
|
|
46
|
-
// Add edge to canvas
|
|
47
|
-
await addDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource);
|
|
48
|
-
// Reposition blocked node
|
|
49
|
-
const position = await repositionAccomplishment(config, blockedId);
|
|
50
|
-
return { position };
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Remove a dependency between two accomplishments
|
|
54
|
-
*/
|
|
55
|
-
export async function removeDependency(config, blockerId, blockedId) {
|
|
56
|
-
// Get blocked accomplishment
|
|
57
|
-
const blocked = await getAccomplishment(config, blockedId);
|
|
58
|
-
const blocker = await getAccomplishment(config, blockerId);
|
|
59
|
-
if (!blocked) {
|
|
60
|
-
throw new NotFoundError(`Blocked accomplishment not found: ${blockedId}`);
|
|
61
|
-
}
|
|
62
|
-
// Remove from depends_on array
|
|
63
|
-
const index = blocked.frontmatter.depends_on.indexOf(blockerId);
|
|
64
|
-
if (index === -1) {
|
|
65
|
-
return; // Dependency doesn't exist
|
|
66
|
-
}
|
|
67
|
-
blocked.frontmatter.depends_on.splice(index, 1);
|
|
68
|
-
blocked.frontmatter.updated = new Date().toISOString();
|
|
69
|
-
// Save blocked accomplishment
|
|
70
|
-
const filePath = getAccomplishmentFilePath(config, blocked.frontmatter.title);
|
|
71
|
-
const content = serializeAccomplishment(blocked);
|
|
72
|
-
await writeFileAtomic(filePath, content);
|
|
73
|
-
// Remove edge from canvas
|
|
74
|
-
const canvasSource = blocked.frontmatter.canvas_source;
|
|
75
|
-
const blockerFilePath = blocker
|
|
76
|
-
? getRelativeAccomplishmentPath(config, blocker.frontmatter.title)
|
|
77
|
-
: '';
|
|
78
|
-
const blockedFilePath = getRelativeAccomplishmentPath(config, blocked.frontmatter.title);
|
|
79
|
-
if (blockerFilePath) {
|
|
80
|
-
await removeDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Get all dependencies for an accomplishment
|
|
85
|
-
*/
|
|
86
|
-
export async function getDependencies(config, accomplishmentId) {
|
|
87
|
-
const accomplishment = await getAccomplishment(config, accomplishmentId);
|
|
88
|
-
// Get what this accomplishment depends on (blockers)
|
|
89
|
-
const blockers = accomplishment.frontmatter.depends_on;
|
|
90
|
-
// Get what this accomplishment blocks
|
|
91
|
-
// We need to scan all accomplishments to find ones that depend on this one
|
|
92
|
-
const { listAllAccomplishments } = await import('./accomplishment-service.js');
|
|
93
|
-
const allAccomplishments = await listAllAccomplishments(config);
|
|
94
|
-
const blocking = allAccomplishments
|
|
95
|
-
.filter(a => a.frontmatter.depends_on.includes(accomplishmentId))
|
|
96
|
-
.map(a => a.frontmatter.id);
|
|
97
|
-
return { blockers, blocking };
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=dependency-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-service.js","sourceRoot":"","sources":["../../src/services/dependency-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Config, AccomplishmentStatus, CanvasNode, CanvasFile } from '../models/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Generate the status indicator node ID for an accomplishment
|
|
4
|
-
*/
|
|
5
|
-
export declare function getStatusIndicatorId(accomplishmentId: string): string;
|
|
6
|
-
/**
|
|
7
|
-
* Find a status indicator node in the canvas
|
|
8
|
-
*/
|
|
9
|
-
export declare function findStatusIndicator(canvas: CanvasFile, accomplishmentId: string): CanvasNode | undefined;
|
|
10
|
-
/**
|
|
11
|
-
* Create or update a status indicator node for an accomplishment.
|
|
12
|
-
* This modifies the canvas in memory - caller must save it.
|
|
13
|
-
*/
|
|
14
|
-
export declare function updateStatusIndicatorInCanvas(canvas: CanvasFile, accomplishmentNode: CanvasNode, accomplishmentId: string, status: AccomplishmentStatus): void;
|
|
15
|
-
/**
|
|
16
|
-
* Remove a status indicator node from the canvas.
|
|
17
|
-
* This modifies the canvas in memory - caller must save it.
|
|
18
|
-
*/
|
|
19
|
-
export declare function removeStatusIndicatorFromCanvas(canvas: CanvasFile, accomplishmentId: string): void;
|
|
20
|
-
/**
|
|
21
|
-
* Update status indicator for a single accomplishment.
|
|
22
|
-
* Loads canvas, updates indicator, saves canvas.
|
|
23
|
-
*/
|
|
24
|
-
export declare function updateStatusIndicator(config: Config, accomplishmentId: string, status: AccomplishmentStatus, canvasSource?: string): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Remove status indicator for a single accomplishment.
|
|
27
|
-
*/
|
|
28
|
-
export declare function removeStatusIndicator(config: Config, accomplishmentId: string, canvasSource?: string): Promise<void>;
|
|
29
|
-
export interface ReconcileResult {
|
|
30
|
-
created: number;
|
|
31
|
-
updated: number;
|
|
32
|
-
removed: number;
|
|
33
|
-
total_accomplishments: number;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Reconcile all status indicators on the canvas.
|
|
37
|
-
* Creates missing indicators, updates incorrect ones, removes orphaned ones.
|
|
38
|
-
*/
|
|
39
|
-
export declare function reconcileAllStatusIndicators(config: Config, canvasSource?: string): Promise<ReconcileResult>;
|
|
40
|
-
//# sourceMappingURL=status-indicator-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status-indicator-service.d.ts","sourceRoot":"","sources":["../../src/services/status-indicator-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAgB1F;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAGxG;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,UAAU,EAC9B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,oBAAoB,GAC3B,IAAI,CAkCN;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,oBAAoB,EAC5B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CA0E1B"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { loadCanvas } from './canvas-service.js';
|
|
2
|
-
import { listAccomplishments, getAccomplishment } from './accomplishment-service.js';
|
|
3
|
-
import { findNodeByFile } from '../parsers/canvas-parser.js';
|
|
4
|
-
import { getRelativeAccomplishmentPath } from '../utils/config.js';
|
|
5
|
-
/**
|
|
6
|
-
* Status indicator emoji and color mapping
|
|
7
|
-
*/
|
|
8
|
-
const STATUS_INDICATORS = {
|
|
9
|
-
'Blocked': { emoji: '🚫', color: '1' }, // Red
|
|
10
|
-
'Completed': { emoji: '✅', color: '4' }, // Green
|
|
11
|
-
'In Progress': { emoji: '🔄', color: '5' }, // Cyan
|
|
12
|
-
'Not Started': { emoji: '⚪' }, // No color (default)
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Generate the status indicator node ID for an accomplishment
|
|
16
|
-
*/
|
|
17
|
-
export function getStatusIndicatorId(accomplishmentId) {
|
|
18
|
-
return `status-${accomplishmentId}`;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Find a status indicator node in the canvas
|
|
22
|
-
*/
|
|
23
|
-
export function findStatusIndicator(canvas, accomplishmentId) {
|
|
24
|
-
const indicatorId = getStatusIndicatorId(accomplishmentId);
|
|
25
|
-
return canvas.nodes.find(n => n.id === indicatorId);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Create or update a status indicator node for an accomplishment.
|
|
29
|
-
* This modifies the canvas in memory - caller must save it.
|
|
30
|
-
*/
|
|
31
|
-
export function updateStatusIndicatorInCanvas(canvas, accomplishmentNode, accomplishmentId, status) {
|
|
32
|
-
const indicatorId = getStatusIndicatorId(accomplishmentId);
|
|
33
|
-
const indicator = STATUS_INDICATORS[status];
|
|
34
|
-
// Calculate position: top-right corner of accomplishment node
|
|
35
|
-
const indicatorX = accomplishmentNode.x + accomplishmentNode.width + 5;
|
|
36
|
-
const indicatorY = accomplishmentNode.y;
|
|
37
|
-
const indicatorWidth = 60;
|
|
38
|
-
const indicatorHeight = 60;
|
|
39
|
-
// Find existing indicator
|
|
40
|
-
const existingIndex = canvas.nodes.findIndex(n => n.id === indicatorId);
|
|
41
|
-
const indicatorNode = {
|
|
42
|
-
id: indicatorId,
|
|
43
|
-
type: 'text',
|
|
44
|
-
text: indicator.emoji,
|
|
45
|
-
x: indicatorX,
|
|
46
|
-
y: indicatorY,
|
|
47
|
-
width: indicatorWidth,
|
|
48
|
-
height: indicatorHeight,
|
|
49
|
-
...(indicator.color && { color: indicator.color }),
|
|
50
|
-
styleAttributes: {
|
|
51
|
-
textAlign: 'center',
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
if (existingIndex >= 0) {
|
|
55
|
-
// Update existing
|
|
56
|
-
canvas.nodes[existingIndex] = indicatorNode;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
// Add new
|
|
60
|
-
canvas.nodes.push(indicatorNode);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Remove a status indicator node from the canvas.
|
|
65
|
-
* This modifies the canvas in memory - caller must save it.
|
|
66
|
-
*/
|
|
67
|
-
export function removeStatusIndicatorFromCanvas(canvas, accomplishmentId) {
|
|
68
|
-
const indicatorId = getStatusIndicatorId(accomplishmentId);
|
|
69
|
-
const index = canvas.nodes.findIndex(n => n.id === indicatorId);
|
|
70
|
-
if (index >= 0) {
|
|
71
|
-
canvas.nodes.splice(index, 1);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Update status indicator for a single accomplishment.
|
|
76
|
-
* Loads canvas, updates indicator, saves canvas.
|
|
77
|
-
*/
|
|
78
|
-
export async function updateStatusIndicator(config, accomplishmentId, status, canvasSource) {
|
|
79
|
-
// Get the accomplishment to find its title (used for file path)
|
|
80
|
-
const accomplishment = await getAccomplishment(config, accomplishmentId);
|
|
81
|
-
const title = accomplishment.frontmatter.title;
|
|
82
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
83
|
-
const relPath = getRelativeAccomplishmentPath(config, title);
|
|
84
|
-
const accNode = findNodeByFile(canvas, relPath);
|
|
85
|
-
if (!accNode) {
|
|
86
|
-
// Accomplishment node not found on canvas, skip indicator
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
updateStatusIndicatorInCanvas(canvas, accNode, accomplishmentId, status);
|
|
90
|
-
// Save canvas using atomic write
|
|
91
|
-
const { writeFileAtomic } = await import('../utils/file-utils.js');
|
|
92
|
-
const { getCanvasPath } = await import('../utils/config.js');
|
|
93
|
-
const { serializeCanvas } = await import('../parsers/canvas-parser.js');
|
|
94
|
-
const canvasPath = getCanvasPath(config, canvasSource);
|
|
95
|
-
await writeFileAtomic(canvasPath, serializeCanvas(canvas));
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Remove status indicator for a single accomplishment.
|
|
99
|
-
*/
|
|
100
|
-
export async function removeStatusIndicator(config, accomplishmentId, canvasSource) {
|
|
101
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
102
|
-
removeStatusIndicatorFromCanvas(canvas, accomplishmentId);
|
|
103
|
-
const { writeFileAtomic } = await import('../utils/file-utils.js');
|
|
104
|
-
const { getCanvasPath } = await import('../utils/config.js');
|
|
105
|
-
const { serializeCanvas } = await import('../parsers/canvas-parser.js');
|
|
106
|
-
const canvasPath = getCanvasPath(config, canvasSource);
|
|
107
|
-
await writeFileAtomic(canvasPath, serializeCanvas(canvas));
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Reconcile all status indicators on the canvas.
|
|
111
|
-
* Creates missing indicators, updates incorrect ones, removes orphaned ones.
|
|
112
|
-
*/
|
|
113
|
-
export async function reconcileAllStatusIndicators(config, canvasSource) {
|
|
114
|
-
const { writeFileAtomic } = await import('../utils/file-utils.js');
|
|
115
|
-
const { getCanvasPath } = await import('../utils/config.js');
|
|
116
|
-
const { serializeCanvas } = await import('../parsers/canvas-parser.js');
|
|
117
|
-
const canvas = await loadCanvas(config, canvasSource);
|
|
118
|
-
const accomplishments = await listAccomplishments(config, undefined, canvasSource);
|
|
119
|
-
const result = {
|
|
120
|
-
created: 0,
|
|
121
|
-
updated: 0,
|
|
122
|
-
removed: 0,
|
|
123
|
-
total_accomplishments: accomplishments.length,
|
|
124
|
-
};
|
|
125
|
-
// Track which indicator IDs we've processed
|
|
126
|
-
const processedIndicatorIds = new Set();
|
|
127
|
-
// Process each accomplishment
|
|
128
|
-
for (const acc of accomplishments) {
|
|
129
|
-
// Use title for file path lookup (canvas stores files by title)
|
|
130
|
-
const relPath = getRelativeAccomplishmentPath(config, acc.title);
|
|
131
|
-
const accNode = findNodeByFile(canvas, relPath);
|
|
132
|
-
if (!accNode) {
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
const indicatorId = getStatusIndicatorId(acc.id);
|
|
136
|
-
processedIndicatorIds.add(indicatorId);
|
|
137
|
-
const existingIndicator = findStatusIndicator(canvas, acc.id);
|
|
138
|
-
const expectedIndicator = STATUS_INDICATORS[acc.status];
|
|
139
|
-
if (!existingIndicator) {
|
|
140
|
-
updateStatusIndicatorInCanvas(canvas, accNode, acc.id, acc.status);
|
|
141
|
-
result.created++;
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
// Check if update needed (emoji or position changed)
|
|
145
|
-
const expectedX = accNode.x + accNode.width + 5;
|
|
146
|
-
const expectedY = accNode.y;
|
|
147
|
-
if (existingIndicator.text !== expectedIndicator.emoji ||
|
|
148
|
-
existingIndicator.x !== expectedX ||
|
|
149
|
-
existingIndicator.y !== expectedY ||
|
|
150
|
-
existingIndicator.color !== expectedIndicator.color) {
|
|
151
|
-
updateStatusIndicatorInCanvas(canvas, accNode, acc.id, acc.status);
|
|
152
|
-
result.updated++;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// Remove orphaned indicators (indicators without corresponding accomplishment)
|
|
157
|
-
const orphanedIndicators = canvas.nodes.filter(n => n.id.startsWith('status-') && !processedIndicatorIds.has(n.id));
|
|
158
|
-
for (const orphan of orphanedIndicators) {
|
|
159
|
-
const index = canvas.nodes.findIndex(n => n.id === orphan.id);
|
|
160
|
-
if (index >= 0) {
|
|
161
|
-
canvas.nodes.splice(index, 1);
|
|
162
|
-
result.removed++;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// Save canvas once at the end
|
|
166
|
-
const canvasPath = getCanvasPath(config, canvasSource);
|
|
167
|
-
await writeFileAtomic(canvasPath, serializeCanvas(canvas));
|
|
168
|
-
// Trigger Obsidian to reload the canvas
|
|
169
|
-
const { triggerObsidianReload } = await import('../utils/file-utils.js');
|
|
170
|
-
triggerObsidianReload(config.vaultPath, canvasSource || config.defaultCanvas);
|
|
171
|
-
return result;
|
|
172
|
-
}
|
|
173
|
-
//# sourceMappingURL=status-indicator-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status-indicator-service.js","sourceRoot":"","sources":["../../src/services/status-indicator-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Task, TaskData, TaskStatus, Config, Accomplishment } from '../models/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Add a task to an accomplishment
|
|
4
|
-
*/
|
|
5
|
-
export declare function addTask(config: Config, accomplishmentId: string, data: TaskData): Promise<Task>;
|
|
6
|
-
/**
|
|
7
|
-
* Update a task
|
|
8
|
-
*/
|
|
9
|
-
export declare function updateTask(config: Config, accomplishmentId: string, taskId: string, data: Partial<TaskData>): Promise<Task>;
|
|
10
|
-
/**
|
|
11
|
-
* Remove a task from an accomplishment
|
|
12
|
-
*/
|
|
13
|
-
export declare function removeTask(config: Config, accomplishmentId: string, taskId: string): Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
* Get a task by ID
|
|
16
|
-
*/
|
|
17
|
-
export declare function getTask(config: Config, accomplishmentId: string, taskId: string): Promise<Task>;
|
|
18
|
-
/**
|
|
19
|
-
* Set task status and optionally update accomplishment inProgress
|
|
20
|
-
*/
|
|
21
|
-
export declare function setTaskStatus(config: Config, accomplishmentId: string, taskId: string, status: TaskStatus): Promise<{
|
|
22
|
-
task: Task;
|
|
23
|
-
accomplishment: Accomplishment;
|
|
24
|
-
}>;
|
|
25
|
-
/**
|
|
26
|
-
* Get all tasks with a specific status across all accomplishments
|
|
27
|
-
*/
|
|
28
|
-
export declare function getTasksByStatus(config: Config, status: TaskStatus, accomplishments: Accomplishment[]): Promise<Array<{
|
|
29
|
-
accomplishmentId: string;
|
|
30
|
-
task: Task;
|
|
31
|
-
}>>;
|
|
32
|
-
//# sourceMappingURL=task-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-service.d.ts","sourceRoot":"","sources":["../../src/services/task-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,MAAM,EAEN,cAAc,EACf,MAAM,oBAAoB,CAAC;AAM5B;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GACtB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,cAAc,EAAE,cAAc,CAAA;CAAE,CAAC,CA4BzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,eAAe,EAAE,cAAc,EAAE,GAChC,OAAO,CAAC,KAAK,CAAC;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC,CAe1D"}
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { NotFoundError, } from '../models/types.js';
|
|
2
|
-
import { parseTaskId, serializeAccomplishment } from '../parsers/markdown-parser.js';
|
|
3
|
-
import { getAccomplishment } from './accomplishment-service.js';
|
|
4
|
-
import { getAccomplishmentFilePath } from '../utils/config.js';
|
|
5
|
-
import { writeFileAtomic } from '../utils/file-utils.js';
|
|
6
|
-
/**
|
|
7
|
-
* Add a task to an accomplishment
|
|
8
|
-
*/
|
|
9
|
-
export async function addTask(config, accomplishmentId, data) {
|
|
10
|
-
const accomplishment = await getAccomplishment(config, accomplishmentId);
|
|
11
|
-
// Determine next task number
|
|
12
|
-
const maxNumber = accomplishment.tasks.reduce((max, t) => Math.max(max, t.number), 0);
|
|
13
|
-
const task = {
|
|
14
|
-
number: maxNumber + 1,
|
|
15
|
-
name: data.name,
|
|
16
|
-
goal: data.goal,
|
|
17
|
-
description: data.description || '',
|
|
18
|
-
technical_notes: data.technical_notes,
|
|
19
|
-
estimate: data.estimate,
|
|
20
|
-
status: data.status || 'Open',
|
|
21
|
-
notes: data.notes,
|
|
22
|
-
};
|
|
23
|
-
accomplishment.tasks.push(task);
|
|
24
|
-
accomplishment.frontmatter.updated = new Date().toISOString();
|
|
25
|
-
// Save accomplishment
|
|
26
|
-
const filePath = getAccomplishmentFilePath(config, accomplishment.frontmatter.title);
|
|
27
|
-
const content = serializeAccomplishment(accomplishment);
|
|
28
|
-
await writeFileAtomic(filePath, content);
|
|
29
|
-
return task;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Update a task
|
|
33
|
-
*/
|
|
34
|
-
export async function updateTask(config, accomplishmentId, taskId, data) {
|
|
35
|
-
const accomplishment = await getAccomplishment(config, accomplishmentId);
|
|
36
|
-
// Parse task ID to get task number
|
|
37
|
-
const parsed = parseTaskId(taskId);
|
|
38
|
-
if (!parsed) {
|
|
39
|
-
throw new NotFoundError(`Invalid task ID format: ${taskId}`);
|
|
40
|
-
}
|
|
41
|
-
// Find task by number
|
|
42
|
-
const taskIndex = accomplishment.tasks.findIndex(t => t.number === parsed.taskNumber);
|
|
43
|
-
if (taskIndex === -1) {
|
|
44
|
-
throw new NotFoundError(`Task not found: ${taskId}`);
|
|
45
|
-
}
|
|
46
|
-
const task = accomplishment.tasks[taskIndex];
|
|
47
|
-
// Update task fields
|
|
48
|
-
if (data.name !== undefined)
|
|
49
|
-
task.name = data.name;
|
|
50
|
-
if (data.goal !== undefined)
|
|
51
|
-
task.goal = data.goal;
|
|
52
|
-
if (data.description !== undefined)
|
|
53
|
-
task.description = data.description;
|
|
54
|
-
if (data.technical_notes !== undefined)
|
|
55
|
-
task.technical_notes = data.technical_notes;
|
|
56
|
-
if (data.estimate !== undefined)
|
|
57
|
-
task.estimate = data.estimate;
|
|
58
|
-
if (data.status !== undefined)
|
|
59
|
-
task.status = data.status;
|
|
60
|
-
if (data.notes !== undefined)
|
|
61
|
-
task.notes = data.notes;
|
|
62
|
-
accomplishment.frontmatter.updated = new Date().toISOString();
|
|
63
|
-
// Save accomplishment
|
|
64
|
-
const filePath = getAccomplishmentFilePath(config, accomplishment.frontmatter.title);
|
|
65
|
-
const content = serializeAccomplishment(accomplishment);
|
|
66
|
-
await writeFileAtomic(filePath, content);
|
|
67
|
-
return task;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Remove a task from an accomplishment
|
|
71
|
-
*/
|
|
72
|
-
export async function removeTask(config, accomplishmentId, taskId) {
|
|
73
|
-
const accomplishment = await getAccomplishment(config, accomplishmentId);
|
|
74
|
-
// Parse task ID to get task number
|
|
75
|
-
const parsed = parseTaskId(taskId);
|
|
76
|
-
if (!parsed) {
|
|
77
|
-
throw new NotFoundError(`Invalid task ID format: ${taskId}`);
|
|
78
|
-
}
|
|
79
|
-
// Find and remove task
|
|
80
|
-
const taskIndex = accomplishment.tasks.findIndex(t => t.number === parsed.taskNumber);
|
|
81
|
-
if (taskIndex === -1) {
|
|
82
|
-
throw new NotFoundError(`Task not found: ${taskId}`);
|
|
83
|
-
}
|
|
84
|
-
accomplishment.tasks.splice(taskIndex, 1);
|
|
85
|
-
// Renumber remaining tasks
|
|
86
|
-
accomplishment.tasks.forEach((task, index) => {
|
|
87
|
-
task.number = index + 1;
|
|
88
|
-
});
|
|
89
|
-
accomplishment.frontmatter.updated = new Date().toISOString();
|
|
90
|
-
// Save accomplishment
|
|
91
|
-
const filePath = getAccomplishmentFilePath(config, accomplishment.frontmatter.title);
|
|
92
|
-
const content = serializeAccomplishment(accomplishment);
|
|
93
|
-
await writeFileAtomic(filePath, content);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get a task by ID
|
|
97
|
-
*/
|
|
98
|
-
export async function getTask(config, accomplishmentId, taskId) {
|
|
99
|
-
const accomplishment = await getAccomplishment(config, accomplishmentId);
|
|
100
|
-
const parsed = parseTaskId(taskId);
|
|
101
|
-
if (!parsed) {
|
|
102
|
-
throw new NotFoundError(`Invalid task ID format: ${taskId}`);
|
|
103
|
-
}
|
|
104
|
-
const task = accomplishment.tasks.find(t => t.number === parsed.taskNumber);
|
|
105
|
-
if (!task) {
|
|
106
|
-
throw new NotFoundError(`Task not found: ${taskId}`);
|
|
107
|
-
}
|
|
108
|
-
return task;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Set task status and optionally update accomplishment inProgress
|
|
112
|
-
*/
|
|
113
|
-
export async function setTaskStatus(config, accomplishmentId, taskId, status) {
|
|
114
|
-
const accomplishment = await getAccomplishment(config, accomplishmentId);
|
|
115
|
-
const parsed = parseTaskId(taskId);
|
|
116
|
-
if (!parsed) {
|
|
117
|
-
throw new NotFoundError(`Invalid task ID format: ${taskId}`);
|
|
118
|
-
}
|
|
119
|
-
const task = accomplishment.tasks.find(t => t.number === parsed.taskNumber);
|
|
120
|
-
if (!task) {
|
|
121
|
-
throw new NotFoundError(`Task not found: ${taskId}`);
|
|
122
|
-
}
|
|
123
|
-
task.status = status;
|
|
124
|
-
// If task is set to InProgress, auto-set accomplishment inProgress
|
|
125
|
-
if (status === 'InProgress') {
|
|
126
|
-
accomplishment.frontmatter.inProgress = true;
|
|
127
|
-
}
|
|
128
|
-
accomplishment.frontmatter.updated = new Date().toISOString();
|
|
129
|
-
// Save accomplishment
|
|
130
|
-
const filePath = getAccomplishmentFilePath(config, accomplishment.frontmatter.title);
|
|
131
|
-
const content = serializeAccomplishment(accomplishment);
|
|
132
|
-
await writeFileAtomic(filePath, content);
|
|
133
|
-
return { task, accomplishment };
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Get all tasks with a specific status across all accomplishments
|
|
137
|
-
*/
|
|
138
|
-
export async function getTasksByStatus(config, status, accomplishments) {
|
|
139
|
-
const results = [];
|
|
140
|
-
for (const acc of accomplishments) {
|
|
141
|
-
for (const task of acc.tasks) {
|
|
142
|
-
if (task.status === status) {
|
|
143
|
-
results.push({
|
|
144
|
-
accomplishmentId: acc.frontmatter.id,
|
|
145
|
-
task,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return results;
|
|
151
|
-
}
|
|
152
|
-
//# sourceMappingURL=task-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-service.js","sourceRoot":"","sources":["../../src/services/task-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-real-vault.d.ts","sourceRoot":"","sources":["../src/test-real-vault.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/test-real-vault.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test script for running against real vault
|
|
3
|
-
* Run with: npm run build && node dist/test-real-vault.js
|
|
4
|
-
*/
|
|
5
|
-
import { reconcileAllStatusIndicators } from './services/status-indicator-service.js';
|
|
6
|
-
import { getConfig } from './utils/config.js';
|
|
7
|
-
// Set environment variables for real vault
|
|
8
|
-
process.env.VAULT_PATH = '/Users/marc-ostan/Obsidian/OstanLabs/obsidian_notion_planning_system/obsidian-vault';
|
|
9
|
-
process.env.DEFAULT_CANVAS = 'Projects/AgentPlatform/AgentPlatform.canvas';
|
|
10
|
-
process.env.ACCOMPLISHMENTS_FOLDER = 'Projects/AgentPlatform';
|
|
11
|
-
async function testRealVault() {
|
|
12
|
-
console.log('=== Testing Status Indicators on Real Vault ===\n');
|
|
13
|
-
try {
|
|
14
|
-
const config = getConfig();
|
|
15
|
-
console.log('Config loaded:');
|
|
16
|
-
console.log(` Vault: ${config.vaultPath}`);
|
|
17
|
-
console.log(` Default Canvas: ${config.defaultCanvas}`);
|
|
18
|
-
console.log('');
|
|
19
|
-
console.log('Calling reconcileAllStatusIndicators...\n');
|
|
20
|
-
const result = await reconcileAllStatusIndicators(config);
|
|
21
|
-
console.log('\n=== Result ===');
|
|
22
|
-
console.log(JSON.stringify(result, null, 2));
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
console.error('Error:', error);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
testRealVault();
|
|
30
|
-
//# sourceMappingURL=test-real-vault.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-real-vault.js","sourceRoot":"","sources":["../src/test-real-vault.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,2CAA2C;AAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,qFAAqF,CAAC;AAC/G,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,6CAA6C,CAAC;AAC3E,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,wBAAwB,CAAC;AAE9D,KAAK,UAAU,aAAa;IAC1B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAEjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAE1D,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,aAAa,EAAE,CAAC"}
|