- project team: oo projects team list|add|remove|set (portal users) - users: get|create|update|delete|block|unblock|password - lib: CreateUser, DeleteUser (auto-suspend before delete), Add/Remove/ SetProjectTeam, ListProjectTeam; deleteJSON reused; jsonBodyReader helper - tests: unmarshalResponseArray
BREAKING: - Flat oo verb-noun layout replaced with subject → verb, mirroring the gitea `tea` CLI. Every subject is one file in cmd/oo/: oo calendar list | events | add | delete oo projects list | get | milestones | create | update | delete oo tasks list | get | create | update | delete | subtask add oo users list | self (alias: oo whoami) oo contacts list | get | delete | info-add oo persons list | create | delete oo companies list | create | delete oo opportunities list | get | create | delete | stages | member-add oo cases list | create | delete | member-add oo crm-tasks list | create | delete | categories oo applications sync - Global `--output/-o table|json` flag on the root command; every list uses a single printTable helper that flattens nested bidCurrency → abbreviation for readability, truncates long cells, and dumps verbatim in JSON mode. Library additions surfaced in the CLI: - oo users / oo whoami via SelfUserID + GetUsers. - oo projects full CRUD via Create/Update/Delete/GetProjectByID/Milestones. - oo crm-tasks and oo cases via ListCRMTasks/CreateCRMTask/DeleteCRMTask/ ListTaskCategories/ListCases/CreateCase/DeleteCase/AddCaseMember. - oo contacts info-add via AddContactInfo. - oo opportunities stages/member-add via ListDealStages/AddOpportunityMember. Internal: - cmd/oo/common.go — rootCmd, newOO (uses AuthenticateContext), printTable, printObject, fmtCell, deref* helpers. - cmd/oo/crm.go deleted; content split into contacts.go, opportunities.go, cases.go, crm_tasks.go for locality. Docs: - README: new subject→verb table + migration note. - AGENTS.md: CLI section rewritten; new rule enforcing subject→verb and printTable/printObject routing. - CHANGELOG: 0.5.0 entry with full old→new mapping. Made-with: Cursor