Repository navigation
Description
What happened
While reviewing Hermes through T3 Code's generic ACP integration, we verified that form elicitation loses choices declared as JSON Schema type: "array" with items.enum. T3 creates an optionless question without multiSelect, so the code cannot offer those choices as a multi-select card.
This is a source-based report with an isolated projection probe, not a claimed user-observed runtime failure or live UI reproduction. The scope is the generic array-enum mapping.
Diagnosis
- T3 advertises form elicitation, but its generic question projection reads only a property's top-level
enumor boolean type. It ignoresitems.enumand never setsmultiSelect. - Hermes' clarify builder emits array
items.enumformulti_selectand accepts a string-array answer. Its gateway useselicitation/createwhen the client advertises form support. - The registry adapter supplies a form override only for Factory Droid, so Hermes takes the generic path. The shared question contract already supports
multiSelect, and response serialization already preserves supplied string arrays.
Steps to reproduce
Proposed protocol reproduction, not run end to end:
- Connect a minimal ACP fixture to T3 and, during an active turn, send
elicitation/createwith these params, substituting the active session ID:
{"sessionId":"<active-session-id>","mode":"form","message":"Choose databases","requestedSchema":{"type":"object","properties":{"answer":{"type":"array","items":{"type":"string","enum":["PostgreSQL","SQLite"]}}},"required":["answer"]}}- Inspect the resulting question. The verified projection produces
options: []and omitsmultiSelect. - Expected: offer PostgreSQL and SQLite, permit selecting both, and return:
{"action":"accept","content":{"answer":["PostgreSQL","SQLite"]}}For a Hermes reproduction, explicitly enable clarify or attach a session whose frozen toolset already includes it, then invoke it with both choices and multi_select: true. The default hermes-acp toolset excludes clarify; this is a reproduction precondition, not a T3 defect.
Version
Affected runtime version: unknown, since no runtime failure was reproduced. Source verified at T3 commit 8b44f42b14c8e273156474a924ccf29680dd7857, also the tag commit for v0.1.8-nightly.20261104.4165.
Local server independently reports 0.1.7-nightly.20261103.4119 via /.well-known/t3/environment. This is not proof that its exact build was exercised.
Environment
Windows x64, version 10.0.26300; Node v26.12.1. Hermes via generic ACP; inspected Hermes commit 71736c9f32597bbca9d89cede5aa136e55946b2f. Installed Hermes version and client surface were not established. Triage CLI only: 0.1.8-nightly.20261104.4165, launched with npx t3@nightly triage.
Evidence
An isolated, dependency-free probe executed the real Hermes builder and T3's extracted generic projection with TypeScript annotations stripped. It did not start T3, make a model call, or render a client.
PASS: real Hermes builder emits array items.enum
Actual T3 projection: [{"id":"answer","header":"Question 1","question":"Choose databases","options":[]}]
PASS: single string enum retains two options; free text remains optionless
PASS: existing elicitationContent preserves an already supplied string array
FAIL: expected two selectable options, got 0; expected multiSelect=true, got undefined
No logs or screenshots are claimed.
Related issues
- #15743 closing comment says "One part is still open: ACP elicitation capability and multi-select answer handling." It asks for a new issue limited to the remaining part. This report covers the generic array-enum mapping only.
- #21770 is open and unmerged as checked on 2026-11-04. Its proposed tests include plain
items.enum. The limitation remains in the latest nightly source inspected above; no shipped fix was found. - #23505 concerns OMP's titled choices, separate custom-answer field, and card layout. It overlaps the generic mapping but does not report this narrow Hermes array-enum case. No open issue dedicated to the residual
items.enumlimitation was found.
Fix applied or workaround
None applied; no workaround was tested. A focused change would map array items.enum into options and set multiSelect: true, preserving existing single-string enum and free-text behavior.
Filed by
Prepared by Codex, GPT-6.1-Sol, via npx t3@nightly triage.
Activity