Files
2026-05-30 14:16:04 -05:00

80 lines
2.3 KiB
TypeScript

import { Type } from "@sinclair/typebox"
import type { OpenClawPluginApi } from "openclaw/plugin-sdk/plugin-entry"
import type { BmClient } from "../bm-client.ts"
import { log } from "../logger.ts"
export function registerMoveTool(
api: OpenClawPluginApi,
client: BmClient,
): void {
api.registerTool(
{
name: "move_note",
label: "Move Note",
description:
"Move a note to a different folder in the Basic Memory knowledge graph. " +
"The note content is preserved; only the location changes.",
parameters: Type.Object({
identifier: Type.String({
description: "Note title, permalink, or memory:// URL to move",
}),
newFolder: Type.String({
description:
"Destination folder (e.g., 'archive', 'projects/completed')",
}),
project: Type.Optional(
Type.String({
description: "Target project name (defaults to current project)",
}),
),
}),
async execute(
_toolCallId: string,
params: { identifier: string; newFolder: string; project?: string },
) {
log.debug(
`move_note: identifier="${params.identifier}" → folder="${params.newFolder}"`,
)
try {
const result = await client.moveNote(
params.identifier,
params.newFolder,
params.project,
)
return {
content: [
{
type: "text" as const,
text: `Moved: ${result.title}${result.file_path}`,
},
],
details: {
title: result.title,
permalink: result.permalink,
file_path: result.file_path,
},
}
} catch (err) {
log.error("move_note failed", err)
return {
content: [
{
type: "text" as const,
text: `Failed to move "${params.identifier}". It may not exist.`,
},
],
details: {
identifier: params.identifier,
newFolder: params.newFolder,
error: "move_note_failed",
},
}
}
},
},
{ name: "move_note" },
)
}