fix(ai-chat): wire drawio CRUD tools in-app to restore SHARED_TOOL_SPECS parity
PR #434 (drawio stage 1) added drawioGet/drawioCreate/drawioUpdate to the shared tool-spec registry with in-app metadata (inAppKey, deferred tier, catalogLine) but wired them only in the standalone MCP server, breaking the contract-parity and phantom-catalog unit tests on develop CI. - expose drawioGet/drawioCreate/drawioUpdate in forUser() via sharedTool(), mirroring the MCP transport's argument mapping (format ?? 'xml' default, flat schema regrouped into the client's `where` object, positional baseHash pass-through) - extend the DocmostClientLike hand-mirror with the three client methods - append the three names to the HOST_CONTRACT_METHODS drift-guard whitelist Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -729,6 +729,35 @@ export class AiChatToolsService {
|
|||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// Schema + description live in @docmost/mcp's SHARED_TOOL_SPECS (#423).
|
||||||
|
// meta.hash in the result is the baseHash drawioUpdate requires.
|
||||||
|
drawioGet: sharedTool(
|
||||||
|
sharedToolSpecs.drawioGet,
|
||||||
|
async ({ pageId, node, format }) =>
|
||||||
|
await client.drawioGet(pageId, node, format ?? 'xml'),
|
||||||
|
),
|
||||||
|
|
||||||
|
// Schema + description live in @docmost/mcp's SHARED_TOOL_SPECS (#423).
|
||||||
|
// The flat schema fields are regrouped into the client's `where` object.
|
||||||
|
drawioCreate: sharedTool(
|
||||||
|
sharedToolSpecs.drawioCreate,
|
||||||
|
async ({ pageId, xml, position, anchorNodeId, anchorText, title }) =>
|
||||||
|
await client.drawioCreate(
|
||||||
|
pageId,
|
||||||
|
{ position, anchorNodeId, anchorText },
|
||||||
|
xml,
|
||||||
|
title,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
// Schema + description live in @docmost/mcp's SHARED_TOOL_SPECS (#423).
|
||||||
|
// baseHash is the optimistic lock: mismatch => structured conflict error.
|
||||||
|
drawioUpdate: sharedTool(
|
||||||
|
sharedToolSpecs.drawioUpdate,
|
||||||
|
async ({ pageId, node, xml, baseHash }) =>
|
||||||
|
await client.drawioUpdate(pageId, node, xml, baseHash),
|
||||||
|
),
|
||||||
|
|
||||||
// Schema + description now live in @docmost/mcp's SHARED_TOOL_SPECS (#294).
|
// Schema + description now live in @docmost/mcp's SHARED_TOOL_SPECS (#294).
|
||||||
// The table reference parameter was unified to `table` (was `tableRef`).
|
// The table reference parameter was unified to `table` (was `tableRef`).
|
||||||
tableInsertRow: sharedTool(
|
tableInsertRow: sharedTool(
|
||||||
|
|||||||
@@ -168,6 +168,32 @@ export interface DocmostClientLike {
|
|||||||
url: string,
|
url: string,
|
||||||
opts?: { align?: 'left' | 'center' | 'right'; alt?: string },
|
opts?: { align?: 'left' | 'center' | 'right'; alt?: string },
|
||||||
): Promise<Record<string, unknown>>;
|
): Promise<Record<string, unknown>>;
|
||||||
|
// --- draw.io diagrams (#423, stage 1) ---
|
||||||
|
// Read a diagram as decoded mxGraph XML (default) or the raw .drawio.svg.
|
||||||
|
// meta.hash is the optimistic-lock key drawioUpdate expects as baseHash.
|
||||||
|
drawioGet(
|
||||||
|
pageId: string,
|
||||||
|
node: string,
|
||||||
|
format?: 'xml' | 'svg',
|
||||||
|
): Promise<Record<string, unknown>>;
|
||||||
|
// Lint mxGraph XML, build the .drawio.svg attachment and insert a drawio node.
|
||||||
|
drawioCreate(
|
||||||
|
pageId: string,
|
||||||
|
where: {
|
||||||
|
position: 'before' | 'after' | 'append';
|
||||||
|
anchorNodeId?: string;
|
||||||
|
anchorText?: string;
|
||||||
|
},
|
||||||
|
xml: string,
|
||||||
|
title?: string,
|
||||||
|
): Promise<Record<string, unknown>>;
|
||||||
|
// Optimistic-locked full replacement of a diagram (baseHash from drawioGet).
|
||||||
|
drawioUpdate(
|
||||||
|
pageId: string,
|
||||||
|
node: string,
|
||||||
|
xml: string,
|
||||||
|
baseHash: string,
|
||||||
|
): Promise<Record<string, unknown>>;
|
||||||
tableInsertRow(
|
tableInsertRow(
|
||||||
pageId: string,
|
pageId: string,
|
||||||
tableRef: string,
|
tableRef: string,
|
||||||
|
|||||||
@@ -81,6 +81,10 @@ const HOST_CONTRACT_METHODS = [
|
|||||||
"insertImage",
|
"insertImage",
|
||||||
"replaceImage",
|
"replaceImage",
|
||||||
"insertFootnote",
|
"insertFootnote",
|
||||||
|
// draw.io diagrams (#423, stage 1) — read + create + optimistic-locked update
|
||||||
|
"drawioGet",
|
||||||
|
"drawioCreate",
|
||||||
|
"drawioUpdate",
|
||||||
// write (comment)
|
// write (comment)
|
||||||
"createComment",
|
"createComment",
|
||||||
"resolveComment",
|
"resolveComment",
|
||||||
|
|||||||
Reference in New Issue
Block a user