@eigenpal/docx-editor-agents/bridge
Editor bridge that connects agent tools to a live DocxEditor instance. Framework-agnostic. The React adapter lives in @eigenpal/docx-editor-agents/react.
Functions (4)
createEditorBridgefunctionSource ↗
Create an EditorBridge from a DocxEditorRef.
declare function createEditorBridge(editorRef: EditorRefLike, author?: string): EditorBridge;createReviewerBridgefunctionSource ↗
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;executeToolCallfunctionSource ↗
Execute a tool call against an EditorBridge. Returns the result (never throws).
declare function executeToolCall(toolName: string, input: Record<string, unknown>, bridge: EditorBridge): AgentToolResult;getToolSchemasfunctionSource ↗
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>;
};
}[];Interfaces (7)
AgentToolDefinitioninterfaceSource ↗
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>>| Member | Type | Summary |
|---|---|---|
| description | string | Human-readable description for the LLM |
| displayName? | string | Friendly 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) => AgentToolResult | Handler — receives parsed input + bridge, returns result |
| inputSchema | Record<string, unknown> | JSON Schema for the input parameters |
| name | string | Tool name (used in tool_use blocks) |
AgentToolResultinterfaceSource ↗
Result returned by a tool handler. success: false carries an error message; success: true may carry tool-specific data.
interface AgentToolResult| Member | Type | Summary |
|---|---|---|
| data? | unknown | |
| error? | string | |
| success | boolean |
ContentChangeEventinterfaceSource ↗
Event payload for onContentChange.
interface ContentChangeEvent| Member | Type | Summary |
|---|---|---|
| changeCount | number | Total tracked changes after the change. |
| changes | ReviewChange[] | Snapshot of all current tracked changes. |
| commentCount | number | Total comments in the document after the change. |
| comments | ReviewComment[] | Snapshot of all current comments. |
EditorBridgeinterfaceSource ↗
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| Member | Type | Summary |
|---|---|---|
| addComment | | Add a comment, anchored to a paragraph by paraId. |
| applyFormatting | | Apply 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. |
| findText | | Locate text in the document. Returns one handle per matching paragraph. |
| getChanges | | Get all tracked changes in the document. |
| getComments | | Get all comments in the document. |
| getContent | | Get document content as structured blocks (each paragraph carries its `paraId`). |
| getContentAsText | | Get document content as paraId-tagged text lines for LLM prompts. |
| getCurrentPage | | 1-indexed page the user's cursor / selection is on. 0 if unknown. |
| getPage | | Read a single page (1-indexed). Returns null if the page does not exist. |
| getPages | | Read a range of pages (1-indexed, inclusive). Out-of-range pages are skipped. |
| getSelection | | Read the user's current cursor / selection. |
| getTotalPages | | Total number of pages currently rendered in the editor. |
| insertBreak | | Insert a page or section break after a paragraph, by paraId. `page` adds a page break; `sectionNextPage` / `sectionContinuous` start a new section on a new page / the same page. Direct edit, not a tracked change. |
| onContentChange | | Subscribe to document content changes. Returns an unsubscribe function. |
| onSelectionChange | | Subscribe to selection changes (cursor moves / selection changes). Returns an unsubscribe function. |
| proposeChange | | Suggest a tracked change. `replaceWith=''` deletes; `search=''` inserts at paragraph end. |
| replyTo | | Reply to an existing comment. Returns the reply ID or null. |
| resolveComment | | Resolve a comment (mark as done). |
| scrollTo | | Scroll the editor to a paragraph by paraId, optionally flashing it. |
| setParagraphStyle | | Apply a paragraph style by styleId (e.g. `'Heading1'`, `'Quote'`). Direct edit, not a tracked change. |
EditorRefLikeinterfaceSource ↗
Agent-bridge contract every editor adapter (React, Vue, future) MUST satisfy. Versioning: additions are coordinated minor bumps across the fixed group; signature changes / removals are major. See openspec/changes/vue-editor-robust-implementation/design.md Decision 18.
interface EditorRefLike| Member | Type | Summary |
|---|---|---|
| addComment | | |
| applyFormatting | | Apply character formatting to a paragraph or sub-range. Returns false on missing paraId / ambiguous search. |
| findInDocument | | |
| getComments | | |
| getCurrentPage | | 1-indexed page the user's cursor / selection is on. 0 if unknown. |
| getDocument | | |
| getEditorRef | | |
| getPageContent | | Read a single page's paragraphs (1-indexed). Returns null if the page does not exist. |
| getSelectionInfo | | |
| getTotalPages | | Total number of pages currently rendered. |
| insertBreak | | Insert a page or section break after the paragraph. Returns false if paraId is unknown. |
| onContentChange | | |
| onSelectionChange | | |
| proposeChange | | |
| replyToComment | | |
| resolveComment | | |
| scrollToParaId | | |
| setParagraphStyle | | Apply a paragraph style by styleId. Returns false if paraId is unknown. |
ParagraphHighlightOptionsinterface
Customization for the transient paragraph flash applied by scrollToParaId(paraId, { highlight }).
interface ParagraphHighlightOptions| Member | Type | Summary |
|---|---|---|
| color? | string | CSS color used for the transient paragraph flash. Defaults to yellow. |
| durationMs? | number | How long the flash remains visible before it is removed. Defaults to 1200ms. |
ScrollToParaIdOptionsinterface
Optional reveal behavior for scrollToParaId.
interface ScrollToParaIdOptions| Member | Type | Summary |
|---|---|---|
| highlight? | ParagraphHighlightOptions | Flash rendered paragraph fragments after scrolling to the paragraph. |
Type aliases (1)
SelectionChangeEventtypeSource ↗
Event payload for onSelectionChange.
type SelectionChangeEvent = SelectionInfo | null;Variables (1)
agentToolsconstSource ↗
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>[]