feat: Phase 7 - Waypoint Support
- Add get_folder_waypoint tool to extract waypoint blocks from folder notes - Add is_folder_note tool to detect folder notes by basename or waypoint markers - Implement waypoint edit protection in update_note to prevent corruption - Create waypoint-utils.ts with helper functions for waypoint operations - Add FolderWaypointResult and FolderNoteResult types - Update ROADMAP.md and CHANGELOG.md with Phase 7 completion - All manual tests passing
This commit is contained in:
@@ -3,6 +3,7 @@ import { CallToolResult, ParsedNote, ExcalidrawMetadata } from '../types/mcp-typ
|
||||
import { PathUtils } from '../utils/path-utils';
|
||||
import { ErrorMessages } from '../utils/error-messages';
|
||||
import { FrontmatterUtils } from '../utils/frontmatter-utils';
|
||||
import { WaypointUtils } from '../utils/waypoint-utils';
|
||||
|
||||
export class NoteTools {
|
||||
constructor(private app: App) {}
|
||||
@@ -230,6 +231,28 @@ export class NoteTools {
|
||||
}
|
||||
|
||||
try {
|
||||
// Check for waypoint edit protection
|
||||
const currentContent = await this.app.vault.read(file);
|
||||
const waypointCheck = WaypointUtils.wouldAffectWaypoint(currentContent, content);
|
||||
|
||||
if (waypointCheck.affected) {
|
||||
return {
|
||||
content: [{
|
||||
type: "text",
|
||||
text: `Cannot update note: This would modify a Waypoint block.\n\n` +
|
||||
`Waypoint blocks (%% Begin Waypoint %% ... %% End Waypoint %%) are auto-generated ` +
|
||||
`by the Waypoint plugin and should not be manually edited.\n\n` +
|
||||
`Waypoint location: lines ${waypointCheck.waypointRange?.start}-${waypointCheck.waypointRange?.end}\n\n` +
|
||||
`Troubleshooting tips:\n` +
|
||||
`• Use get_folder_waypoint() to view the current waypoint content\n` +
|
||||
`• Edit content outside the waypoint block\n` +
|
||||
`• Let the Waypoint plugin regenerate the block automatically\n` +
|
||||
`• If you need to force this edit, the waypoint will need to be regenerated`
|
||||
}],
|
||||
isError: true
|
||||
};
|
||||
}
|
||||
|
||||
await this.app.vault.modify(file, content);
|
||||
return {
|
||||
content: [{ type: "text", text: `Note updated successfully: ${file.path}` }]
|
||||
|
||||
Reference in New Issue
Block a user