Skip to content

[EPIC-V][LOU-V12] agent.send(), session.send(), evals and the React hook accept content parts - #109

Merged
LinuxDevil merged 2 commits into
mainfrom
lou-v12-multimodal-public-api
Oct 1, 2026
Merged

LinuxDevil merged 2 commits into
mainfrom
lou-v12-multimodal-public-api

Conversation

@LinuxDevil

Copy link
Copy Markdown
Owner

What

  • New exported AgentInput = string | ContentPart[] | Message[] (src/providers/content.ts) with toMessages() and describeInput() helpers.
  • agent.send() / agent.stream() (SimpleAgent), session.send() / stream(), t.send() in evals and useLoushyAgent().send() accept it: a string or parts become one user message, a Message[] is passed through (appended to the transcript in a session).
  • The React user bubble shows the text plus an [image] / [file] marker per non-text part.
  • SqliteStore sessions and checkpoints encode Uint8Array parts as { "$bytes": "<base64>" } like FileSessionStore (reuses its exported encodeBytes / decodeBytes; about 6 changed lines, V11.2 done here).
  • Docs (providers, sessions, react), regenerated llms-full.txt, CHANGELOG (Added).

Why

Finishes the "Multimodal input" matrix row after LOU-V11 (#106): messages could carry parts, but only AgentExecutor.execute() could take them.

Acceptance criteria

  • send/stream on SimpleAgent and AgentSession accept AgentInput; checkpoint/resume paths work with parts (tested with a crash + agent.resume()).
  • t.send() and useLoushyAgent().send() accept AgentInput; the hook shows text via textOf plus [image]/[file] markers.
  • SqliteStore sessions/checkpoints round-trip Uint8Array parts.
  • Tests with mockModel: agent.send(parts) asserted on the recorded request, session round trip via memoryStore() and :memory: SqliteStore, eval t.send(parts), hook send(parts), reducer, type test.
  • Docs, llms files, CHANGELOG.
  • Scope: nothing under src/execution, src/tools, src/cli, apps touched.

How verified

  • npx tsc --noEmit: clean
  • npm run lint: 0 errors, 404 warnings (none in changed files)
  • npm run test:types: 6 files, 30 tests, no type errors
  • npx vitest run: 158 files passed, 2294 passed / 3 skipped
  • npm run build && npm run build --workspace=packages/create-loushy-agent: success
  • npm run docs:verify-snippets -- --skip-build: all 120 snippets type-check
  • npm run docs:llms:check: ok
  • npm run test:coverage: 2294 passed; npm run fallow: exit 0, 0 above threshold

🤖 Generated with Claude Code

https://claude.ai/code/session_016bY29ibQgv3MDdjAbUT4YR


Generated by Claude Code

claude added 2 commits October 1, 2026 16:47
…ook accept content parts

send()/stream() on agents and sessions, t.send() and useLoushyAgent().send()
take an AgentInput (string | ContentPart[] | Message[]). SqliteStore saves
Uint8Array parts as base64 like FileSessionStore.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bY29ibQgv3MDdjAbUT4YR
…blic-api

# Conflicts:
#	CHANGELOG.md
#	src/react/reducer.ts
@LinuxDevil
LinuxDevil merged commit 0834f37 into main Oct 1, 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.

2 participants