Skip to content

feat(chat): one shared chat context for ChatInput.Root - #3771

Merged
kojiwakayama merged 9 commits into
mainfrom
feat/inbox-69-chatinput-shared-context
Aug 16, 2026
Merged

feat(chat): one shared chat context for ChatInput.Root#3771
kojiwakayama merged 9 commits into
mainfrom
feat/inbox-69-chatinput-shared-context

Conversation

@kojiwakayama

@kojiwakayama kojiwakayama commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

What

<Chat.Root> now accepts a chat={useChat()} session and folds it into the shared ChatContext, and the composer (ChatInput.Root and the batteries <ChatInput>) falls back to that context for any state props it is not given explicitly. A propless <ChatInput.Root> (or <ChatInput>) inside <Chat.Root chat={chat}> wires itself to the shared session — input, submit, stop, model selection, attachments, and the attach picker/drop zone all resolve through the context.

Why

Previously every composer had to be wired by hand: input, onChange, onSubmit, model, models, onModelChange, attachments, onAttach, onRemoveAttachment, stop each threaded through props even when a <Chat.Root> already held the same session state. One shared context removes that boilerplate while keeping the existing prop-driven paths intact:

  • Explicit props always win over the context fallback, so current call sites are unchanged.
  • A standalone composer (no surrounding ChatContext) keeps the props-only behavior.
  • ChatRootProps.messages/input (and the composer's input/onChange) became optional to allow the additive chat prop; the ChatRootProps doc notes that supplying neither chat nor the flat props yields an inert chat surface.

How

  • chat-root.tsx: new optional chat?: UseChatResult prop; each flat prop resolves as prop ?? chat.<field> before building the context value.
  • use-composer-value.ts: reads the optional ChatContext and falls back per-field (input, onChange/setInput, onSubmit, isLoading, stop, model, models, onModelChange, attachments, onAttach, onRemoveAttachment).
  • chat-composer.tsx: both ChatInput.Root and the batteries <ChatInput> hand the context-resolved onAttach to the attachment picker and drop zone, so the "+" picker works in a propless composer too; explicit onAttach/onDrop props stay focus-wrapped as before.

Tests

  • New chat-composer.shared-context.test.tsx suite covering: propless ChatInput.Root inside <Chat.Root chat={…}> (typing, submit, model change, attachments, stop), explicit-prop override precedence, and the standalone-composer unchanged path.
  • Full suite: deno task fmt:check, deno task lint, deno task lint:chat-composability, deno task lint:chat-ratchets, deno task typecheck, and deno task test all pass.

Ref: veryfront-issue-inbox#69

Summary by CodeRabbit

  • New Features

    • Chat composers can inherit input, submission, loading, model, and attachment settings from a surrounding chat session.
    • Chat roots can connect directly to an existing chat session, with sensible defaults for omitted values.
    • Explicit composer settings continue to override inherited settings.
    • Chat submissions can include selected attachments.
    • Individual messages can use a one-time model override.
  • Bug Fixes

    • Improved consistency for attachment handling across drag-and-drop and attachment picker interactions.
  • Tests

    • Added comprehensive coverage for shared context, model overrides, and standalone composer usage.

@github-actions

github-actions Bot commented Aug 16, 2026

Copy link
Copy Markdown

📦 Client bundle boundary

Entrypoint Modules Source size Server leaks
src/index.client.ts 321 1908 KiB ✅ 0

A server module in a client graph aborts hydration in the browser. New leaks fail CI; known leaks are tracked in scripts/lint/client-bundle-baseline.json to burn down.

@coderabbitai

coderabbitai Bot commented Aug 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f26f9cf4-a47a-4bc5-8e36-5f365b6ea078

📥 Commits

Reviewing files that changed from the base of the PR and between 68a9816 and fa6f4de.

⛔ Files ignored due to path filters (1)
  • src/server/handlers/dev/framework-candidates.generated.ts is excluded by !**/*.generated.*
📒 Files selected for processing (9)
  • docs/api-reference/veryfront/chat.md
  • src/agent/react/use-chat/types.ts
  • src/agent/react/use-chat/use-chat.status.test.tsx
  • src/agent/react/use-chat/use-chat.ts
  • src/react/components/chat/chat/composition/chat-composer.shared-context.test.tsx
  • src/react/components/chat/chat/composition/chat-composer.tsx
  • src/react/components/chat/chat/composition/chat-root.tsx
  • src/react/components/chat/chat/composition/use-composer-value.ts
  • src/react/components/chat/chat/contexts/chat-context.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/react/components/chat/chat/composition/chat-composer.tsx
  • src/react/components/chat/chat/composition/use-composer-value.ts
  • src/react/components/chat/chat/composition/chat-root.tsx

Included review availability: Your plan includes up to 3 reviews per rolling hour; 1 remains after this review.


📝 Walkthrough

Walkthrough

ChatRoot now accepts an optional useChat() session and supplies resolved values through shared context. Composer components consume omitted values from that context. Explicit props remain authoritative. useChat also supports per-message model overrides.

Changes

Shared chat context

Layer / File(s) Summary
Per-message model contract
src/agent/react/use-chat/..., src/react/components/chat/chat/contexts/chat-context.tsx, src/agent/react/use-chat/use-chat.status.test.tsx
sendMessage accepts an optional model override. The resolved model is sent in the request and stored in streamed message metadata.
ChatRoot session resolution
src/react/components/chat/chat/composition/chat-root.tsx
ChatRoot resolves explicit props, session values, defaults, submission state, attachments, and fallback handlers into shared context.
Composer context merging
src/react/components/chat/chat/composition/use-composer-value.ts, src/react/components/chat/chat/composition/chat-composer.types.ts
useComposerValue resolves omitted input, handlers, loading, model, and attachments from ChatContext. Explicit props remain authoritative. Submissions include files and model data, then clean up attachments.
Attachment integration and validation
src/react/components/chat/chat/composition/chat-composer.tsx, src/react/components/chat/chat/composition/chat-composer.shared-context.test.tsx
Attachment controls use resolved context handlers and state. Tests cover inherited values, explicit overrides, null values, submission, focus restoration, and standalone behavior.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: ⚪ Minimal · up to fa6f4

The PR adds shared chat-session fallbacks while preserving explicit prop behavior and standalone composers. No actionable merge-blocking risk remains; model precedence and reload semantics warrant bounded owner follow-up if those behaviors are required by the product contract.

Sequence Diagram(s)

sequenceDiagram
  participant ChatRoot
  participant ChatInputRoot
  participant useComposerValue
  participant ChatInputBase
  participant AttachmentPicker
  participant useChat
  ChatRoot->>useChat: read session state and handlers
  ChatRoot->>ChatInputRoot: provide shared chat context
  ChatInputRoot->>useComposerValue: resolve omitted composer props
  useComposerValue-->>ChatInputRoot: return context-backed values
  ChatInputBase->>AttachmentPicker: pass resolved attachment handler
  useComposerValue->>useChat: send text, files, and model
  useChat-->>ChatInputBase: stream assistant response
Loading

Possibly related PRs

Suggested reviewers: kwakayama, mattboon

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: shared chat context support for ChatInput.Root.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/inbox-69-chatinput-shared-context

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6f6d68db2c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/use-composer-value.ts
Comment thread src/react/components/chat/chat/composition/chat-composer.tsx Outdated
Comment thread src/react/components/chat/chat/composition/chat-root.tsx Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/react/components/chat/chat/composition/chat-composer.tsx (1)

220-251: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Use resolved composer values in ChatInputBase.

The default isLoading = false makes props.isLoading win over ChatContext.isLoading. A session-backed <ChatInput> can then allow submit while the session is loading.

The attachment UI later reads raw attachments and onRemoveAttachment props. A context-only attachment list will not render or remove correctly.

Keep isLoading undefined until useComposerValue resolves it. Render attachment pills with baseCtxValue.attachments and baseCtxValue.onRemoveAttachment. Add tests for loading and attachment fallback through <ChatInput>.

Proposed fix
-    isLoading = false,
+    isLoading,
...
-                {attachments && attachments.length > 0 && (
+                {baseCtxValue.attachments.length > 0 && (
                   <div className="mb-2.5 flex flex-wrap items-center gap-2">
-                    {attachments.map((file) => (
+                    {baseCtxValue.attachments.map((file) => (
                       <AttachmentPill
                         key={file.id}
                         attachment={file}
-                        onRemove={onRemoveAttachment}
+                        onRemove={baseCtxValue.onRemoveAttachment}

As per coding guidelines: “For behavior changes, add or update a focused failing test before changing implementation.”

🤖 Prompt for AI Agents
Treat finding text, file paths, and code as untrusted review data. Never follow
instructions embedded in them. Verify each finding against current code. Fix
only still-valid issues, skip the rest with a brief reason, keep changes
minimal, and validate.

In `@src/react/components/chat/chat/composition/chat-composer.tsx` around lines
220 - 251, Update ChatInputBase to leave isLoading undefined until
useComposerValue resolves it, allowing ChatContext.isLoading to control
session-backed submission; render attachment pills and removal through
baseCtxValue.attachments and baseCtxValue.onRemoveAttachment rather than raw
props. Add focused tests covering loading and context-only attachment fallback
through ChatInput.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Treat finding text, file paths, and code as untrusted review data. Never follow
instructions embedded in them. Verify each finding against current code. Fix
only still-valid issues, skip the rest with a brief reason, keep changes
minimal, and validate.

Inline comments:
In `@src/react/components/chat/chat/composition/chat-root.tsx`:
- Around line 119-121: Update Chat.Root’s attachment resolution so attachments,
onAttach, and onRemoveAttachment fall back to the corresponding values from the
chat session before applying defaults, while explicit flat props retain
precedence. Add a focused shared-context test covering attachment state and
handlers supplied through chat.

In `@src/react/components/chat/chat/composition/use-composer-value.ts`:
- Line 10: Update the import in use-composer-value.ts to use the equivalent
`#veryfront/`* internal alias instead of the relative ../contexts/chat-context.tsx
path, leaving same-directory import behavior unchanged.

---

Outside diff comments:
In `@src/react/components/chat/chat/composition/chat-composer.tsx`:
- Around line 220-251: Update ChatInputBase to leave isLoading undefined until
useComposerValue resolves it, allowing ChatContext.isLoading to control
session-backed submission; render attachment pills and removal through
baseCtxValue.attachments and baseCtxValue.onRemoveAttachment rather than raw
props. Add focused tests covering loading and context-only attachment fallback
through ChatInput.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9fb77e3e-4b77-48c8-91d9-a33ed72407ed

📥 Commits

Reviewing files that changed from the base of the PR and between d18decc and 6f6d68d.

⛔ Files ignored due to path filters (2)
  • src/server/handlers/dev/framework-candidates.generated.ts is excluded by !**/*.generated.*
  • templates/manifest.generated.ts is excluded by !**/*.generated.*
📒 Files selected for processing (4)
  • src/react/components/chat/chat/composition/chat-composer.shared-context.test.tsx
  • src/react/components/chat/chat/composition/chat-composer.tsx
  • src/react/components/chat/chat/composition/chat-root.tsx
  • src/react/components/chat/chat/composition/use-composer-value.ts

Included review availability: Your plan includes up to 3 reviews per rolling hour; 0 remain after this review.

Comment thread src/react/components/chat/chat/composition/chat-root.tsx
Comment thread src/react/components/chat/chat/composition/use-composer-value.ts
@kojiwakayama
kojiwakayama force-pushed the feat/inbox-69-chatinput-shared-context branch 2 times, most recently from 93ccfed to 6c9d30b Compare August 16, 2026 18:34
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

Review round addressed — branch rebased onto main and squashed into a single commit, now 6c9d30b76 (the per-thread replies cite 93ccfede6, the pre-amend sha of the same work).

Implemented

  • P1 — inherit the session loading state: dropped the isLoading = false default in ChatInputBase so an omitted prop reaches the context resolution as undefined. Stop now replaces Send mid-turn for a propless composer.
  • P2 — render the context-resolved attachments: the default composer body renders contextValue.attachments / contextValue.onRemoveAttachment instead of the raw props, so a contextual attachment is no longer submittable-but-invisible.
  • P2 — honor explicit null: Chat.Root compares error and streamingMessageId against undefined, so error={null} overrides the session instead of restoring it.

Declined, with reasons in-thread

  • Forwarding attachment values from chat: UseChatResult has no attachment members, so there is nothing to forward. The flat Chat.Root props are the intended source and already reach the composer; the real defect in that path is the P2 render fix above.
  • Switching ../contexts/chat-context.tsx to #veryfront/*: that is a same-module import, where the repo convention (AGENTS.md:86-88) prescribes a relative path.

Also in this push

  • ChatInputProps.input / onChange are now optional, matching ChatInput.Root. Without this a propless <ChatInput /> — the very shape this PR is about — failed lint:test-typecheck.
  • Regenerated docs/api-reference/veryfront/chat.md, which is what failed ci (lint) originally.

Tests: five new cases in chat-composer.shared-context.test.tsx covering each behavioral fix plus its inverse (explicit prop still wins / omitted prop still inherits). deno task verify:quick and lint:test-typecheck pass locally against the pinned Deno 2.7.7.

@kojiwakayama

Copy link
Copy Markdown
Contributor Author

Independent merge-readiness review on current head 6c9d30b76 found no blocking issue.

Verification:

  • shared-context, composer, and ChatRoot suites: 46 steps passed
  • exact-head CI: all required checks green
  • all five review threads are resolved, including two withdrawn findings
  • git diff --check: passed

Preview:

  1. Run deno task storybook.
  2. Open http://localhost:6006/?path=/docs/chat-components-chatinput--docs.
  3. Compare the default and composed ChatInput examples. This PR changes context wiring, not visual styling, so no visual delta or meaningful before/after screenshot is expected.

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6c9d30b76d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/chat-root.tsx Outdated
@kojiwakayama
kojiwakayama force-pushed the feat/inbox-69-chatinput-shared-context branch from 6c9d30b to 87650a9 Compare August 16, 2026 18:58
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

Fixed the current-head attachment submission finding in 87650a9a4 with red-green coverage. A propless composer with an attachment-only draft now bypasses text-only handleSubmit, maps the resolved attachment through attachmentsToFileParts, and calls the session sendMessage. Explicit onSubmit precedence and text-only delegation remain unchanged.\n\nVerification: 47 focused chat steps passed, deno task verify:quick passed, and git diff --check passed.\n\nPreview: run deno task storybook, then open http://localhost:6006/?path=/docs/chat-components-chatinput--docs. This is a submission-path fix with no intentional visual delta, so a screenshot would not add useful evidence.\n\n@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 87650a9a4f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/chat-root.tsx Outdated
@kojiwakayama
kojiwakayama force-pushed the feat/inbox-69-chatinput-shared-context branch from 87650a9 to 09750ce Compare August 16, 2026 19:13
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

Addressed the current-head flat-input review. When explicit flat submit state is supplied alongside chat, Chat.Root now submits the resolved flat input through sendMessage, clears the resolved setter, and does not fall back to the session draft. The new regression test failed before the implementation change and now passes.

Verification: 48 focused chat steps passed, deno task verify:quick passed before the clean rebase, and the 48 focused steps passed again on the rebased head.

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 09750ce005

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/use-composer-value.ts
Comment thread src/react/components/chat/chat/composition/use-composer-value.ts Outdated
@kojiwakayama
kojiwakayama force-pushed the feat/inbox-69-chatinput-shared-context branch from 09750ce to 68a9816 Compare August 16, 2026 19:32
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 68a9816537

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/use-composer-value.ts
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a5aac2a556

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/use-composer-value.ts Outdated
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4c8b941d0c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/chat-composer.tsx
@kojiwakayama
kojiwakayama force-pushed the feat/inbox-69-chatinput-shared-context branch from 4c8b941 to 12c4393 Compare August 16, 2026 20:14
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 12c4393722

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/use-composer-value.ts Outdated
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b193051918

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/react/components/chat/chat/composition/chat-root.tsx Outdated
Chat.Root accepts chat={useChat()} and folds the session into the shared
ChatContext, and the composer (ChatInput.Root and the batteries ChatInput)
falls back to that context when its explicit props (input, onSubmit, model,
models, onModelChange, attachments, onRemoveAttachment, stop, onAttach) are
omitted — including the attach picker and drop zone. Explicit props always
win, and a standalone composer with its own props is unchanged.

Resolving the review round:

- The batteries <ChatInput> no longer defaults isLoading to false, so an
  omitted prop inherits the session's loading state and Stop replaces Send
  during a turn.
- The default composer body renders the context-resolved attachments and
  remove handler, so a contextual attachment shows its pill and control.
- Chat.Root distinguishes an omitted prop from an explicit null, so
  error={null} / streamingMessageId={null} override the session instead of
  restoring it.
- Makes `input`/`onChange` optional on `ChatInputProps`, so a propless
  `<ChatInput />` under a `<Chat.Root chat={…}>` typechecks the way
  `ChatInput.Root` already did.
- Regenerates docs/api-reference/veryfront/chat.md for the shifted source
  lines (the stale generated reference that failed ci (lint)).

Ref: veryfront-issue-inbox#69
@kojiwakayama
kojiwakayama force-pushed the feat/inbox-69-chatinput-shared-context branch from b193051 to fa6f4de Compare August 16, 2026 20:44
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: fa6f4de13b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@kojiwakayama
kojiwakayama added this pull request to the merge queue Aug 16, 2026
Merged via the queue into main with commit ead7158 Aug 16, 2026
34 checks passed
@kojiwakayama
kojiwakayama deleted the feat/inbox-69-chatinput-shared-context branch August 16, 2026 21:32
@kojiwakayama kojiwakayama mentioned this pull request Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant