obsidian-accomplishments-mcp 0.1.0
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/LICENSE +22 -0
- package/README.md +349 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/models/types.d.ts +136 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +27 -0
- package/dist/models/types.js.map +1 -0
- package/dist/parsers/canvas-parser.d.ts +58 -0
- package/dist/parsers/canvas-parser.d.ts.map +1 -0
- package/dist/parsers/canvas-parser.js +136 -0
- package/dist/parsers/canvas-parser.js.map +1 -0
- package/dist/parsers/markdown-parser.d.ts +22 -0
- package/dist/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/parsers/markdown-parser.js +254 -0
- package/dist/parsers/markdown-parser.js.map +1 -0
- package/dist/services/accomplishment-service.d.ts +33 -0
- package/dist/services/accomplishment-service.d.ts.map +1 -0
- package/dist/services/accomplishment-service.js +284 -0
- package/dist/services/accomplishment-service.js.map +1 -0
- package/dist/services/canvas-service.d.ts +52 -0
- package/dist/services/canvas-service.d.ts.map +1 -0
- package/dist/services/canvas-service.js +166 -0
- package/dist/services/canvas-service.js.map +1 -0
- package/dist/services/context-doc-service.d.ts +70 -0
- package/dist/services/context-doc-service.d.ts.map +1 -0
- package/dist/services/context-doc-service.js +229 -0
- package/dist/services/context-doc-service.js.map +1 -0
- package/dist/services/dependency-service.d.ts +22 -0
- package/dist/services/dependency-service.d.ts.map +1 -0
- package/dist/services/dependency-service.js +99 -0
- package/dist/services/dependency-service.js.map +1 -0
- package/dist/services/task-service.d.ts +32 -0
- package/dist/services/task-service.d.ts.map +1 -0
- package/dist/services/task-service.js +152 -0
- package/dist/services/task-service.js.map +1 -0
- package/dist/test-runner.d.ts +6 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +130 -0
- package/dist/test-runner.js.map +1 -0
- package/dist/tools/get-accomplishment.d.ts +26 -0
- package/dist/tools/get-accomplishment.d.ts.map +1 -0
- package/dist/tools/get-accomplishment.js +53 -0
- package/dist/tools/get-accomplishment.js.map +1 -0
- package/dist/tools/get-blocked-items.d.ts +15 -0
- package/dist/tools/get-blocked-items.d.ts.map +1 -0
- package/dist/tools/get-blocked-items.js +72 -0
- package/dist/tools/get-blocked-items.js.map +1 -0
- package/dist/tools/get-current-work.d.ts +15 -0
- package/dist/tools/get-current-work.d.ts.map +1 -0
- package/dist/tools/get-current-work.js +67 -0
- package/dist/tools/get-current-work.js.map +1 -0
- package/dist/tools/get-project-status.d.ts +26 -0
- package/dist/tools/get-project-status.d.ts.map +1 -0
- package/dist/tools/get-project-status.js +92 -0
- package/dist/tools/get-project-status.js.map +1 -0
- package/dist/tools/get-ready-to-start.d.ts +15 -0
- package/dist/tools/get-ready-to-start.d.ts.map +1 -0
- package/dist/tools/get-ready-to-start.js +46 -0
- package/dist/tools/get-ready-to-start.js.map +1 -0
- package/dist/tools/index.d.ts +155 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +48 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-accomplishments.d.ts +34 -0
- package/dist/tools/list-accomplishments.d.ts.map +1 -0
- package/dist/tools/list-accomplishments.js +34 -0
- package/dist/tools/list-accomplishments.js.map +1 -0
- package/dist/tools/list-files.d.ts +26 -0
- package/dist/tools/list-files.d.ts.map +1 -0
- package/dist/tools/list-files.js +46 -0
- package/dist/tools/list-files.js.map +1 -0
- package/dist/tools/list-workspaces.d.ts +22 -0
- package/dist/tools/list-workspaces.d.ts.map +1 -0
- package/dist/tools/list-workspaces.js +22 -0
- package/dist/tools/list-workspaces.js.map +1 -0
- package/dist/tools/manage-accomplishment.d.ts +147 -0
- package/dist/tools/manage-accomplishment.d.ts.map +1 -0
- package/dist/tools/manage-accomplishment.js +138 -0
- package/dist/tools/manage-accomplishment.js.map +1 -0
- package/dist/tools/manage-dependency.d.ts +41 -0
- package/dist/tools/manage-dependency.d.ts.map +1 -0
- package/dist/tools/manage-dependency.js +61 -0
- package/dist/tools/manage-dependency.js.map +1 -0
- package/dist/tools/manage-task.d.ts +119 -0
- package/dist/tools/manage-task.d.ts.map +1 -0
- package/dist/tools/manage-task.js +121 -0
- package/dist/tools/manage-task.js.map +1 -0
- package/dist/tools/read-docs.d.ts +48 -0
- package/dist/tools/read-docs.d.ts.map +1 -0
- package/dist/tools/read-docs.js +90 -0
- package/dist/tools/read-docs.js.map +1 -0
- package/dist/tools/set-work-focus.d.ts +48 -0
- package/dist/tools/set-work-focus.d.ts.map +1 -0
- package/dist/tools/set-work-focus.js +75 -0
- package/dist/tools/set-work-focus.js.map +1 -0
- package/dist/tools/sync-dependencies.d.ts +33 -0
- package/dist/tools/sync-dependencies.d.ts.map +1 -0
- package/dist/tools/sync-dependencies.js +144 -0
- package/dist/tools/sync-dependencies.js.map +1 -0
- package/dist/tools/update-doc.d.ts +62 -0
- package/dist/tools/update-doc.d.ts.map +1 -0
- package/dist/tools/update-doc.js +196 -0
- package/dist/tools/update-doc.js.map +1 -0
- package/dist/utils/config.d.ts +27 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +106 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/file-utils.d.ts +29 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +83 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/positioning.d.ts +16 -0
- package/dist/utils/positioning.d.ts.map +1 -0
- package/dist/utils/positioning.js +126 -0
- package/dist/utils/positioning.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { NotFoundError, } from '../models/types.js';
|
|
2
|
+
import { parseAccomplishment, serializeAccomplishment } from '../parsers/markdown-parser.js';
|
|
3
|
+
import { readFile, writeFileAtomic, deleteFile, listFiles } from '../utils/file-utils.js';
|
|
4
|
+
import { getAccomplishmentsPath, getAccomplishmentFilePath, getRelativeAccomplishmentPath, } from '../utils/config.js';
|
|
5
|
+
import { generateAccomplishmentId, addAccomplishmentNode, removeAccomplishmentNode, loadCanvas, getNodeIdsByFilePaths, updateNodePosition, } from './canvas-service.js';
|
|
6
|
+
import { calculatePosition } from '../utils/positioning.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create a new accomplishment
|
|
9
|
+
*/
|
|
10
|
+
export async function createAccomplishment(config, data) {
|
|
11
|
+
const canvasSource = data.canvas_source || config.defaultCanvas;
|
|
12
|
+
// Generate ID
|
|
13
|
+
const id = await generateAccomplishmentId(config, canvasSource);
|
|
14
|
+
// Create frontmatter
|
|
15
|
+
const now = new Date().toISOString();
|
|
16
|
+
const frontmatter = {
|
|
17
|
+
type: 'accomplishment',
|
|
18
|
+
title: data.title,
|
|
19
|
+
id,
|
|
20
|
+
effort: data.effort,
|
|
21
|
+
status: data.status || 'Not Started',
|
|
22
|
+
priority: data.priority || 'High',
|
|
23
|
+
inProgress: false,
|
|
24
|
+
depends_on: data.depends_on || [],
|
|
25
|
+
created_by_plugin: true,
|
|
26
|
+
collapsed_height: 300,
|
|
27
|
+
expanded_height: 300,
|
|
28
|
+
expanded_width: 400,
|
|
29
|
+
created: now,
|
|
30
|
+
updated: now,
|
|
31
|
+
canvas_source: canvasSource,
|
|
32
|
+
vault_path: getRelativeAccomplishmentPath(config, data.title),
|
|
33
|
+
};
|
|
34
|
+
// Create accomplishment object
|
|
35
|
+
const accomplishment = {
|
|
36
|
+
frontmatter,
|
|
37
|
+
outcome: data.outcome || 'Describe the final state that will be true once this is done.',
|
|
38
|
+
acceptance_criteria: data.acceptance_criteria || [],
|
|
39
|
+
tasks: [],
|
|
40
|
+
notes: '',
|
|
41
|
+
};
|
|
42
|
+
// Write MD file
|
|
43
|
+
const filePath = getAccomplishmentFilePath(config, data.title);
|
|
44
|
+
const content = serializeAccomplishment(accomplishment);
|
|
45
|
+
await writeFileAtomic(filePath, content);
|
|
46
|
+
// Calculate position based on dependencies
|
|
47
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
48
|
+
let dependsOnNodeIds = [];
|
|
49
|
+
if (data.depends_on && data.depends_on.length > 0) {
|
|
50
|
+
// Get file paths for dependencies
|
|
51
|
+
const depFilePaths = await getFilePathsForIds(config, data.depends_on);
|
|
52
|
+
dependsOnNodeIds = await getNodeIdsByFilePaths(config, depFilePaths, canvasSource);
|
|
53
|
+
}
|
|
54
|
+
const position = calculatePosition(canvas, dependsOnNodeIds);
|
|
55
|
+
// Add node to canvas
|
|
56
|
+
await addAccomplishmentNode(config, getRelativeAccomplishmentPath(config, data.title), position, canvasSource);
|
|
57
|
+
return accomplishment;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get an accomplishment by ID
|
|
61
|
+
*/
|
|
62
|
+
export async function getAccomplishment(config, id) {
|
|
63
|
+
const filePath = await findAccomplishmentFileById(config, id);
|
|
64
|
+
if (!filePath) {
|
|
65
|
+
throw new NotFoundError(`Accomplishment not found: ${id}`);
|
|
66
|
+
}
|
|
67
|
+
const content = await readFile(filePath);
|
|
68
|
+
const accomplishment = parseAccomplishment(content);
|
|
69
|
+
// Compute is_blocked
|
|
70
|
+
accomplishment.is_blocked = await isAccomplishmentBlocked(config, accomplishment);
|
|
71
|
+
return accomplishment;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Update an accomplishment
|
|
75
|
+
*/
|
|
76
|
+
export async function updateAccomplishment(config, id, data) {
|
|
77
|
+
const accomplishment = await getAccomplishment(config, id);
|
|
78
|
+
const oldTitle = accomplishment.frontmatter.title;
|
|
79
|
+
// Update frontmatter fields
|
|
80
|
+
if (data.title !== undefined)
|
|
81
|
+
accomplishment.frontmatter.title = data.title;
|
|
82
|
+
if (data.effort !== undefined)
|
|
83
|
+
accomplishment.frontmatter.effort = data.effort;
|
|
84
|
+
if (data.priority !== undefined)
|
|
85
|
+
accomplishment.frontmatter.priority = data.priority;
|
|
86
|
+
if (data.status !== undefined)
|
|
87
|
+
accomplishment.frontmatter.status = data.status;
|
|
88
|
+
if (data.inProgress !== undefined)
|
|
89
|
+
accomplishment.frontmatter.inProgress = data.inProgress;
|
|
90
|
+
// Update body sections
|
|
91
|
+
if (data.outcome !== undefined)
|
|
92
|
+
accomplishment.outcome = data.outcome;
|
|
93
|
+
if (data.acceptance_criteria !== undefined)
|
|
94
|
+
accomplishment.acceptance_criteria = data.acceptance_criteria;
|
|
95
|
+
if (data.notes !== undefined)
|
|
96
|
+
accomplishment.notes = data.notes;
|
|
97
|
+
// Update timestamp
|
|
98
|
+
accomplishment.frontmatter.updated = new Date().toISOString();
|
|
99
|
+
// Handle title change (file rename)
|
|
100
|
+
if (data.title && data.title !== oldTitle) {
|
|
101
|
+
const oldFilePath = getAccomplishmentFilePath(config, oldTitle);
|
|
102
|
+
const newFilePath = getAccomplishmentFilePath(config, data.title);
|
|
103
|
+
// Update vault_path in frontmatter
|
|
104
|
+
accomplishment.frontmatter.vault_path = getRelativeAccomplishmentPath(config, data.title);
|
|
105
|
+
// Write to new file
|
|
106
|
+
const content = serializeAccomplishment(accomplishment);
|
|
107
|
+
await writeFileAtomic(newFilePath, content);
|
|
108
|
+
// Delete old file
|
|
109
|
+
await deleteFile(oldFilePath);
|
|
110
|
+
// TODO: Update canvas node file reference
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Write to existing file
|
|
114
|
+
const filePath = getAccomplishmentFilePath(config, accomplishment.frontmatter.title);
|
|
115
|
+
const content = serializeAccomplishment(accomplishment);
|
|
116
|
+
await writeFileAtomic(filePath, content);
|
|
117
|
+
}
|
|
118
|
+
return accomplishment;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Delete an accomplishment
|
|
122
|
+
*/
|
|
123
|
+
export async function deleteAccomplishment(config, id) {
|
|
124
|
+
const accomplishment = await getAccomplishment(config, id);
|
|
125
|
+
const title = accomplishment.frontmatter.title;
|
|
126
|
+
const canvasSource = accomplishment.frontmatter.canvas_source;
|
|
127
|
+
// Delete MD file
|
|
128
|
+
const filePath = getAccomplishmentFilePath(config, title);
|
|
129
|
+
await deleteFile(filePath);
|
|
130
|
+
// Remove from canvas
|
|
131
|
+
await removeAccomplishmentNode(config, getRelativeAccomplishmentPath(config, title), canvasSource);
|
|
132
|
+
// Update other accomplishments that depend on this one
|
|
133
|
+
const allAccomplishments = await listAllAccomplishments(config);
|
|
134
|
+
for (const acc of allAccomplishments) {
|
|
135
|
+
if (acc.frontmatter.depends_on.includes(id)) {
|
|
136
|
+
acc.frontmatter.depends_on = acc.frontmatter.depends_on.filter(depId => depId !== id);
|
|
137
|
+
acc.frontmatter.updated = new Date().toISOString();
|
|
138
|
+
const accFilePath = getAccomplishmentFilePath(config, acc.frontmatter.title);
|
|
139
|
+
const content = serializeAccomplishment(acc);
|
|
140
|
+
await writeFileAtomic(accFilePath, content);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* List all accomplishments
|
|
146
|
+
*/
|
|
147
|
+
export async function listAllAccomplishments(config) {
|
|
148
|
+
const accomplishmentsPath = getAccomplishmentsPath(config);
|
|
149
|
+
const files = await listFiles(accomplishmentsPath);
|
|
150
|
+
const accomplishments = [];
|
|
151
|
+
for (const file of files) {
|
|
152
|
+
if (!file.endsWith('.md'))
|
|
153
|
+
continue;
|
|
154
|
+
try {
|
|
155
|
+
const filePath = `${accomplishmentsPath}/${file}`;
|
|
156
|
+
const content = await readFile(filePath);
|
|
157
|
+
const accomplishment = parseAccomplishment(content);
|
|
158
|
+
accomplishment.is_blocked = await isAccomplishmentBlocked(config, accomplishment);
|
|
159
|
+
accomplishments.push(accomplishment);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Skip files that can't be parsed
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return accomplishments;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* List accomplishments with optional filtering
|
|
169
|
+
*/
|
|
170
|
+
export async function listAccomplishments(config, status, canvasSource) {
|
|
171
|
+
const accomplishments = await listAllAccomplishments(config);
|
|
172
|
+
let filtered = accomplishments;
|
|
173
|
+
if (status) {
|
|
174
|
+
filtered = filtered.filter(a => a.frontmatter.status === status);
|
|
175
|
+
}
|
|
176
|
+
if (canvasSource) {
|
|
177
|
+
filtered = filtered.filter(a => a.frontmatter.canvas_source === canvasSource);
|
|
178
|
+
}
|
|
179
|
+
return filtered.map(a => toSummary(a));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Convert accomplishment to summary
|
|
183
|
+
*/
|
|
184
|
+
function toSummary(accomplishment) {
|
|
185
|
+
const completedTasks = accomplishment.tasks.filter(t => t.status === 'Complete').length;
|
|
186
|
+
return {
|
|
187
|
+
id: accomplishment.frontmatter.id,
|
|
188
|
+
title: accomplishment.frontmatter.title,
|
|
189
|
+
status: accomplishment.frontmatter.status,
|
|
190
|
+
priority: accomplishment.frontmatter.priority,
|
|
191
|
+
effort: accomplishment.frontmatter.effort,
|
|
192
|
+
inProgress: accomplishment.frontmatter.inProgress,
|
|
193
|
+
is_blocked: accomplishment.is_blocked || false,
|
|
194
|
+
depends_on: accomplishment.frontmatter.depends_on,
|
|
195
|
+
task_count: accomplishment.tasks.length,
|
|
196
|
+
completed_task_count: completedTasks,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Check if an accomplishment is blocked by incomplete dependencies
|
|
201
|
+
*/
|
|
202
|
+
async function isAccomplishmentBlocked(config, accomplishment) {
|
|
203
|
+
const dependsOn = accomplishment.frontmatter.depends_on;
|
|
204
|
+
if (!dependsOn || dependsOn.length === 0) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
for (const depId of dependsOn) {
|
|
208
|
+
try {
|
|
209
|
+
const dep = await getAccomplishmentById(config, depId);
|
|
210
|
+
if (dep && dep.frontmatter.status !== 'Completed') {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Dependency not found - consider it blocking
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Find accomplishment file path by ID
|
|
223
|
+
*/
|
|
224
|
+
async function findAccomplishmentFileById(config, id) {
|
|
225
|
+
const accomplishmentsPath = getAccomplishmentsPath(config);
|
|
226
|
+
const files = await listFiles(accomplishmentsPath);
|
|
227
|
+
for (const file of files) {
|
|
228
|
+
if (!file.endsWith('.md'))
|
|
229
|
+
continue;
|
|
230
|
+
const filePath = `${accomplishmentsPath}/${file}`;
|
|
231
|
+
try {
|
|
232
|
+
const content = await readFile(filePath);
|
|
233
|
+
const idMatch = content.match(/^id:\s*(.+)$/m);
|
|
234
|
+
if (idMatch && idMatch[1].trim() === id) {
|
|
235
|
+
return filePath;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// Skip unreadable files
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get accomplishment by ID (internal helper)
|
|
246
|
+
*/
|
|
247
|
+
async function getAccomplishmentById(config, id) {
|
|
248
|
+
const filePath = await findAccomplishmentFileById(config, id);
|
|
249
|
+
if (!filePath)
|
|
250
|
+
return null;
|
|
251
|
+
const content = await readFile(filePath);
|
|
252
|
+
return parseAccomplishment(content);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get file paths for accomplishment IDs
|
|
256
|
+
*/
|
|
257
|
+
async function getFilePathsForIds(config, ids) {
|
|
258
|
+
const paths = [];
|
|
259
|
+
for (const id of ids) {
|
|
260
|
+
const acc = await getAccomplishmentById(config, id);
|
|
261
|
+
if (acc) {
|
|
262
|
+
paths.push(getRelativeAccomplishmentPath(config, acc.frontmatter.title));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return paths;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Reposition an accomplishment based on its dependencies
|
|
269
|
+
*/
|
|
270
|
+
export async function repositionAccomplishment(config, id) {
|
|
271
|
+
const accomplishment = await getAccomplishment(config, id);
|
|
272
|
+
const canvasSource = accomplishment.frontmatter.canvas_source;
|
|
273
|
+
// Get dependency node IDs
|
|
274
|
+
const depFilePaths = await getFilePathsForIds(config, accomplishment.frontmatter.depends_on);
|
|
275
|
+
const depNodeIds = await getNodeIdsByFilePaths(config, depFilePaths, canvasSource);
|
|
276
|
+
// Calculate new position
|
|
277
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
278
|
+
const position = calculatePosition(canvas, depNodeIds);
|
|
279
|
+
// Update node position
|
|
280
|
+
const filePath = getRelativeAccomplishmentPath(config, accomplishment.frontmatter.title);
|
|
281
|
+
await updateNodePosition(config, filePath, position, canvasSource);
|
|
282
|
+
return position;
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=accomplishment-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accomplishment-service.js","sourceRoot":"","sources":["../../src/services/accomplishment-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CanvasFile, CanvasNode, CanvasEdge, Config } from '../models/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load a canvas file
|
|
4
|
+
*/
|
|
5
|
+
export declare function loadCanvas(config: Config, canvasSource?: string): Promise<CanvasFile>;
|
|
6
|
+
/**
|
|
7
|
+
* Save a canvas file
|
|
8
|
+
*/
|
|
9
|
+
export declare function saveCanvas(config: Config, canvas: CanvasFile, canvasSource?: string): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Get all accomplishment IDs from canvas by reading file nodes
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAllAccomplishmentIds(config: Config, canvasSource?: string): Promise<string[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Generate next accomplishment ID
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateAccomplishmentId(config: Config, canvasSource?: string): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Add a node to canvas for an accomplishment
|
|
20
|
+
*/
|
|
21
|
+
export declare function addAccomplishmentNode(config: Config, filePath: string, position: {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
}, canvasSource?: string): Promise<CanvasNode>;
|
|
25
|
+
/**
|
|
26
|
+
* Remove an accomplishment node from canvas
|
|
27
|
+
*/
|
|
28
|
+
export declare function removeAccomplishmentNode(config: Config, filePath: string, canvasSource?: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Update node position
|
|
31
|
+
*/
|
|
32
|
+
export declare function updateNodePosition(config: Config, filePath: string, position: {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
}, canvasSource?: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Add a dependency edge between two accomplishments
|
|
38
|
+
*/
|
|
39
|
+
export declare function addDependencyEdge(config: Config, blockerFilePath: string, blockedFilePath: string, canvasSource?: string): Promise<CanvasEdge | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Remove a dependency edge
|
|
42
|
+
*/
|
|
43
|
+
export declare function removeDependencyEdge(config: Config, blockerFilePath: string, blockedFilePath: string, canvasSource?: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Get node by file path
|
|
46
|
+
*/
|
|
47
|
+
export declare function getNodeByFilePath(config: Config, filePath: string, canvasSource?: string): Promise<CanvasNode | undefined>;
|
|
48
|
+
/**
|
|
49
|
+
* Get node IDs for given file paths
|
|
50
|
+
*/
|
|
51
|
+
export declare function getNodeIdsByFilePaths(config: Config, filePaths: string[], canvasSource?: string): Promise<string[]>;
|
|
52
|
+
//# sourceMappingURL=canvas-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-service.d.ts","sourceRoot":"","sources":["../../src/services/canvas-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,MAAM,EAEP,MAAM,oBAAoB,CAAC;AAM5B;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAS3F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBnB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAClC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAClC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA8B5B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAGjC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAYnB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
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
|
+
* Load a canvas file
|
|
8
|
+
*/
|
|
9
|
+
export async function loadCanvas(config, canvasSource) {
|
|
10
|
+
const canvasPath = getCanvasPath(config, canvasSource);
|
|
11
|
+
if (!(await fileExists(canvasPath))) {
|
|
12
|
+
throw new NotFoundError(`Canvas file not found: ${canvasPath}`);
|
|
13
|
+
}
|
|
14
|
+
const content = await readFile(canvasPath);
|
|
15
|
+
return parseCanvas(content);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Save a canvas file
|
|
19
|
+
*/
|
|
20
|
+
export async function saveCanvas(config, canvas, canvasSource) {
|
|
21
|
+
const canvasPath = getCanvasPath(config, canvasSource);
|
|
22
|
+
const content = serializeCanvas(canvas);
|
|
23
|
+
await writeFileAtomic(canvasPath, content);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get all accomplishment IDs from canvas by reading file nodes
|
|
27
|
+
*/
|
|
28
|
+
export async function getAllAccomplishmentIds(config, canvasSource) {
|
|
29
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
30
|
+
const ids = [];
|
|
31
|
+
// Get all file nodes that are in the accomplishments folder
|
|
32
|
+
for (const node of canvas.nodes) {
|
|
33
|
+
if (node.type === 'file' && node.file?.startsWith(config.accomplishmentsFolder)) {
|
|
34
|
+
// Read the file to get the ID from frontmatter
|
|
35
|
+
try {
|
|
36
|
+
const filePath = `${config.vaultPath}/${node.file}`;
|
|
37
|
+
const content = await readFile(filePath);
|
|
38
|
+
const idMatch = content.match(/^id:\s*(.+)$/m);
|
|
39
|
+
if (idMatch) {
|
|
40
|
+
ids.push(idMatch[1].trim());
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// File might not exist or be readable
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return ids;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Generate next accomplishment ID
|
|
52
|
+
*/
|
|
53
|
+
export async function generateAccomplishmentId(config, canvasSource) {
|
|
54
|
+
const existingIds = await getAllAccomplishmentIds(config, canvasSource);
|
|
55
|
+
const numbers = existingIds
|
|
56
|
+
.map(id => {
|
|
57
|
+
const match = id.match(/^ACC-(\d+)$/);
|
|
58
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
59
|
+
})
|
|
60
|
+
.filter(n => !isNaN(n));
|
|
61
|
+
const maxNumber = numbers.length > 0 ? Math.max(...numbers) : 0;
|
|
62
|
+
return `ACC-${String(maxNumber + 1).padStart(3, '0')}`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Add a node to canvas for an accomplishment
|
|
66
|
+
*/
|
|
67
|
+
export async function addAccomplishmentNode(config, filePath, position, canvasSource) {
|
|
68
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
69
|
+
const node = {
|
|
70
|
+
id: generateId(),
|
|
71
|
+
type: 'file',
|
|
72
|
+
file: filePath,
|
|
73
|
+
x: position.x,
|
|
74
|
+
y: position.y,
|
|
75
|
+
width: 400,
|
|
76
|
+
height: 300,
|
|
77
|
+
};
|
|
78
|
+
canvas.nodes.push(node);
|
|
79
|
+
await saveCanvas(config, canvas, canvasSource);
|
|
80
|
+
return node;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove an accomplishment node from canvas
|
|
84
|
+
*/
|
|
85
|
+
export async function removeAccomplishmentNode(config, filePath, canvasSource) {
|
|
86
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
87
|
+
const node = findNodeByFile(canvas, filePath);
|
|
88
|
+
if (!node)
|
|
89
|
+
return;
|
|
90
|
+
// Remove node and all associated edges
|
|
91
|
+
canvas.nodes = canvas.nodes.filter(n => n.id !== node.id);
|
|
92
|
+
canvas.edges = canvas.edges.filter(e => e.fromNode !== node.id && e.toNode !== node.id);
|
|
93
|
+
await saveCanvas(config, canvas, canvasSource);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Update node position
|
|
97
|
+
*/
|
|
98
|
+
export async function updateNodePosition(config, filePath, position, canvasSource) {
|
|
99
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
100
|
+
const node = findNodeByFile(canvas, filePath);
|
|
101
|
+
if (!node)
|
|
102
|
+
return;
|
|
103
|
+
node.x = position.x;
|
|
104
|
+
node.y = position.y;
|
|
105
|
+
await saveCanvas(config, canvas, canvasSource);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Add a dependency edge between two accomplishments
|
|
109
|
+
*/
|
|
110
|
+
export async function addDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource) {
|
|
111
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
112
|
+
const blockerNode = findNodeByFile(canvas, blockerFilePath);
|
|
113
|
+
const blockedNode = findNodeByFile(canvas, blockedFilePath);
|
|
114
|
+
if (!blockerNode || !blockedNode) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
// Check if edge already exists
|
|
118
|
+
const existingEdge = canvas.edges.find(e => e.fromNode === blockerNode.id && e.toNode === blockedNode.id);
|
|
119
|
+
if (existingEdge) {
|
|
120
|
+
return existingEdge;
|
|
121
|
+
}
|
|
122
|
+
const edge = {
|
|
123
|
+
id: generateId(),
|
|
124
|
+
fromNode: blockerNode.id,
|
|
125
|
+
toNode: blockedNode.id,
|
|
126
|
+
fromSide: 'right',
|
|
127
|
+
toSide: 'left',
|
|
128
|
+
};
|
|
129
|
+
canvas.edges.push(edge);
|
|
130
|
+
await saveCanvas(config, canvas, canvasSource);
|
|
131
|
+
return edge;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Remove a dependency edge
|
|
135
|
+
*/
|
|
136
|
+
export async function removeDependencyEdge(config, blockerFilePath, blockedFilePath, canvasSource) {
|
|
137
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
138
|
+
const blockerNode = findNodeByFile(canvas, blockerFilePath);
|
|
139
|
+
const blockedNode = findNodeByFile(canvas, blockedFilePath);
|
|
140
|
+
if (!blockerNode || !blockedNode)
|
|
141
|
+
return;
|
|
142
|
+
canvas.edges = canvas.edges.filter(e => !(e.fromNode === blockerNode.id && e.toNode === blockedNode.id));
|
|
143
|
+
await saveCanvas(config, canvas, canvasSource);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get node by file path
|
|
147
|
+
*/
|
|
148
|
+
export async function getNodeByFilePath(config, filePath, canvasSource) {
|
|
149
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
150
|
+
return findNodeByFile(canvas, filePath);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get node IDs for given file paths
|
|
154
|
+
*/
|
|
155
|
+
export async function getNodeIdsByFilePaths(config, filePaths, canvasSource) {
|
|
156
|
+
const canvas = await loadCanvas(config, canvasSource);
|
|
157
|
+
const nodeIds = [];
|
|
158
|
+
for (const filePath of filePaths) {
|
|
159
|
+
const node = findNodeByFile(canvas, filePath);
|
|
160
|
+
if (node) {
|
|
161
|
+
nodeIds.push(node.id);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return nodeIds;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=canvas-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-service.js","sourceRoot":"","sources":["../../src/services/canvas-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-doc-service.d.ts","sourceRoot":"","sources":["../../src/services/context-doc-service.ts"],"names":[],"mappings":"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"}
|