Releases: CocoRoF/edit2docs
Release list
v0.16.1 — live model list (GET /v1/models)
Hosted service adds GET /v1/models: the studio's model picker is now live — it proxies the Anthropic Models API with the caller's BYOK key (newest first) and falls back to a curated list when no key is supplied. Keys are pass-through only, never stored.
v0.16.0 — extension-scoped tool exposure
tool_specs(extension="xlsx") and doc_guide(fmt=...) return only the verbs, topics, and description detail relevant to a file's format — backed by a new tool_matrix capability table (SSOT). Opt-in and fully backward-compatible: the unscoped default is unchanged. arrange_doc is hidden for .docx; set_doc_text/arrange_doc/build_doc descriptions specialize per format. 900 tests pass.
v0.15.1 — arrange_doc (complete)
Use this, not 0.15.0. v0.15.0 tagged only the version bump — the arrange_doc verb, engine, agent-tool wiring and doc_guide topic were accidentally left uncommitted, so the 0.15.0 wheel has no arrange_doc. 0.15.1 ships the complete implementation.
arrange_doc — deterministic STRUCTURAL edits: duplicate / move / delete whole slides (.pptx) and sheets (.xlsx); rename sheets. No key; byte-preserving. Built on contextifier 0.5.0. 880 tests pass.
v0.15.0 — arrange_doc (structural slide/sheet ops)
New 9th deterministic verb arrange_doc: duplicate / move / delete whole slides (.pptx) and sheets (.xlsx); rename sheets. Structure, not content. No Anthropic key; byte-preserving — a copy ADDS parts, untouched slides/sheets stay byte-identical (charts & notes cloned independently, images shared).
arrange_doc(doc, [{"op":"duplicate","target":0,"to":3}]) # copy slide 0 to position 3
arrange_doc(doc, [{"op":"move","target":4,"to":0}]) # move slide 4 to front
arrange_doc(doc, [{"op":"rename","target":"Sheet1","name":"Summary"}]) # xlsx
Built on contextifier 0.5.0's new raw primitives. Wired across the library, agent tools, local MCP, and doc_guide('arrange'). 880 tests pass. Full changelog: README Version history.
v0.14.1 — cap mcp<2.0.0 (server crash-loop fix)
Dependency fix. mcp 2.0.0 (freshly released) dropped the mcp.server.fastmcp module that edit2docs.mcp.server imports. The unbounded mcp>=1.0.0 floor silently resolved 2.0.0 on a clean build, crash-looping edit2docs serve with ModuleNotFoundError: No module named 'mcp.server.fastmcp'.
Capped to mcp>=1.0.0,<2.0.0 (resolves 1.29.0, which still ships FastMCP). Library consumers that don't import the hosted-server path (e.g. geny-executor) were unaffected. Full suite green (868 passed).
Full changelog: README Version history.
v0.14.0 — themed decks (deterministic design)
build_doc pptx specs gain an optional theme — {bg, accent, ink, muted, panel, rail, page_numbers, font} — plus design layouts stat / quote / comparison. A designed deck (deep-navy + orange, accent rail, page numbers, 16:9, type hierarchy) is now ONE deterministic call with zero model usage. Without theme, legacy template layouts are unchanged.
v0.13.0 — hierarchical skill structure (progressive disclosure)
The tool set is now a Claude-Skill-shaped hierarchy: ultra-compact tool descriptions up front (frontmatter, ≤320 chars test-enforced), the GENERATE | EDIT | INSPECT family map behind doc_guide() (body), and deep per-task guides behind doc_guide(topic) (resources): build, generate, edit, edit.text, edit.chart, edit.xml, render, recipes.slides, recipes.colors. Topics form a dotted tree; parents join children; unknown topics fall back to the map.
Every backend: ANTHROPIC_TOOLS, new OPENAI_TOOLS, tool_specs(fmt), MCP server (descriptions from one source of truth), and doc_guide(names={...}) renders the guides with a host's renamed tools (e.g. geny-executor's DocAnalyze).
v0.12.0 — consolidated 8-verb agent surface; XML part create/delete
The tool list is the product. Agent surface consolidated 10 → 8 verbs, each complete:
set_doc_xmlnow creates missing parts (content_typeregisters the Override) and deletes parts — multi-part operations like adding a slide are pure tool calls (tested: slide xml + rels + content type + presentation.xml wiring, reopened by python-pptx).set_doc_textabsorbs chart edits (achartkey routes to the chart engine — title/data + embedded workbook sync).render_docgainsto='md'and replaces the separatepreview_doctool.- Surface: generate_doc · build_doc · edit_doc · render_doc · set_doc_text · read_doc_xml · set_doc_xml · analyze_doc (6/8 keyless). Library verbs unchanged. MCP server mirrors the same 8.
v0.11.0 — direct OOXML XML editing (read_doc_xml / set_doc_xml)
Documents ARE XML. New universal deterministic primitive (no LLM, no key) on contextifier's byte-preserving raw layer:
list_doc_parts(doc)— map of every part (slides, charts, styles, sheets…)get_doc_xml(doc, part)— a part's exact XML textset_doc_xml(doc, part, edits|xml)— exact find/replace patches or whole-part replace; result must stay well-formed XML or nothing is written; untouched parts stay byte-identical
Together with the structured verbs this expresses every edit OOXML can — recolor chart bars, fonts, fills, geometry — through tools instead of raw python-pptx. Wired across all three surfaces (facade, agent_tools, MCP). Tested end-to-end: chart-series recolor via XML patch, read back as FF0000 by python-pptx.
v0.10.0 — build_doc (deterministic generation, no LLM)
edit2docs is a list of TOOLS first; the built-in LLM is just one consumer.
New deterministic verb build_doc(spec, output) — generate_doc's rendering engine without the model. An agent driving its OWN model produces the interchange artifact; build_doc renders the file with zero edit2docs model calls, no API key. Output extension picks the engine:
.docx← markdown string (docx_from_markdown).xlsx←{sheets:[...]}(xlsx_from_spec).pptx←{slides:[{layout,title,subtitle|bullets,notes}]}— new deterministicpptx_from_specbuilder (python-pptx built-in layouts: title/content/section/title_only/two_content/blank)
Wired across all three tool surfaces: simple facade (public verb), agent_tools (ANTHROPIC_TOOLS + run_tool), and the local MCP server. pptx uses standard built-in layouts — generate_doc remains the LLM path for designed decks.
Now all 8 agent-tools work as tools; 6 of 8 are fully deterministic/keyless (analyze, preview, render, set_text, edit_chart, build_doc). 737 unit tests green + 6 new.