L'entrée « Question IA » envoyait toute question à une seule API distante, sur un modèle figé et sans historique : aucun serveur local n'était atteignable, et rien ne disait où partait le texte. Deux règles gouvernent ce qui la remplace. Un port ne dit jamais qui répond — un seul en héberge jusqu'à trois, et une famille réémet l'API d'une autre en entier — donc l'identité se lit dans le CORPS, par une échelle ordonnée. Et une adresse ne devient jamais du texte d'invite : le détecteur du dépôt ne voit pas les noms d'hôte, d'où une poignée opaque à sa place. Vérifié : 284 tests, et contre un serveur du réseau — reconnaissance, capacités lues, conversation multi-tours, triage juste. --- EN --- The "AI question" entry sent every question to a single remote API, on a frozen model and with no history: no local server was reachable, and nothing said where the text was going. Two rules govern what replaces it. A port never says who answers — one hosts up to three products, and one family re-serves another's native API in full — so identity is read from the BODY, by an ordered ladder. And an address never becomes prompt text: the repository's detector does not see host names, hence an opaque handle in its place. Checked: 284 tests, and against a server on the network — recognition, capabilities read, a multi-turn conversation, a correct triage. Assisted-by: Claude Opus 5
27 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog. This project adheres to Semantic Versioning.
Unreleased
Added
- Site presets for the VPN: one
.jsoncarries a site's gateway, protocol and connection group, and neither a username nor a secret, so it can be handed around. Read fromconf/vpn_presets/, then from a git-ignoredprivate/vpn/presets/, then from any directory listed invpn_preset_paths; on the same identifier the latest wins, so a site fixes a shipped template without touching a tracked file - Import a Cisco AnyConnect
.xmlprofile from the menu, browsing the client's own directories or typing the path, and get a preset from itsHostName,HostAddressandUserGroup - OpenConnect tells apart the two mechanisms that designate a service on one concentrator: the connection group in the URL and the value picked from a dropdown. Confusing them hands over another service's login form, so correct credentials are refused with nothing naming the group
- Reach a gateway that demands an embedded browser for SAML, which stops OpenConnect on « No SSO handler »: the web step is delegated to an
openconnect-ssohelper that the installer offers to set up, and the tunnel is then brought up by the driver itself, so the interface name, the state files and the diagnosis stay with the profile - Declare a concentrator that compares only the first characters of a password: it is announced before the secret is stored, and nothing is ever truncated
- The VPN installer looks for
vpnc-script— a file, not a binary on thePATH— and names the package to install per distribution family, instead of letting the tunnel fail on an interface that never appears - A command launched by the VPN runner gets
/dev/nullon standard input, so a captured-output command can no longer be stopped by a SIGTTOU and freeze the machine's package manager - The VPN profile list marks which profiles carry a live tunnel, so connecting one already up asks first and disconnecting one already down says so instead of looking like a mistake. A profile is judged on its interface, not on the state file a tunnel killed without
downleaves behind — a state left over used to be reported as mounted on the same screen that declared the process gone Assistant › LLM— ask a model server over several turns, local or remote. The history lives in memory and dies with the menu,/savebeing the only way to keep a trace; every command carries a leading slash, so a question pasted over several lines stays one turn. A third-party destination has to be retyped before the first send- Server recognition across eleven ports and twelve families, identity read from the response BODY and never from the port: one port hosts up to three products, and one family re-serves another's whole native API
- Finding a server from six sources — the loopback, this machine's QEMU domains, the hosts of
~/.ssh/config, an address or a network typed by hand, and the networks read over SSH on another machine. Anything wider than a/24is refused before enumeration, and two preferences bound the sweep:assistant_sweep_workers,assistant_sweep_timeout - A gpt catalogue in
script/todo/assistant/gpt/: one Markdown file per tool, whose declared requirements are matched against what the server announces. An unknown never greys a tool out — only a requirement contradicted by a field actually read does, with the figure that refuses it - A declared READ-ONLY context per tool, files and allowlisted commands, shown and confirmed before the first send, capped in size and duration, and scanned for identifying data. The scan's honest limit is stated: it sees addresses, e-mails and account paths, not names
Execute › GPT code › Claude Code— list the machine's sessions, ask one a question with read-only tools, or resume one in its own terminal. A copy is branched by default, since two writers on one session lose a branch
Changed
Assistant › [1]no longer sends every question to a single remote API on a fixed model: it asks whichever server is configured, and falls back to the remote one only when no local server answers
1.8.0 - 2026-09-04
Migration notes
Recreating the virtual environment, the Python interpreter and the package
installer being chosen now. Use the installation guide from tool make.
Ubuntu 20.04 and 22.04 are no longer supported.
Added
- Deploy ERPLibre VMs with QEMU/KVM from cloud images: Ubuntu, Debian, Fedora, AlmaLinux, Rocky, openSUSE, Arch, Linux Mint, and Debian on s390x. Hardware, branch and Odoo version are set per machine
- Proxmox VE as a deployment target, its installation including the reboot it needs
- A QEMU menu: network status and repair, 3D acceleration, a diagnostic report, file recovery from a VM that no longer boots, virt-viewer and a remote desktop tunnel
- An install dashboard and Textual forms: deploy, follow, update, restart or delete a VM without leaving the screen
- A mobile development VM: PyCharm, Android Studio, an Android emulator and an adb tunnel
- A VPN tool, five free technologies from the menu, the secrets in a KeePassXC vault and a diagnosis that names the failing stage
- Automated Odoo migration: the tool drives the whole run, goes back to a step, and repairs what a version bump leaves behind
- Migration review: a verdict per step, smoke tests on every public URL, and a filestore check
- A read-only analysis toolkit for an Odoo database, a backup zip included, with PostgreSQL index advice
- Anonymising a production copy without AI, and duplicating a database neutralised for good
- Development assistants installed inside a VM, and a Git and Shell menu that installs what a checkout needs
- A writing convention for what stays in git, held by a
pre-commitand acommit-msghook long_test/— tests that create real machines, nested QEMU and Proxmox included, kept out of the unit runner- NTFY, Forgejo, a local git server, e-mail from the CLI, and SSH configuration with recursive ProxyJump
- The Python interpreter and the package installer are chosen, through EL_PYTHON_PROVIDER and EL_PIP_PROVIDER
- The OCA generative AI policy, Claude Code agents and commands, and the context an assistant is given, shown from the menu
- Unit tests with a bilingual test plan, navigation telemetry for TODO, and Odoo 18 reading STL files
Changed
- todo.py split into nine files, one per subject, with a shared base per form
- Every menu entry carries an icon, the menus are grouped into sections, and a countdown prompt gives 15 seconds to decide
- Branch, profile, type and timezone are chosen per VM rather than globally
- Installation covers Fedora, Debian, Ubuntu, Arch and openSUSE; repository sync and Poetry run in parallel, quiet unless EL_VERBOSE asks
- Node.js 22 for Capacitor 8, flanker for Odoo 18, CybroOdoo extras opt-in, and a Poetry dependency declinable per architecture
- A VM boots faster and picks the fastest reachable mirror, Canadian pacman mirrors coming first on Arch
- Staging names the files, never
git add -A - Enter targets the highest supported Odoo version, and a VM name drops the
latestsegment
Fixed
- The libvirt network no longer counts as its own collision, no longer leaves a host without network at the next boot, and its state is read in English whatever the locale
- QEMU deployment: sudo says why it needs a password, the
libvirtgroup replaces it where it suffices, no host reboots unasked, and an orphan disk no longer blocks a creation - Migration: the database drop, the account.root view Odoo 17 leaves behind, the pricelists a repair invented, and the assumptions the 13-to-18 run rested on
- Anonymisation respects what a value means, and no longer breaks past the 131 072-byte limit of a single argument
- Installation on Debian 13, Fedora, Ubuntu 26.04 and s390x: apt locks, missing compilers and headers, too little memory, and what a recent SWIG or PROJ needs
- Secrets: the KeePassXC vault opens on a server without tkinter, the forgejo installer stops echoing the password it set, and db_restore validates the master one
- A question is seen before it is answered, and one faulty repository no longer takes a whole batch down
- Three screens that fell over, a shrink that would have filled the disk, and a monitor that binned a VM before being sure
- The unit runner globs the whole directory, where it ran 1131 tests of 3703
- Proxmox no longer aims at the host instead of the VM
Removed
- Ubuntu 20.04 and 22.04 support, on every architecture
- The residue check that called a language broken when its
activeis NULL
Security
- Passwords and tokens are redacted before a command is displayed, logged or reprinted
- The Odoo master password and the KeePass one leave the command line, an environment variable carrying them instead
1.7.0 - 2026-03-11
Migration notes
Recreating the virtual environment, use installation guide from tool make.
Added
- Odoo 12.0 to 18.0 in a single workspace, switched without reinstalling: the manifests, the configuration and the addons paths follow the version named in
.odoo-version - ERPLibre's Python separated from Odoo's —
.venv.erplibrecarries the repository's own tools,.venv.odoo<version>the server — so a tool of the repository no longer depends on the interpreter a given Odoo version imposes - Auto-installation driven from TODO: the menu lays down the environment it needs, Poetry, the Google Repo manifests and the addons included, rather than printing a command to retype
- Migration of an Odoo database and its modules from TODO,
--neutralizeincluded, with the repair of the mail module that a move from PostgreSQL 17 to 18 leaves behind - A hardening script for the installation
- The ERPLibre Home mobile application: TODO compiles it, deploys it, renames the software and changes its menu image
- The RobotLibre code generator, with the queue_job channels its configuration needs
- ERPLibre DevOps, and the automation procedure it describes
- The Selenium grid from
selenium_lib.py: a KeePass vault opened for the run, file downloads, dark mode, video recording and a scenario library - A performance script measuring the requests per second a website answers
- Deployment: Cloudflare DNS, nginx with a non-interactive certbot, Apache templates matching the nginx ones, and a systemd unit whose working directory is configurable
- The s390x mainframe architecture
- Addons OnlyOffice, Cetmix, OCA automation, OCA shopfloor, and the design-themes repository
- Database backup and erase commands, and a clearer restore naming
- A security check of the Python environment, from the menu
- TODO shows the documentation, downloads a database and helps with code formatting
- Killing an Odoo process by the port it holds, from the menu
- CLAUDE.md and the agent information document, so an assistant reads the repository's conventions instead of guessing them
- A FAQ entry on wkhtmltopdf for recent distributions
Changed
- Odoo 18.0 becomes the default version of a checkout
- Docker moves to PostgreSQL 18, with the matching client
- The documentation is bilingual, generated by mmg from the
.base.mdsources: a.mdor.fr.mdedited directly is lost at the next generation - The TODO menus are grouped into sections, and the English text serves as the i18n key rather than a code of its own
- The formatting script looks for the changed files in every repository, hidden addons included, and skips a repository that is not installed
- Odoo runs on a custom database, and the menu configures queue_job as well as the SSH forwarding a remote instance needs
- Killing a process by port asks before acting, through an interactive menu
- Neutralising a database goes through Odoo's own
--neutralize - LinuxMint 22.3, Ubuntu 25.10, and macOS without Python 3.7
- Odoo 18 dependencies: tldextract, PyYAML, pdfminer.six, and cryptography at its latest version
- A make target runs the unit tests
- The Makefile is split: its commands live in
conf/, andCommon.Makefileextends it for a project of one's own
Fixed
- The documentation accents, and the markdown generation running in parallel
git_toolreturns nothing instead of raising where.gitis absentpoetry iscompatibleno longer crashes on a version carrying a letter, an alpha or a release candidate- pymssql compiles again, and the Odoo 18 requirements leave pyssql out of a production install
- wkhtmltopdf is no longer offered where it does not exist: no package is published for s390x on Ubuntu 25.10
- Selenium: the snap Firefox path, a 60-second timeout when reaching for an element, execution in a private window, and a login that waits for Odoo 18
- The formatting script ignores the files and directories it must not touch
db_drop_allruns its shell command, and the backup processing keeps the permissions of what it writes- TODO: the first import, the regeneration of
.repo/local_manifests, the database open dialog, and a missing Odoo version reported instead of a crash - The code generator: creating a project, extracting a class carrying a selection, and reading a model through the Python 3.11
astmodule rather than astor - Docker: the duplicated Odoo 18 build target, and the compose file pinned to an image that works
1.6.0 - 2025-04-25
Added
- Support multiple Odoo versions (12.0, 14.0, 16.0) in same workspace
- This will help for the migration of modules
- Selenium script for increasing open software client interface and automating some actions.
- Video recording
- Support scrolling and word generating
- FAQ about kill git-daemon
- Supports Arch Linux, Ubuntu 23.10 to 25.04
- ADD repo JayVora-SerpentCS_SerpentCS_Contributions
- ADD repo CybroOdoo_CybroAddons
Changed
- Refactor image_db regeneration, use configuration JSON to build image
- Guide for moving dev to prod
- Update Docker buster to bullseye
- Improve format script to help code-generator
- Improve PyCharm script
- Support OSX for open-terminal
- Remove docker-compose and replace by docker compose
- Update Poetry 1.3.1 to 1.5.1
- Test can be launched with a json configuration and support log/result individually
- Script to search docker compose into the system
- Script search class model can output into json format and support field information
- Improve Docker minimal installation docs in README for Ubuntu, test with Debian (https://github.com/ERPLibre/ERPLibre/issues/73)
- Statistic script showing evolution module into ERPLibre supporting Odoo 17 and Odoo 18
- Latest version wkhtmltopdf 0.12.6.1-3
Fixed
- NPM installed locally and not globally
- Improve python code writer efficiency
- Config generator supporting space into ERPLibre directory
- Script to update Poetry to support @ URL
- OSX and recent Ubuntu installation
- Cloudflare script integration
1.5.0 - 2023-07-07
Migration notes
Recreating the virtual environment
rm -rf ~/.poetry
rm -rf ~/.pyenv
rm ./get-poetry.py
rm -rf ./.venv
make install
Do a backup of your database and update all modules :
./run.sh --no-http --stop-after-init -d DATABASE -u all
Added
- Support Ubuntu 22.04 with installation script
- Module mail_history and fetchmail_thread_default in base image DB
- Makefile can generate image DB in parallel with
image_db_create_all_parallel - Makefile can run all code_generator with
run_parallel_cgandrun_parallel_cg_template - Script to generate Pycharm configuration and exclude directory
- Support docker alpha+beta
- Limit memory execution when install in develop
- Template nginx configuration
- Script code count statistic
- Script show OCA evolution module statistic
- Windows development support, check documentation installation
- New project (code generator to create module) support params configuration
- Module sync_external_model to synchronise Odoo models with module
Changed
- Odoo 12.0 update from 22-07-2020 to 01-01-2023
- Update pip dependency with security update
- Pillow==9.3.0
- psycopg2==2.9.5
- Werkzeug==0.16.1
- check diff of file pyproject.toml for all information
- Update to Python==3.7.16
- Update poetry==1.3.1
- Update multilingual-markdown==1.0.3
- Update imagedb with all Odoo update
- Repo documentation-user from Odoo change to documentation
- Repo odooaktiv/QuotationRevision is deleted
- Update all repo (91) to end of 2022
- Rename module project_task_subtask_time_range => project_time_budget
- Rename module project_task_time_range => project_time_range
- Refactor script emplacement, create directory in ./script/ per subject
- Use command parallel in Makefile
- Update sphinx version
- Improve script location
Fixed
- Debian 11 installation script
- Test result
- OSX installation (not finish to support)
- Poetry update support '~='
Removed
- Ubuntu 18.04 is broken, need to install manually nodejs and npm
- Module contract_portal and remove signature in portal contract, need an update
- Downgrade module helpdesk_mgmt to remove email team and tracking field
- Module helpdesk_partner
- Module helpdesk_service_call
- Module helpdesk_supplier
- Module helpdesk_mrp
- Module helpdesk_mailing_list
- Module helpdesk_join_team
- Module project_time_management
- Support of vatnumber, too old
- Deprecated python dependency like pycrypto
1.4.0 - 2022-10-05
Migration note
- Update module
website,website_form_builder. - For dev, run
poetry cache clear --all pypi
Added
- Script run_parallel_test.sh to execute all tests in parallel for better execution speed
- Documentation to use docker in production
- Add repo:
- Ajepe odoo-addons to support restful
- OmniaGIT Odoo PLM
- MathBenTech family-management
- erplibre-3D-printing-addons
- Add module:
- iohub_connector to support mqtt
- website_snippet_all to install all snippets, extracted from all themes
- website_blog_snippet_all to install website_snippet_all with website_blog and associated snippet
- sinerkia_jitsi_meet to integrate Jitsi
- erplibre_website_snippets_jitsi to integrate Jitsi in snippet, work in progress
- Add module by default:
- auto_backup
- muk_website_branding
- website_snippet_anchor
- website_anchor_smooth_scroll
- crm_team_quebec
- partner_no_vat
- Documentation Odoo dev
- Format command supported addons
- Install theme with Odoo command
- Script to install theme addons
- Image website with default theme
- Image erplibre demo
- Test with coverage
Changed
- Downgrade sphinx to 1.6.7 to support Odoo dev documentation
- Update to poetry==1.1.14
- Update pip dependency with security update
- Pillow==9.0.1
- PyPDF2==1.27.8
- lxml==4.9.1
- Code generator export website with attachments and scss design file with documentation
- Code generator support multiple snippets
- Into repo Numigi_odoo-project-addons rename module project_template to project_template_numigi
- Into repo Numigi_odoo-product-addons rename module product_dimension to product_dimension_numigi
- Into repo Numigi_odoo-partner-addons, re-enable auto-install module
- Into repo muk-it_muk_website, re-enable auto-install module
Fixed
- Poetry supports insensitive python dependency
- Code generator new project supports relative path and check duplicated paths
- Muk web theme table header background-color and on hover for Many2many
- Script docker-compose use lowercase name
- website_form_builder HTML support and allow option to align send button
- Odoo cherry-pick 2 commits bus fix
- Minor fix css color into module hr_theme from repo CybroOdoo_OpenHRMS
- Typo in project task when logging time
Removed
- Module package erplibre from ERPLibre_erplibre_addons and use instead image creation, check Makefile
1.3.0 - 2022-01-25
Migration note
With new version of poetry, a bug occurs in the update. The solution is to delete the directory to let it
recreate. rm -rf ~/.poetry
Added
- Code generator supports view : activity, calendar, diagram, form, graph, kanban, pivot, search, timeline and tree
- Code generator supports portal view field and form creation
- Code generator generates generic snippets for demo_portal
- Code generator generates code_generator with code_generator_code_generator
- Code generator tests mariadb migrator
- Code generator supports javascript interpretation for snippet
- Code generator supports inheritance
- Code generator new project to create the suite of generation code
- Script to test the generation of module
code_generator - Make test_full_fast to run all test in parallel
- Module
web_timelineandweb_diagram_positionin base image. - Module
odoo-formiofrom novacode-nl - Module
design_themesfrom Odoo - Format python header with isort
Changed
- Update to Python==3.7.12
- Update to poetry==1.1.12
- Update pip dependency with security update
- Pillow==9.0.0
- lxml==4.7.1
- babel==2.9.1
- pyyaml==6.0
- reportlab==3.6.5
- Web diagram module has all color of the rainbow in option
- Refactor and simplify code of code_generator, better support of code reader
Fixed
- Downgrade Werkzeug==0.11.15, only this version is supported by Odoo 12.0. This fixes some http request behind a proxy.
1.2.1 - 2021-09-28
Added
- doc/migration.md
Changed
- Update pip dependency with security update
- Jinja2==2.11.3
- lxml==4.6.3
- cryptography==3.4.8
- psutil==5.6.6
- Pillow==8.3.2
- Werkzeug==0.15.3
- Script separate generate_config.sh from install_locally.sh
- Improve developer documentation
- More Docker script
Code generator
- Improve db_servers generation code
- Improve wizard generate UI menu
Fixed
- Mobile view menu item in Web interface from muk_web_theme
1.2.0 - 2021-07-21
Migration note
Because addons repository has change, config file need to be updated.
- When upgrading to version 1.2.0:
- From docker
- Clone project if only download docker-compose
git initgit remote add origin https://github.com/erplibre/erplibregit fetchmv ./docker-compose.yml /tmp/temp_docker-compose.ymlgit checkout mastermv /tmp/temp_docker-compose.yml ./docker-compose.yml
- Update
./docker-compose.ymldepending of difference with git. - Run script
make docker_exec_erplibre_gen_config - Restart the docker
make docker_restart_daemon
- Clone project if only download docker-compose
- From vanilla
- Run script
make install_dev - Restart your daemon
- Regenerate master password manually
- Run script
- From docker
Added
- Adapt script to give an execution status
- Multilingual markdown
- Guide to use Cloudflare with DDNS
- Script to check git diff and ignore date
- Repo with ERPLibre image
- Improve git repo usage, filter repo by use case
- ERPLibre theme website of TechnoLibre
- ERPLibre website snippet
- Basic HTML snippets
- Snippet card
- Snippet timelines
- Module contract_digitized_signature with contract_portal
- Module disable auto_backup
- Odoo cli db command to manipulate restoration db
- Odoo cli i18n command to generate i18n pot files
Makefile
- Format code
- Code generator test
- Addons installation
- OS installation
- Restore database
- Docker execution
Code generator
- Code generator for Odoo module, depending of ERPLibre
- Support map geospatial
- Support i18n
- Script to transform Python and XML to Python code writer script to regenerate themselves
Changed
- Update Python dependency with Poetry
- Format all Python code with black
- Module auto_backup with sftp host key
- Module muk_website_branding use ERPLibre branding
- Update docs with vscode support, custom document layout, custom email template and trick to use params to share variable
Docker
- Use buster python 3.7.7 image to remove pyenv
- Update Postgresql to support Postgis
- Support volume addons /ERPLibre/addons/addons
Fixed
- Ubuntu installation
- Poetry installation
- Geospatial with postgis can be installed
1.1.1 - 2020-12-11
Added
- Developer, test, migration and user documentation
- Branding ERPLibre with muk_branding
- Uninstall module from parameter Odoo
- Makefile to generate ERPLibre documentation WIP
- Docker support volume on /etc/odoo
- Docker support update database
Changed
- Better documentation on how to use ERPLibre and release
- Support wkhtmltox_0.12.6-1
Fixed
- db_backup to accept public host key on sftp
- Docker dependency
- Freeze poetry version 1.0.10
1.1.0 - 2020-09-30
Added
- Docker
- Pyenv to manage python version
- Poetry to manage python dependencies
- Script poetry_update to search all dependencies in addons
- Travis CI WIP
- TODO.md
- Guide to update all repositories with community
- Update manifest
- Add missing OCA repos
- Add medical, property management and more
- Add cloud/saas repo
Changed
- Update to Odoo Community 12.0 and all addons
- Rename venv to .venv
- More documentation on how to use ERPLibre
1.0.1 - 2020-07-14
Added
- Improved documentation with development and production environment
- Improved documentation with git repo
- Move default.xml manifest to root, the default location
- Support default.staged.xml to update prod with dev
- Feature to show diff between manifests or between repo of different manifests
- Update manifest
- Muk theme in erplibre_base
- Add draft account invoice approbation in portal
- New module sale_fix_update_price_unit_when_update_qty
- New module account_invoice_approbation
- New module sale_margin_editor
Fixed
- Production installation with git_repo
1.0.0 - 2020-07-04
Added
- Environment of development, discovery and production with documentation and script.
- Google git-repo to support addons repository instead of using Git submodule.
Removed
- Git submodule
0.1.1 - 2020-04-28
Added
- Support helpdesk supplier, helper, employee and services
- Support SanteLibre.ca with MRP, website, hr, ecommerce
- Donation module with thermometer for website
- Script to fork project and all repos in submodule to create ERPLibre
0.1.0 - 2020-04-20
Added
- Move project from https://github.com/mathbentech/InstallScript to ERPLibre.
- Support of Odoo Community 12.0 2019-11-19 94bcbc92e5e5a6fd3de7267e3c01f8c11fb045f4.
Changed
- Support scrummer, project, sale, website, helpdesk and hr
- Support Nginx and improve installation
Fixed
- Support only python3.6 and python3.7, python3.8 causes error in runtime.