Skip to content

Releases: unclecatvn/extension-debug-odoo

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 09:45
fa898a4

The TypeScript rewrite of Odoo Debug, for Odoo 18.0, 19.0 and 20.0: every difference between them in one adapter per
version, checked against the database on each page.

  • Record: every field of the record (definition, value by type, what recomputes it), quick filters, copy as JSON.
  • View: the view told as a story: which views from which modules build it, in Odoo's order; one field through them; the combined arch.
  • RPC: the page's JSON-RPC calls; a call opens as its request, edited and sent again right there (the recorded answer below it until then); a new request; Copy as cURL for the external API (18: /jsonrpc, 19: /json/2); ⏱ Profile a call (Perf).
  • Security: rights as tables (ACLs and rules × operations, domains evaluated for the user); rights on every model; groups, what each grants, who has it; try a group; compare users.
  • Translations: where a text comes from and where to change it; a record's and a view's translations; .po coverage, export, import; languages.
  • Apps: modules as in Odoo's Apps menu; Activate / Upgrade / Open Forms; ⚠ code newer than the database; a module's description, manifest, dependencies both ways (what an install brings, auto-install included, as Odoo computes it) and as a diagram, its data and models; uninstall previewed by Odoo's wizard; operations left pending.
  • Menus: the technical screens a developer opens all day (Models, Fields, Record Rules, Views, Crons, Actions, Parameters…), one click away without debug mode; opened in the Odoo page, ↗ in a new tab.
  • Perf: Odoo's profiler read back, the requests slowest first (static files apart): each request's diagnosis (what to look at first: an N+1 and the line running it, the database, Python, or nothing), its time split SQL / Python and by function of the modules (from the Python samples), its SQL in words ("Reads res_partner"), code as code (function() module/path.py:line, copied on click); the lines of code sending it, N+1 suspects, the slowest queries; a baseline to compare with; flame graph; clean up.
  • Code: an ORM console as the logged-in user on the screen's record / records / model: JavaScript in the page (read-only, dry run, writes) or Python on the server (a dry run rolled back for real); results shown by type; snippets.
  • ⌥/Alt + click on the Odoo page copies a field's technical name: a field, its label (a readonly one too), a list cell or column header, or a tracked change in the chatter (Draft → Sent (Status): state).

Odoo 20.0: an adapter of its own, every server call, route and webclient internal the panel uses checked against the 20.0 sources (not yet run against a live 20 database).

  • Security: 20's ir.access (permissions OR-ed, restrictions AND-ed) read as ACLs and record rules: the same tables and simulation; no permission refuses, every _inherits parent checked, time back in domains, the new 'access' operator flagged as uncertain when simulating another user; an AccessError saying 'delete' read as unlink.
  • Apps: the uninstall preview on 20 (no show_all, applications listed apart); the modules left waiting run along with the next operation again, said per version.
  • Perf: profiling allowed or not read with get_str; sessions counted with formatted_read_group.
  • Translations: .po export with 20's binary read format.
  • Record: binaries shown as their size on 20 (no bin_size: read with load='web').
  • Code: JavaScript read_group on 20 calls formatted_read_group; exists() works (it is private on the server: checked with a search).
  • RPC: Copy as cURL for /json/2 knows 20's read_group, web_unlink, no exists.
  • Menus: Access Rights (ir.access) on 20, where Record Rules is gone.

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 19:17

Added

  • Releases go to the Chrome Web Store by themselves: a new version pushed to main is uploaded to the store and submitted for review by the same CI run that makes the GitHub release (three repository secrets to set once, see README › Releasing).

Changed

  • Installed from the Chrome Web Store: the README and the website point there, no more zip to download and load unpacked.
  • License: the Sustainable Use License: free to use and modify for personal or non-commercial use or a company's own internal work, free to share only free of charge and for non-commercial purposes, not to sell; a commercial license can be asked for. Pull requests come with CONTRIBUTING.md's one-sentence Contributor License Agreement: UncleCat may license a contribution on any terms.
  • Perf tells what to look at. Off, the tab explains what it is for in three steps (start, do the slow action in Odoo, come back), the previous session folded under them. The requests come slowest first, one line each (name, SQL count, duration) over a bar against the slowest one, the static files (scripts, images, manifest…) behind a Static Files chip; ⟳ Refresh List sits next to Stop Profiling. A request's detail starts with a plain diagnosis and what to do: N+1 (one query run 5× or more, with the code calling it and its source line), most time in the database, most time in Python, or fast, nothing to optimise; then its time split between SQL and Python, the Flame Graph a labelled button beside it. Three views below, the one the diagnosis points to shown first: By Code, from the profiler's Python samples (the Flame Graph's data), the functions of the modules the time went to, with their source line and callers; Repeated Queries and Slowest Queries in words ("Reads res_partner · 10×", the code that ran it, its time), the SQL one click away, with a verdict on top (no slow query: the database is not the problem). Code shows as code everywhere: function() then module/path.py:line, which a click copies.
  • RPC: a call is edited right in its detail. No more Edit & Resend: the route and JSON body are the editor straight away, the recorded answer below them; Send (or Ctrl/⌘+Enter) replaces it with the new one.
  • "Open source" becomes "source available" on the website, the README and the intro film, the project being restricted from selling.

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 00:37
7560b75

Added

  • Color themes, like an editor's: besides Odoo's system / light / dark, the toolbar popup offers GitHub Light, Solarized Light, GitHub Dark, Dracula, Monokai, One Dark Pro, Nord, Solarized Dark and Catppuccin Mocha. The whole panel follows, syntax colours of the Code tab included, in every open panel at once.
  • RPC and Perf in full screen: list on the left, detail on the right, like the Network tab of the devtools. The selected row is highlighted and its detail (parameters and result, or the SQL analysis) stays in sight while the list scrolls. Beside the page, rows still unfold in place; switching between the two keeps the open row.
  • Security: which group would allow it? A blocked operation in Why allowed / blocked lists the groups that would allow it (from the model's ACLs and record rules), the ones adding the fewest groups first, with what else they imply.
  • Security: try a group before adding it. Try simulates a group on the user without writing anything: every card below (why allowed / blocked, ACLs, risks) is recomputed with it, then Apply adds the tried groups in one write or Discard drops them. It replaces + Add.

Changed

  • A modern, minimal look: neutral greys with Odoo's purple as the only accent, a line icon on every tab, rounded cards with a chevron, segmented controls and softer focus rings. Beside the page, the tabs become one bar of icons (the active one shows its name, the others on hover). In full screen, the sidebar runs from the top and holds the brand, with icon + name tabs, and the content sits on a grey canvas: each block a white panel, lists with a tinted header row and roomier rows, row actions (↗) quiet until hovered.
  • Full screen layout: the tabs move to a sidebar on the left, the header fits on one line (brand, model, id, view, buttons), and the content sits on one plane without card frames, only rows keep a line between them. Short blocks sit side by side (View: Action | Context; Security: Groups | User risks, ACL | Fields hidden, Session | System parameters), key / value blocks show three pairs per line, and the Code editor sits beside its result.
  • The panel follows the round button while it is dragged: beside it, aligned on its top in the upper half of the window and on its bottom in the lower half (it used to stay on the bottom edge).
  • The round button hides in full screen: it covered the panel's bottom right corner (Open Forms, Export & Download). − brings it back.

Fixed

  • Record › Fields: a long value (JSON, HTML…) no longer spills over the rows below it; it stops at three lines with an ellipsis, the full value opens with a click on the row.

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 09:26
e2f8248

Added

  • Security › user search: find any user by name or login in a search box (matches listed under it, ↑ ↓ Enter or a click), instead of a long select. My User comes back to yours.
  • Security › Groups: the picked user's groups, with one filter box that also lists the groups they don't have while typing, each with + Add. Remove shows on the groups nothing else implies; an implied group is marked as such and says which group implies it (Odoo would add it back). Writing needs Access Rights and asks first.

Changed

  • Access and Security are one tab (Security), in three parts: User (search, groups, risks), the current model for that user (why allowed / blocked, ACLs, fields hidden by groups=, configuration audit) and the Instance (session with Become Superuser, system parameters, checks). Another user's groups, ACLs and record rules can be read, not only yours.
  • Why allowed / blocked shows the server's exact has_access answer next to each simulated verdict when the picked user is you (the separate Effective access card is gone). The Access tab's record rules table is gone too: this card lists every rule for the picked user.

Removed

  • Account switching in the Security tab: Switch to This User (incognito login) and Impersonate in This Session (OCA impersonate_login). Become Superuser stays, in the Session card (Settings users only).

Fixed

  • Security › Why allowed / blocked: the four verdict boxes no longer overflow the panel when an ACL or model name is long.

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 07:45
fddbbd1

Added

  • Code tab › ORM Console: JavaScript with an ORM-like env (env['sale.order'].search(…), .read(), .mapped(), .write(), any public method…) run in the Odoo page with the logged-in session, so the server applies that user's access rights, record rules and active companies. Fields read like in Python (return rec.state, rec.partner_id.name, prefetched when iterating a recordset) and written by assignment (rec.state = 'sent', a write sent in order with the other calls). Suggestions while typing: the models of the installed modules after env[', their fields in strings and after a dot (following relations: partner_id.country_id.), the recordset methods. Read-only by default (writes are blocked before they are sent); Allow Writes lets them through, each committed at once. Results as a table, prints, errors with line and server traceback, and the list of calls made. The code is kept per Odoo server (origin). With Auto Refresh ticked (offered once Allow Writes is), the view on screen reloads its data after writes (Odoo's soft_reload, like web_refresher).

  • Minimize (− in the panel header): hides the panel back to the round button, which reopens it as it was.

  • Code editor instead of a plain textarea: syntax colours, line numbers, the suggestions open under the caret, and typing is smarter: (, [, { and quotes come in pairs (typing the closer skips it, Backspace between a pair deletes both, a selection is wrapped), Enter keeps the indent and puts the closer of { } on its own line, Tab indents. Undo (⌘/Ctrl+Z) works through all of it.

  • Code tab layout: the editor fills the tab, under one bar (▶ Run, Allow Writes, Auto Refresh, the user it runs as, Guide). The result has its own scrolling area below it, headed by a sticky status line (ok / error, read-only, ms, calls). The guide (available variables, recordset API, examples) is hidden until Guide is pressed. Long lines wrap instead of scrolling sideways, each keeping its line number.

Changed

  • Every tab in sight, nothing to scroll: beside the page the 9 tabs are laid out 5 + 4, in full screen on one row.
  • The debug mode switch (off / debug / assets) moves from the panel header to the toolbar popup, which shows the page's current mode.
  • Tabs have no side padding (cards edge to edge), and a tab with a single card shows it without a title to click.
  • Perf tab in one card: status and Start / Stop on one line, a one-line note, then the requests with a filter and a count. Rows read like the RPC tab (method + model), with id · time · CPU below; the panel's own requests (ir.profile reads, session info) are left out.
  • Apps tab in one card: the modules to act on are typed or ticked in the list below an Odoo-like search bar. Its filters are Odoo's own (Installed / Not Installed, Apps / Extra, and the category), shown as facets inside the bar (× or Backspace removes one) and picked from ▾; Installed by default, remembered.
  • Translations tab: one input for the apps to export: the word being typed searches the installed modules (name or title) listed below it, ticking one puts its name in the input, Enter picks the match; typing the names still works. Languages are toggles (the active ones, the chosen first, two rows that scroll when there are many, the choice remembered), next to a locked Template (.pot) chip; the list takes the panel's height and a full-width button at the bottom says how many files it will download.

Fixed

  • Code tab suggestions follow the variable: after partners = env['res.partner']… and orders = env['sale.order']…, partners. offers res.partner fields (it used the last env[…] written). Also understood: const x = rec.partner_id, for (const l of order.order_line), env.user. / env.company., and orders.mapped('…') / partners.filtered_domain([['… (the fields of that variable). Dragging the scrollbar of a long list no longer closes it. Picking a suggestion with Tab / Enter while a Vietnamese input method (Telex) is composing the word no longer types it twice (search_readsearch), and skipping a closing '] no longer leaves the list of models open for Enter to pick from.

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 29 Sep 04:03
0f7f761

Added

  • Translations tab: exports the translation template (.pot) and the .po of each language for several apps (;-separated), and downloads every file to Downloads/<module>/i18n/. Needs the new downloads permission.
  • Switch to This User (Security › View as user): opens an incognito window on the current page, at Odoo's login of the picked user (their password is typed there); the current session is untouched. With the OCA module impersonate_login, "Impersonate in This Session" and "Back to My User" are offered too.
  • Apps tab: for a ;-separated list of modules, Activate (Update Apps List, then install them all with their dependencies), Upgrade, or Open Forms (one new tab per module); each module's state is listed below. The Installed modules card moved there from the Access tab.

Changed

  • Lists in every tab show one line per row: the details below it (label, storage, module, domain, query…) open on a click on the row and close on the next one. Clicking a name still copies it. The wide 2-column table (760px+) keeps them in its second column.
  • Every collapsible section (user_context, Companies, combined arch, parameters / result, queries…) starts closed.
  • Every card of every tab starts closed and loads its data only once opened; the cards left open (or closed) stay so after ⟳ Reload Data, a reload of the page or the panel.
  • Rows with an action button (↗) keep it in a right-hand column, lined up on every row.
  • Button labels and tooltips capitalised like Odoo's ("Export & Download", "Reload Data"…). ⟳ Reload Data also empties the Translations form.
  • Icon without the green dot.
  • The Perf tab is now the last one.
  • The panel is pinned to the bottom of the window (beside the button), so its header never goes off screen. The button sits on the bottom edge too until dragged elsewhere; dropped back near that edge, it sticks to it again.
  • After a reload, the panel comes back on the tab you were on, scrolled where you left it (each tab keeps its own position).

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 08:30

First public release. Chrome extension (Manifest V3) for Odoo 18 / 19 developers, no build step.

Added

  • In-page panel: a draggable round button on Odoo pages opens the panel next to it (shadow DOM + iframe, so Odoo's CSS and the panel's never mix). Position kept per Odoo instance; open state and full screen kept across reloads.
  • Full screen (⤢, Esc to leave). From 760px wide, every list becomes a 2-column table with sticky column names.
  • Record tab: identity & metadata (xmlids, noupdate, create/write user), every field with its definition, value, module, index, groups, and which fields it triggers a recompute of.
  • View tab: inheritance tree of the current view (primary + extensions, priority, file), combined arch, action details, form field modifiers (invisible / readonly / required) evaluated like the webclient, "Pick on page".
  • RPC tab: live log of JSON-RPC and JSON-2 calls, recorded from page load; errors with tracebacks, "why was it blocked?" jump to the Security tab for AccessErrors.
  • Access tab: session (db, version, web.base.url, test_mode), effective rights, ACLs, record rules, groups, system parameters (secret-looking values masked) and installed modules.
  • Security tab: simulate another user's rights, explain why an operation is allowed or blocked rule by rule, fields hidden by groups=, model configuration audit, instance checks (HTTPS, cookie flags, security headers, database manager, list_db).
  • Perf tab: Odoo's built-in server profiler: start/stop, profiled requests, SQL summary with repeated queries (N+1 suspects), slowest queries, speedscope link.
  • Copy anywhere: click a field name, model, xmlid or parameter value in the panel; ⌥/Alt + click a field, label, list cell or column header on the Odoo page to copy its technical name.
  • Toolbar popup (also the options page): language (English, Tiếng Việt), theme (system / light / dark), show / hide the panel. The toolbar icon is only enabled on Odoo pages.
  • i18n: gettext .po catalogs read at runtime, npm run i18n to extract and merge.
  • CI / release: GitHub Actions run syntax checks, tests and the i18n check; bumping the manifest version on main tags and publishes a release zip.

Security

  • Odoo data only reaches the DOM through textContent; the session cookie value is never read (flags only).
  • The panel page is a use_dynamic_url web-accessible resource, so other sites can't frame it.
  • odoo.conf is not readable from a browser by design; nothing in the extension tries to.