Name: [IMP] viin_ai_base, viin_ai_agent: bidirectional data-driven message adapter (close #64 #62 #63)

State: Succeed finished in 274m

PR State: merged

PR Author: David Tran

PR Author Email:

PR: #65

Committer: David Tran

Committer Email: davidtran.hp@gmail.com

Commit: 171398609858b9426423bb02072278dd50a332b3

Description:

                                            [IMP] viin_ai_base, viin_ai_agent: bidirectional data-driven message adapter (close #64 #62 #63)

Symmetric follow-up to the outgoing adapter (#59): make the INCOMING response
normalizer data-driven via viin.ai.message.adapter, add a per-vendor empty-content
knob, and route the streaming path through the adapter with a contract guard.

- #64: viin.ai.message.adapter gains a `direction` discriminator (outgoing|incoming)
  + incoming response-map knobs; viin.ai.provider._normalize_completion_response is
  rewired to dispatch data-driven incoming primitives (output byte-stable for the 3
  seeded protocols). An admin can hotfix a vendor response-key rename with no release.
- #62: per-vendor `empty_content_repr` knob (empty_string|null|omit), default
  empty_string (byte-identical to prior behaviour) for strict gateways (Azure OpenAI).
- #63: viin_ai_agent._do_llm_stream redacts-then-adapts before transport + a contract
  guard test that fails if a future streaming multi-turn path bypasses the adapter
  (also patches a latent streaming PII-redaction gap).
- Hardening (post code-review): incoming rows must declare all leaf-key paths
  (finish/usage/text/tool); incoming rows for an unsupported protocol are rejected at
  write time (no silent mis-parse); clearer parse-error diagnostics; tightened
  guard tests (per-location PII, value-switch data-driven proof, assertRaises).
- ADR-018 (bidirectional data-driven message adapter); docs/roadmap/module-map
  reconcile (32 modules, PR #57/#59/#60 history, ADR ledger, adr-015/016 status sync).

Tests: Odoo native, no-API-key; 302 non-tour tests green (normalize/wire byte-stable
non-regression + incoming data-driven proof + #62 matrix + #63 guard + multiturn loop
+ new validation guards). flake8 clean on the Runbot lint gate. Pre-existing HttpCase
browser tours need a live http server and fail identically on base 17.0 under --no-http.

Claude-Session: https://claude.ai/code/session_01MpghN1mdjfEzHd1yuSqdut
                                            

Branch: 17.0

Instance ID: 0

Age:

Up-time:

Delete Date:

Subbuilds Name State Detail
Build 386773 Check the quality with Pylint: from test_lint to test_pylint 19m Succeed Log
Build 386774 At install tests: from account to website_twitter 194m Succeed Log
Build 386775 Post install tests: step install all modules 118m Succeed Log
Build 386776 Post install tests: from account to payment_bidv_viin 139m Succeed Log
Build 386777 Post install tests: from payment_buckaroo to to_account_asset 154m Succeed Log
Build 386778 Post install tests: from to_account_asset_purchase to viin_account 79m Succeed Log
Build 386779 Post install tests: from viin_account_auto_transfer to viin_estimate 84m Succeed Log
Build 386780 Post install tests: from viin_estimate_approval to viin_project 39m Succeed Log
Build 386781 Post install tests: from viin_project_access_timesheet to website_twitter 60m Succeed Log
Build 386782 Test install all modules without demo data: from account to website_twitter 89m Succeed Log
Create Date Level Message
06/21/2026 14:30:41 INFO
Updated repository Viindoo-odoo
06/21/2026 14:30:41 INFO
Updated repository Viindoo-tvtmaaddons
06/21/2026 14:30:41 INFO
Updated repository Viindoo-erponline-enterprise
06/21/2026 14:30:41 INFO
Updated repository Viindoo-branding
06/21/2026 14:30:41 INFO
Cloned repository Viindoo-ai