New

docx-editor 1.x has shipped. Vue support, i18n, agents. Read the migration guide →

API Referencev1.0.2

@eigenpal/docx-editor-agents/server

Server entry for API routes, Node.js, serverless functions, and Workers.

Import the toolkit here without pulling in React peer deps. Use this from Next.js routes, a FastAPI bridge, a Cloudflare Worker, or any other backend that streams an LLM call with tool definitions.

Functions(4)

Create an EditorBridge backed by a DocxReviewer. The agent (or MCP client) can read, comment, propose changes, etc., against a parsed DOCX file on disk. Call `reviewer.toBuffer()` afterwards to get the modified DOCX.

declare function createReviewerBridge(reviewer: DocxReviewer): EditorBridge;

Execute a tool call against an EditorBridge. Returns the result (never throws).

declare function executeToolCall(toolName: string, input: Record<string, unknown>, bridge: EditorBridge): AgentToolResult;

Friendly UI label for a tool — sourced from the registry's `displayName`, falling back to a sentence-case version of the snake_case name. Used by `<AgentTimeline>` and any other UI that lists running / completed tools.

declare function getToolDisplayName(name: string): string;
getToolDisplayName('add_comment') // → 'Adding comment'
getToolDisplayName('fetch_clause_template') // → 'Fetch clause template'

Get tool schemas in OpenAI function-calling format. Works directly with the OpenAI SDK and Anthropic's tools API. For Vercel AI SDK, LangChain, or other agent runtimes, transform this output to that runtime's required shape — see `examples/agent-chat-demo/` for a Vercel AI SDK example. The package stays runtime-agnostic.

declare function getToolSchemas(): {
    type: "function";
    function: {
        name: string;
        description: string;
        parameters: Record<string, unknown>;
    };
}[];

Classes(1)

Headless DOCX reviewer — parse a file, read/comment/track changes against the document model, write the modified DOCX back out. No DOM, no editor instance. Pair with `createReviewerBridge()` to drive the built-in agent tools against a file on disk.

declare class DocxReviewer
```ts
const reviewer = await DocxReviewer.fromBuffer(buffer, 'AI Reviewer');
reviewer.addComment(5, 'Fix this paragraph.');
reviewer.replace(5, '$50k', '$500k');
const output = await reviewer.toBuffer();
```
MemberTypeSummary
(constructor)Create a reviewer from a parsed Document.
acceptAllAccept all tracked changes. Returns count accepted.
acceptChangeAccept a tracked change by its revision ID.
addCommentAdd a comment on a paragraph.
addCommentAdd a comment with full options (custom author, anchored to specific text).
applyReviewApply multiple review operations in one call. Uses the reviewer's default author. Individual failures are collected, not thrown.
authorstringDefault author for comments and tracked changes. Set once, used everywhere.
fromBufferCreate a reviewer from a DOCX file buffer.
getChangesGet all tracked changes in the document.
getCommentsGet all comments with their replies.
getContentGet document content as structured blocks (headings, paragraphs, tables, lists).
getContentAsTextGet document content as plain text for LLM prompts. Each paragraph is prefixed with its index: `[0] text`, `[1] text`, etc. Table cells include position: `[5] (table, row 1, col 2) cell text`. Avoids JSON quote-escaping issues — LLMs can copy text verbatim.
proposeDeletionDelete text as a tracked change.
proposeInsertionInsert text as a tracked change.
proposeReplacement
rejectAllReject all tracked changes. Returns count rejected.
rejectChangeReject a tracked change by its revision ID.
removeCommentRemove a comment by ID. Removing a top-level comment also removes its replies and the anchored range markers. Removing a reply only removes that reply.
replaceReplace text in a paragraph. Creates a tracked change (deletion + insertion).
replaceReplace text with full options.
replyToReply to an existing comment.
replyToReply to an existing comment with full options.
toBufferSerialize back to a DOCX buffer. Requires the original buffer.
toDocumentGet the modified Document model.

Interfaces(5)

interface

AgentContextSnapshot

packages/agents/src/types.ts:250

Snapshot of what the user is looking at — pass this to your agent's system prompt so it knows the current selection / page without an extra `read_selection` round-trip.

interface AgentContextSnapshot
MemberTypeSummary
currentPagenumber1-indexed page the cursor / selection is on. 0 if unknown.
selectionSelectionInfo | nullUser's current selection or cursor (null if editor isn't focused).
totalPagesnumberTotal number of pages currently rendered.
interface

AgentToolDefinition

packages/agents/src/tools/types.ts:13

Definition of an agent tool — name, JSON-schema input, handler. Use this to build custom tools alongside the built-in `agentTools`.

interface AgentToolDefinition<TInput = Record<string, unknown>>
MemberTypeSummary
descriptionstringHuman-readable description for the LLM
displayName?stringFriendly UI label for the tool. Shown in the agent panel's timeline (e.g. "Reading document"). Falls back to a sentence-case version of `name` if omitted, so consumer-defined tools render readably without specifying this.
handler(input: TInput, bridge: EditorBridge) => AgentToolResultHandler — receives parsed input + bridge, returns result
inputSchemaRecord<string, unknown>JSON Schema for the input parameters
namestringTool name (used in tool_use blocks)

Result returned by a tool handler. `success: false` carries an `error` message; `success: true` may carry tool-specific `data`.

interface AgentToolResult
MemberTypeSummary
data?unknown
error?string
successboolean

High-level agent surface over a live editor (or a headless reviewer). Every built-in tool calls into this contract — implement it once and the agent toolkit works against your editor.

interface EditorBridge
MemberTypeSummary
addCommentAdd a comment, anchored to a paragraph by paraId.
applyFormattingApply character formatting (bold / italic / color / size / font / etc.) to a paragraph, or to a unique phrase within it. This is a direct edit — not a tracked change.
findTextLocate text in the document. Returns one handle per matching paragraph.
getChangesGet all tracked changes in the document.
getCommentsGet all comments in the document.
getContentGet document content as structured blocks (each paragraph carries its `paraId`).
getContentAsTextGet document content as paraId-tagged text lines for LLM prompts.
getCurrentPage1-indexed page the user's cursor / selection is on. 0 if unknown.
getPageRead a single page (1-indexed). Returns null if the page does not exist.
getPagesRead a range of pages (1-indexed, inclusive). Out-of-range pages are skipped.
getSelectionRead the user's current cursor / selection.
getTotalPagesTotal number of pages currently rendered in the editor.
onContentChangeSubscribe to document content changes. Returns an unsubscribe function.
onSelectionChangeSubscribe to selection changes (cursor moves / selection changes). Returns an unsubscribe function.
proposeChangeSuggest a tracked change. `replaceWith=''` deletes; `search=''` inserts at paragraph end.
replyToReply to an existing comment. Returns the reply ID or null.
resolveCommentResolve a comment (mark as done).
scrollToScroll the editor to a paragraph by paraId.
setParagraphStyleApply a paragraph style by styleId (e.g. `'Heading1'`, `'Quote'`). Direct edit, not a tracked change.
interface SelectionInfo
MemberTypeSummary
afterstring
beforestring
paragraphTextstring
paraIdstring | null
selectedTextstring

Variables(1)

const

docxAgentTools

All built-in agent tools — read/write document content, comments, and tracked changes. Use `getToolSchemas()` to feed them to an LLM and `executeToolCall()` to run the handlers against an `EditorBridge`.

agentTools: AgentToolDefinition<any>[]