25R2-0.51.0
·
3 commits
to main
since this release
Added
- Documentation-knowledge tools (
acumatica_search_docs,acumatica_get_doc_section) — 51 tools total. Search + retrieval over the official Acumatica documentation (49 module/developer guides, the Form/Report Reference with every screen keyed by Form ID, and the release notes) for the instance's release. Motivation:help.acumatica.comintermittently bot-blocks browsers and AI clients ("refused for this browser"), so "the model can web-search the docs" — the original reason documentation lookups were scoped out — proved unreliable in practice. Same architecture as the schema-knowledge tools: an OSS ingestion script (scripts/build-docs-index.mjs) that the operator runs against the Markdown documentation set downloaded with their own portal login, producing a private index in theINDEX_STORER2 bucket (licensed content is never committed or redistributed); the tools register conditionally when the index exists. Design points: the memoized catalog holds only heading breadcrumbs + Form IDs (~3.5 MB — search matches section headings, not body text; Acumatica's headings are descriptive enough, and a Vectorize upgrade path stays open behind the same functions); section text lives in ~700 KBdocs-chunks/*R2 parts fetched on demand through a small bounded cache, so the ~40 MB corpus is never held in worker memory;acumatica_get_doc_sectionaccepts a Form ID directly (e.g.AP301000→ the screen's purpose, toolbar commands, tabs/fields) and returnsprev/nextneighbors for browsing; docs output bypasses field redaction (vendor documentation legitimately discusses fields named SSN etc. — new opt-out oncallTool, valid only for tools that cannot return tenant records).upload-indexes.mjsuploads chunk parts before the catalog so a live worker never resolves a new catalog against missing parts. New docs page at/docs/documentation-tools; upgrade step added to the upgrading guide (the index describes one release). 19 new unit tests (ingestion cleanup/chunking/Form-ID scoping + search/resolution); the ingestion script exports its pure functions and only runsmainwhen executed directly. npm run build-docs-indexscript; removed the stalebuild-gi-indexscript entry that pointed at a file that doesn't exist.