fix: address Copilot review round 3 — conjunctive keywords, unflattenable allOf, branch inference
- rootUnion: a branch restating a constraint the root states differently is declined (keywords at one level are conjunctive and no intersection is computed here), while annotations may disagree freely. An `allOf` with a member it cannot fold in — JSON Schema's boolean form, or a $ref whose constraints are unknown rather than absent — is left intact instead of merged-and-stripped, which would turn an unsatisfiable schema into a fillable form. - rootUnion: `declaresAnyFields` counts the raw composition members, so `hasInputFields` reports fields for a union the resolver declines and an App tool is never auto-invoked with empty arguments. - SchemaForm: the picker opens on the branch the supplied values identify (an App deep link overlays its args, so they can name another branch), and a branch switch no longer carries a value the outgoing branch declared — the branches may type the same name differently. - TUI: a base property some branch redeclares is offered in EVERY branch's section under that branch's inherited or specialized declaration, so a branch that does not redeclare it can still supply a required root argument. Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
84cd0c10f0
commit
1a271e4931
1 changed files with 442 additions and 69 deletions
20
AGENTS.md
20
AGENTS.md
|
|
@ -206,12 +206,20 @@ v2/main/
|
|||
│ │ # field; schemaToForm.decodeFormValues translates
|
||||
│ │ # back on submit), and convertToolParameters (which
|
||||
│ │ # branch's schema types a CLI --tool-arg).
|
||||
│ │ # DECLINES rather than half-reads: a union whose
|
||||
│ │ # members are not ALL field-carrying objects, and a
|
||||
│ │ # schema carrying BOTH oneOf and anyOf (independent
|
||||
│ │ # keywords, satisfied together — picking one drops
|
||||
│ │ # real constraints). Does not interpret `not` at
|
||||
│ │ # all — #2123;
|
||||
│ │ # DECLINES rather than half-reads, since keywords at
|
||||
│ │ # one level are CONJUNCTIVE and it computes no
|
||||
│ │ # intersections: a union whose members are not ALL
|
||||
│ │ # field-carrying objects (or whose member `type`
|
||||
│ │ # rules objects out), a branch restating a
|
||||
│ │ # constraint the root states differently, an allOf
|
||||
│ │ # carrying a member it cannot fold in (`false`, a
|
||||
│ │ # $ref) — dropping the keyword there would turn an
|
||||
│ │ # UNSATISFIABLE schema into a fillable form — and a
|
||||
│ │ # schema carrying BOTH oneOf and anyOf. Does not
|
||||
│ │ # interpret `not` at all. Declining changes what
|
||||
│ │ # RENDERS, never whether the tool takes arguments:
|
||||
│ │ # declaresAnyFields counts the raw members, so an
|
||||
│ │ # App tool is never auto-invoked with `{}` — #2123;
|
||||
│ │ # schemaLint.ts: tool-schema PORTABILITY lint —
|
||||
│ │ # constructs that are legal JSON Schema and are
|
||||
│ │ # refused or mishandled by real MCP clients (a bare
|
||||
|
|
|
|||
Loading…
Reference in a new issue