22 KiB
Changelog
All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
Added
- docs: CRM association graph and OO quirks (
docs/crm-associations.md) - crm:
ForceRegenerateInvoicePDF,SetInvoiceStatus,PurgeStaleInvoicePDFs, contact/opportunity file list helpers - oo:
invoices pdf,pdf-cleanup,status; create--consignee; draft-invoice force-regens PDF
Fixed
- Document that invoice→deal must be set at create (
update --opportunityoften HTTP 400)
0.10.0 (2026-08-13)
Features
- crm: add invoices CLI and opportunity update (19a7e9c)
- crm: allow updating invoice terms via oo (31c556d)
- crm: invoice update notes and PO fields (d81e7de)
- crm: invoices CLI and opportunity update (f958309)
- mail: draft, attach, and draft-invoice CLI (73b1050)
Bug Fixes
- crm: JSON person update and oo persons update CLI (42c31d4)
- crm: link invoices to opportunities (3201a58)
- mail: German spacing for invoice draft template (7f35b0e)
Documentation
- crm: capture association graph and invoice/mail quirks (490426c)
- crm: clarify mail API send vs signature for chat links (6b5a82b)
- crm: Team vs Contacts and persons update note (11aa23f)
0.9.0 (2026-07-26)
Features
- catalog: mbox header scan, company legal-suffix match, apply order (8b29be2)
- catalog: scan Thunderbird address books and Gloda contacts (502b373)
- oo: catalog scan/match/apply for CRM clients and contacts (547f063)
- oo: catalog scan/match/apply for CRM clients and contacts (c32e4dd)
- projects: CRM contacts + git author linking (457c589)
- projects: link CRM companies and git authors to projects (5a8735e)
Bug Fixes
- catalog: oo_projects field + safer match (8d5ca67)
- catalog: preserve oo_id on match; add oo_projects field (d873cb7)
- crm: clean person names; canonical project titles (b9591f5)
- crm: person names + CC | Company | Title projects (6305135)
0.8.3 (2026-07-23)
Bug Fixes
0.8.2 (2026-07-23)
Bug Fixes
0.8.1 (2026-07-23)
Bug Fixes
0.8.0 (2026-07-23)
Features
- office: users admin UI, table rendering, and user save fixes (40b74eb)
- search: add produktor SearXNG JSON client (79b1a6b)
- search: add produktor SearXNG JSON client (bf144f2)
Bug Fixes
- oo: skip junk dirs in applications Discover (470ac93)
- oo: skip junk dirs in applications Discover (830f0c7)
Code Refactoring
- office: generalize DataTable layout and document TUI table skill (38932b0)
0.7.0 (2026-07-23)
Features
- office: mail preview, infinite scroll, pane resize, and scrollbars (72844df)
- office: users admin UI, table rendering, and user save fixes (40b74eb)
Bug Fixes
- oo: skip junk dirs in applications Discover (470ac93)
- oo: skip junk dirs in applications Discover (830f0c7)
Code Refactoring
- office: generalize DataTable layout and document TUI table skill (38932b0)
0.6.0 (2026-06-24)
Features
- office: table detail panes and Alt+1/2/3 layout toggles (934af21)
Documentation
- CHANGELOG for office v0.5.1 release (2985070)
0.5.0 (2026-06-24)
Features
- office: scrollable panes, nav tree drill-down, and item actions (fe2ee48)
0.4.0 (2026-06-24)
⚠ BREAKING CHANGES
- cli: subject-based command tree (tea-style) + global --output flag
- rename oo-cli → oo, split library by domain, relocate applications
Features
- cli: subject-based command tree (tea-style) + global --output flag (1e6d22f)
- crm: dedupe duplicates, fix deal titles, and add cleanup CLI (c77519f)
- crm: merge company slogan variants in dedupe grouping (3eb649c)
- files: project/task Documents API + oo projects|tasks files (e03fd62)
- mails: add Workspace mail CLI with pagination and parsed from fields (1cb228e)
- office: add Workspace TUI with shared bootstrap and test suite (7358ff5)
Code Refactoring
- rename oo-cli → oo, split library by domain, relocate applications (cff8145)
Documentation
- CHANGELOG 0.6.0, README, AGENTS.md, cmd/oo/main.go tree. (e03fd62)
[Unreleased]
[0.7.0] — 2026-06-24
Added — office TUI
- Pane layout — default 10% / 60% / 30% split (nav / list / detail); drag vertical borders to resize; Alt+1/2/3 still toggles panes.
- Filter mode (
f) — live filter on nav + list; right pane is the search query; Esc clears. - Mail preview — HTML bodies rendered colorized in the terminal (glamour); read-only scrollable document pane.
- Mail infinite scroll — loads the next page automatically when the cursor nears the end of the list.
- Scrollbars — vertical scrollbar on nav, list body, and detail preview when content exceeds the viewport.
- Calendar — unified calendars + events leaf with Type column and date range (−7d … +30d).
- Tasks — humanized status labels and relative deadlines in the list.
- Projects — open/closed row colors; status toggle in the detail form; Save sends
responsibleIdand status viaUpdateProjectStatus.
Changed — office TUI
- Flattened navigation: Projects, Tasks, By project, Calendar, CRM, Mail, Users (removed Browse; Calendar no longer splits Calendars/Events).
- Middle pane truncates overflowing cells with
…; full text on the cursor or Space-selected row. - Detail form tab order: Title → Description → Status → Save → Delete.
- j/k scrolls mail/file preview and read-only detail forms; mouse wheel scrolls detail when hovering the content area.
Added — library
UpdateProjectStatus—PUT /api/2.0/project/{id}/statusfor open/closed lifecycle.
[0.5.1] — 2026-06-24
Added — office TUI
- Alt+1 / Alt+2 / Alt+3 — show/hide left (nav), middle (table), and right (detail) panes.
- Visible panes share 100% terminal width evenly; pane content fills its column.
- Tab focus skips hidden panes.
Changed — office TUI
- Split detail pane: form/document top (~72%), CRUD action bar bottom.
- Middle pane: multi-column table with sort, selection, and full-width columns.
- Project list columns: ID, Title, Tasks (open/closed), Documents, Users.
- Row selection auto-loads detail; files show document preview, entities show forms.
[0.6.0] - 2026-04-24
Added — library
- Project & task Documents API in
files.go:FileEntry,FolderEntry,ProjectFilesResponsetypes.GetProjectFiles,GetTaskFiles,GetFile.UploadProjectFile—POST /api/2.0/files/{folderId}/uploadinto the project'sprojectFolder(resolved viaGetProjectByIDor first folder fromGetProjectFiles).AttachFilesToTask—POST .../project/task/{id}/fileswith formfiles=<id>(OnlyOffice expects existing file ids, not multipart).UploadTaskFile— uploads viaUploadProjectFileusing the task'sprojectOwner.id, then attaches.DetachTaskFile—DELETE .../files?fileid=.RenameFile—PUT /api/2.0/files/file/{id}.jsonwith JSON body.DeleteFiles—PUT /api/2.0/files/fileops/delete.jsonwithfileIds.DownloadFile—GetFilethenGETonviewUrlwithAuthorization.- Helpers:
FileEntryNumericID,FileEntryTitle,SafeLocalFileName.
putJSONon*Clientinhttp.gofor JSON PUT bodies.
Added — CLI
oo projects files list|upload|download|rename|delete— seecmd/oo/projects_files.go;listsupports--folders.oo tasks files list|upload|detach— seecmd/oo/tasks_files.go.
Added — tests
files_integration_test.go— live roundtrip against OnlyOffice (same credential rules asclient_test.go).files_test.go+testdata/*.json— envelope decode unit tests (no network).
[0.5.0] - 2026-04-24
Changed — CLI BREAKING
-
Subject-based command tree (
tea-style). The flatoo verb-nounlayout is replaced withoo <subject> <verb>:Old New oo cal-listoo calendar listoo cal-eventsoo calendar eventsoo cal-add/cal-deleteoo calendar add/calendar deleteoo task-listoo tasks listoo task-addoo tasks createoo task-updateoo tasks update(deletion moved tooo tasks delete)oo subtask-addoo tasks subtask addoo crm-contactsoo contacts list(plus filteredoo persons list/oo companies list)oo crm-add-contact --company …oo companies create --name …oo crm-add-contact --person-first …oo persons create --first …oo crm-dealsoo opportunities listoo crm-deals --stagesoo opportunities stagesoo crm-add-dealoo opportunities createoo crm-casesoo cases listoo applications-syncoo applications sync -
New subjects:
oo projects {list,get,milestones,create,update,delete},oo users {list,self}(plus top-leveloo whoami),oo crm-tasks {list,create,delete,categories},oo cases {create,delete,member-add},oo contacts {get,info-add}. -
Global
--output/-oflag: all list-like commands now support--output table(default; tabwriter-aligned, truncated to 80 chars per cell) and--output json. NestedbidCurrencyflattened to itsabbreviationin the table view. -
Module aliases:
oo calendar|cal,oo projects|prj,oo tasks|task,oo persons|person,oo companies|company,oo opportunities|deals|deal,oo cases|case,oo applications|apps.delete|rmon every leaf that removes things.
Added
cmd/oo/common.go— sharedprintTable(headers, rows)andprintObject(v)helpers that dispatch on the--outputflag.cmd/oo/users.go— exposesoo users list,oo users self,oo whoamivia the library'sGetUsers+SelfUserID.cmd/oo/projects.go— full CRUD for projects backed byCreateProject,UpdateProject,DeleteProject,GetProjectByID,GetProjectMilestones.cmd/oo/crm_tasks.go— dedicatedoo crm-taskssubject (distinct from projectoo tasks).cmd/oo/contacts.go— unified contacts/persons/companies with shared list/filter implementation.
Changed — library (minor)
newOOincmd/oo/common.gonow callsAuthenticateContext(cmd.Context())so CLI aborts propagate to the auth request.
[0.4.0] - 2026-04-24
Changed — project structure
- Library files reorganised by domain (mechanical split; zero API surface
change). The former monolithic
onlyoffice.go(687 LOC) is now split into:client.go—Client,Credentials,Defaults, env helpers,NewClient.request.go—Request,Query,Time,Token,MetaResponse,Permissions,requestBodyReader.auth.go—Authenticate,AuthenticateContext,InvalidateToken,Auth,ensureToken,authHeader,tokenValid.http.go— transport helpers and DRY response decoders (ResponseArray,ResponseObject,postFormObject,putFormObject,deleteObject,unmarshalResponseObject).projects.go—Project,Projects,Milestone,ProjectOwner+GetProjects/CreateProject/UpdateProject/DeleteProject/GetProjectByID/GetProjectMilestones.tasks.go—Task,ProjectTaskStatus,TaskPriority,ProjectGetTasksRequestet al. plus the form-encoded helpers formerly intasks_extra.go(ListTasks,AddTask,AddSubtask,UpdateTaskStatus,DeleteTask,GetTaskByID).users.go—User,Contact,Group,GetUsers,SelfUserID.calendar.go,crm.go,files.go— unchanged in scope, refactored through the new DRY helpers.httpx.go→ renamedhttp.go.onlyoffice.goandtasks_extra.go— deleted (content redistributed).
Changed — CLI BREAKING
- Binary renamed
oo-cli→oo. Install withgo install github.com/eslider/go-onlyoffice/cmd/oo@latest. - Package path
cmd/oo-cli→cmd/oo. The old path is removed. internal/cliis gone. Cobra commands now live directly undercmd/oo/aspackage main, split by domain:calendar.go,crm.go,tasks.go,apps.go,common.go. Rationale: cobra wiring is a CLI-only concern and does not belong inside apkg-level internal/.internal/applications→cmd/oo/applications/. This is a CV-specific CRM workflow — not a general OnlyOffice feature — and is only consumed by theooCLI. Keeping it undercmd/oo/prevents accidental external adoption and makes the coupling explicit.examples/applications/removed. It imported an internal package, which was a policy smell. Remaining examples (basic,calendar,crm,subtasks) use only the exported library surface.
Added
(*Client).ResponseObject— GET-and-decode-object counterpart to the existingResponseArray.(*Client).postFormObject/putFormObject/deleteObject— eliminate the ~15 identical "form request →responseField→json.Unmarshal" blocks previously duplicated acrosscrm.go/tasks_extra.go/calendar.go/files.go.
Migration
External library consumers: no changes required. The module path
(github.com/eslider/go-onlyoffice), the onlyoffice package name, and
every exported symbol are unchanged.
CLI users: replace oo-cli with oo in scripts and CI. The command set
and flags are identical.
[0.3.2] - 2026-04-24
Fixed
Project.String()no longer interprets the title as a format string (fmt.Sprintf(*p.Title)) and is now nil-safe on a zero-valueProject.internal/applications.buildSummaryno longer panics at regex compile time on Go 1.23+ — the previous(?= ...)lookahead is replaced with an RE2-safe non-capturing trailing delimiter.
Changed
Client.Querynow routes token acquisition through the sharedensureTokenpath instead of duplicating the auth-expiry check inline.- Request body marshalling is consolidated into an unexported
requestBodyReaderhelper (DRY; no change to the public surface). - The
Request.Debugfield is preserved for backwards compatibility but no longer changes behaviour — both branches used to unmarshal into the same target value. We'll remove the field in a future major release.
Tests
- Deleted
httptest.NewServerfixtures that emulated OnlyOffice protocol endpoints. Replaced them with:- pure-Go unit tests in
unit_test.go(no network); - real integration tests in
client_test.goguarded by//go:build integration. Run withgo test -tags=integration ./.... Tests skip cleanly whenONLYOFFICE_URL/USER/PASS(or aliases) are absent.
- pure-Go unit tests in
- New policy documented in
AGENTS.mdand.cursor/rules/no-synthetic-mocks.mdc.
[0.3.1] - 2026-04-24
Added
AuthenticateContext(ctx)— context-aware auth that honours cancellation and deadlines. Preferred entry point for long-running syncs (cron, watchers).InvalidateToken()— clears the cached token to force re-auth on the next request. Use this to recover from a mid-sync 401 when the server has revoked the session while the localExpirestimestamp still looks fresh.
Notes
- Plain
Authenticate()is unchanged and remains a convenience wrapper aroundAuthenticateContext(context.Background()). - No breaking changes; a patch release.
[0.3.0] - 2026-04-24
Added
- Calendar helpers:
ListCalendars,ListEvents,AddEvent,DeleteEvent. - CRM helpers: contacts (
ListContacts,GetContact,FindCompany,FindPerson,CreateCompany,CreatePerson,AddContactInfo,DeleteContact), deals (ListOpportunities,GetOpportunity,CreateOpportunity,AddOpportunityMember,ListDealStages,DeleteOpportunity), cases (ListCases,CreateCase,AddCaseMember,DeleteCase), CRM tasks (ListCRMTasks,CreateCRMTask,DeleteCRMTask,ListTaskCategories), and history notes (AddHistoryNote). - Project task extras:
GetProjectByID,ListTasks,ListAllTasks,GetTaskByID,AddTask,AddSubtask,UpdateTaskStatus,DeleteTask. - File upload:
UploadOpportunityFile(multipart). SelfUserIDcached lookup ofpeople/@self.Defaultsstruct +SetDefaults+GetEnvironmentDefaultsfor optional calendar/project fallbacks.- Alias env vars accepted by
GetEnvironmentCredentials:ONLYOFFICE_HOST/ONLYOFFICE_NAME/ONLYOFFICE_PASSWORD. - Public
Authenticate()that primes the token eagerly. - Bundled CLI:
cmd/oo-cli(Cobra) with commandscal-list,cal-events,cal-add,cal-delete,task-list,task-add,subtask-add,task-update,crm-contacts,crm-add-contact,crm-deals,crm-add-deal,crm-cases,applications-sync. - httptest-based unit tests for form / multipart / CRM helpers.
Changed
- The
onlyoffice.Clientstruct gained unexported fields (defaults,selfID,noteCatID); the public API is unchanged and remains backwards compatible.
[0.2.0] - earlier
- Badges, docs expansion (Gitea sync use case, Gantt/PM workflows).
[0.1.0] - earlier
- Initial release: OnlyOffice Project Management API client.