Skip to content

feat: Add search functionality to admin Addie threads#827

Merged
bokelley merged 1 commit into
mainfrom
bokelley/addie-thread-search
Jan 20, 2026
Merged

feat: Add search functionality to admin Addie threads#827
bokelley merged 1 commit into
mainfrom
bokelley/addie-thread-search

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • Add search/filter functionality to Admin → Addie → Threads page
  • Search by message content (text search)
  • Search by user display name
  • Filter by tool name used in conversation

Changes

Backend:

  • Extended ThreadListFilters with search_text, tool_name, user_search
  • Updated listThreads() to handle new filters with optional JOIN for message search
  • Added getAvailableTools() method for tool dropdown
  • Added /api/admin/addie/threads/tools endpoint
  • Added input length validation on search params

Frontend:

  • Added search row with text, user, and tool inputs
  • Added loading state to prevent concurrent search requests
  • Tool dropdown populates dynamically from available tools

Test plan

  • TypeScript compiles without errors
  • All tests pass
  • Manual testing with Vibium browser - UI renders correctly

🤖 Generated with Claude Code

Add ability to search/filter threads by:
- Message content (text search)
- User display name
- Tool name used in conversation

Backend changes:
- Extend ThreadListFilters with search_text, tool_name, user_search
- Update listThreads() to handle new filters with optional JOIN
- Add getAvailableTools() method for tool dropdown
- Add /api/admin/addie/threads/tools endpoint
- Add input length validation on search params

Frontend changes:
- Add search row with text, user, and tool inputs
- Add loading state to prevent concurrent requests
- Wire up search params to API call

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@bokelley bokelley merged commit 67d68d7 into main Jan 20, 2026
6 checks passed
bokelley added a commit that referenced this pull request Apr 24, 2026
…#2889) (#2992)

* feat(training-agent): dogfood @adcp/client 5.14 seller helpers (closes #2889)

Adopts the five helper families shipped for seller authors in
`@adcp/client` 5.11–5.14:

- `wrapEnvelope` for sibling-field emission in the framework server's
  response adapters
- `bridgeFromSessionStore` wires `comply_test_controller.seed_product`
  fixtures through `get_products` on sandbox requests (new behavior —
  closes a latent gap where seeded products never reached the buyer
  tool)
- `mergeSeedProduct` replaces the shallow-spread overlay in
  `overlaySeededProducts`
- `mcpAcceptHeaderMiddleware` replaces the inline Accept header +
  rawHeaders rewrite on `/mcp` and `/mcp-strict`
- `adcpError()` + dispatcher `sanitizeAdcpErrorEnvelope` make
  `conflict-envelope.ts` and the response-body wrapper redundant —
  both deleted; a framework-path regression locks in that `recovery`
  is stripped from `IDEMPOTENCY_CONFLICT` envelopes at both transport
  layers

Follow-ups filed as adcontextprotocol/adcp-client#824, #825, #826,
#827 landed in 5.14 (closed), so the adoption is complete rather than
partial. Deferred: migrating `comply_test_controller` off the
`customTools` path to `registerTestController` for its auto-emitted
capability block.

Net `+183 / -459` — 276 lines of bespoke glue removed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* revert: pin @adcp/client to 5.13.0, trim adoption to 5.13-safe helpers

@adcp/client 5.14 regressed the storyboard runner — with 5.14 the
training agent drops from 52/52 clean to 39/52 (confirmed against both
this branch and main, identical behavior). Filed upstream as
adcontextprotocol/adcp-client#866.

For this PR, pin to 5.13.0 and narrow the adoption to what works
there: `wrapEnvelope`, `mergeSeedProduct`, and a hand-rolled session-
scoped `testController.getSeededProducts` callback (new behavior —
seeded products now flow through `get_products`, closing a latent
gap).

Put back until the 5.14 bump resolves adcp-client#866:

- inline Accept-header + rawHeaders rewrite on `/mcp` and `/mcp-strict`
- `conflict-envelope.ts` + `wrapResponseForConflictRedaction`
- response-wrapper regression test file

Drop the framework-path regression test for `recovery`-absence on
`IDEMPOTENCY_CONFLICT` — that path exists now only at the HTTP-layer
redactor, which `dispatchTestRequest` doesn't exercise. The legacy
`conflict-envelope.test.ts` covers the redactor's unit contract.

Storyboards local verify:
- legacy (TRAINING_AGENT_USE_FRAMEWORK=0): 52/52 clean, 380 passed, 0 failed
- framework (=1): 51/52 clean, 390 passed, 1 known residual

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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