Commit Graph

8 Commits

Author SHA1 Message Date
Alem Tuzlak b691b63660 fix(showcase): narrow aimock fixture patterns + add drift guardrail
Substring-match fixtures (pie chart, bar chart, schedule, trip, etc.)
cross-fired across demos with different tool surfaces and returned tool
names the target agent never registered, causing demos to render nothing
in prod when aimock handles traffic.

Fixture changes (showcase/aimock/feature-parity.json):
- Replace generic pie-chart / bar-chart matches with per-suggestion
  specific phrases so gen-ui-tool-based gets render_pie_chart /
  render_bar_chart directly and beautiful-chat gets pieChart / barChart
  with real data (skipping the query_data two-step that caused the
  infinite loop on re-matching prompts).
- Narrow schedule+meeting to the Beautiful Chat 30-minute prompt
  returning scheduleTime.
- Narrow flight+fly to flights-from-SFO-to-JFK.
- Narrow background to sunset-themed-gradient.
- Remove trip, sales, pipeline, todo: substring-false-firing across
  unrelated demos; interrupt/A2UI demos fall through to real LLM.

Guardrail (showcase/scripts/validate-fixture-tool-surface.ts):
- Pure validate() cross-references every fixture's tool-call name
  against the tool surface of each demo whose suggestion prompt contains
  the fixture's match substring. Loud failure when the fixture returns a
  tool the demo's agent does not register.
- CLI walks packages/ collecting suggestions from page.tsx + hooks/,
  frontend tools from useComponent / useHumanInTheLoop / useFrontendTool
  / useRenderTool / useDefaultRenderTool, and backend tools via route.ts
  agentId->graphId map + langgraph.json graph->file + @tool decorators.
- 7 vitest cases written TDD-first covering the drift detection,
  content-only fixtures, case-insensitivity, and multi-tool responses.
- Current state: 33 fixtures x 191 demos, no drift. Counterfactual
  (reverting the pie-chart fix) correctly flags gen-ui-tool-based and
  declarative-gen-ui.

Also fixes a separate runtime bug in the langgraph-python package
Dockerfile: WORKDIR /app left /app owned by root; the app user could
not create the .langgraph_api cache dir LangGraph's in-memory runtime
needs, so the agent crashed on boot. Added a non-recursive chown
app:app /app (preserves the original perf intent of the explicit
--chown on COPY, which avoided a recursive chown).
2026-04-22 10:16:11 -05:00
Jordan Ritter b9bcf2e6b6 fix(showcase/packages-python): drop to USER app across 11 Python packages, add missing /app/public COPY to langgraph-python
All 11 Python runners previously executed as root. Bring them into parity
with langroid (the one Python package that already had the pattern):

- Create uid/gid 1001 'app' user/group before any COPY
- Add --chown=app:app to runner-stage COPY directives
- USER app before EXPOSE/CMD
- langgraph-python: add the missing COPY --from=frontend /app/public line
  (every other Python package has it) plus an empty public/.gitkeep so
  the copy resolves

Packages touched: ag2, agno, claude-sdk-python, crewai-crews, google-adk,
langgraph-fastapi, langgraph-python, llamaindex, ms-agent-python,
pydantic-ai, strands.
2026-04-21 19:05:23 -07:00
Jordan Ritter bc264aee95 fix(showcase/package-langgraph-python): multi-stage Dockerfile with venv builder 2026-04-21 18:20:17 -07:00
Jordan Ritter c25c1ca291 fix: remove shared_frontend COPY from demo package Dockerfiles (deleted in #3896) 2026-04-14 13:27:05 -07:00
Jordan Ritter b6fcafe4cd feat: all 17 showcase packages to 9-demo parity with Sales Dashboard hero
Every package: 9 demos (agentic-chat hero, hitl MeetingTimePicker, tool-rendering,
gen-ui-tool-based Chart Generator, gen-ui-agent A2UI dynamic, shared-state-read/
write/streaming, subagents), 7 backend tools, Playwright e2e tests per demo.
Cross-cutting: debug routes, error boundaries, camelCase SSE, generate_a2ui
conversation context, spring-ai JSON weather, langroid adapter fixes.

# Conflicts:
#	showcase/packages/ag2/manifest.yaml
#	showcase/packages/ag2/src/agents/agent.py
#	showcase/packages/ag2/src/app/api/debug/route.ts
#	showcase/packages/ag2/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/ag2/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/ag2/src/app/demos/hitl/page.tsx
#	showcase/packages/ag2/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/ag2/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/ag2/tests/e2e/hitl.spec.ts
#	showcase/packages/ag2/tsconfig.json
#	showcase/packages/agno/manifest.yaml
#	showcase/packages/agno/src/agents/main.py
#	showcase/packages/agno/src/app/api/debug/route.ts
#	showcase/packages/agno/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/agno/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/agno/src/app/demos/hitl/page.tsx
#	showcase/packages/agno/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/agno/tsconfig.json
#	showcase/packages/claude-sdk-python/manifest.yaml
#	showcase/packages/claude-sdk-python/src/agents/agent.py
#	showcase/packages/claude-sdk-python/src/app/api/debug/route.ts
#	showcase/packages/claude-sdk-python/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/claude-sdk-python/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/claude-sdk-python/src/app/demos/hitl/page.tsx
#	showcase/packages/claude-sdk-python/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/claude-sdk-python/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/claude-sdk-python/tests/e2e/hitl.spec.ts
#	showcase/packages/claude-sdk-python/tsconfig.json
#	showcase/packages/claude-sdk-typescript/.gitignore
#	showcase/packages/claude-sdk-typescript/src/app/api/debug/route.ts
#	showcase/packages/claude-sdk-typescript/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/claude-sdk-typescript/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/claude-sdk-typescript/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/claude-sdk-typescript/tests/e2e/hitl.spec.ts
#	showcase/packages/crewai-crews/manifest.yaml
#	showcase/packages/crewai-crews/src/agents/crew.py
#	showcase/packages/crewai-crews/src/agents/tools/custom_tool.py
#	showcase/packages/crewai-crews/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/crewai-crews/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/google-adk/manifest.yaml
#	showcase/packages/google-adk/src/agents/main.py
#	showcase/packages/google-adk/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/google-adk/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/google-adk/src/app/demos/hitl/page.tsx
#	showcase/packages/langgraph-fastapi/src/app/api/debug/route.ts
#	showcase/packages/langgraph-fastapi/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langgraph-fastapi/src/app/demos/hitl/page.tsx
#	showcase/packages/langgraph-fastapi/tests/e2e/hitl.spec.ts
#	showcase/packages/langgraph-fastapi/tsconfig.json
#	showcase/packages/langgraph-python/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langgraph-python/src/app/demos/hitl/page.tsx
#	showcase/packages/langgraph-python/tests/e2e/agentic-chat.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/hitl.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/shared-state-streaming.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/shared-state-write.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/subagents.spec.ts
#	showcase/packages/langgraph-python/tsconfig.json
#	showcase/packages/langgraph-typescript/.gitignore
#	showcase/packages/langgraph-typescript/src/agent/graph.ts
#	showcase/packages/langgraph-typescript/src/app/api/debug/route.ts
#	showcase/packages/langgraph-typescript/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langgraph-typescript/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/langgraph-typescript/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/langgraph-typescript/tests/e2e/hitl.spec.ts
#	showcase/packages/langroid/src/agents/agent.py
#	showcase/packages/langroid/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langroid/src/app/demos/hitl/page.tsx
#	showcase/packages/langroid/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/llamaindex/manifest.yaml
#	showcase/packages/llamaindex/src/agents/agent.py
#	showcase/packages/llamaindex/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/llamaindex/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/llamaindex/src/app/demos/hitl/page.tsx
#	showcase/packages/llamaindex/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/mastra/.gitignore
#	showcase/packages/mastra/package.json
#	showcase/packages/mastra/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/mastra/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/mastra/src/mastra/agents/index.ts
#	showcase/packages/mastra/src/mastra/tools/index.ts
#	showcase/packages/mastra/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/mastra/tests/e2e/hitl.spec.ts
#	showcase/packages/ms-agent-dotnet/agent/Program.cs
#	showcase/packages/ms-agent-dotnet/manifest.yaml
#	showcase/packages/ms-agent-dotnet/src/app/api/debug/route.ts
#	showcase/packages/ms-agent-dotnet/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/ms-agent-dotnet/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/ms-agent-dotnet/src/app/demos/hitl/page.tsx
#	showcase/packages/ms-agent-dotnet/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/ms-agent-dotnet/tests/e2e/hitl.spec.ts
#	showcase/packages/ms-agent-dotnet/tsconfig.json
#	showcase/packages/ms-agent-python/src/agents/agent.py
#	showcase/packages/ms-agent-python/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/ms-agent-python/src/app/demos/hitl/page.tsx
#	showcase/packages/ms-agent-python/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/pydantic-ai/manifest.yaml
#	showcase/packages/pydantic-ai/src/agents/agent.py
#	showcase/packages/pydantic-ai/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/pydantic-ai/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/pydantic-ai/src/app/demos/hitl/page.tsx
#	showcase/packages/spring-ai/manifest.yaml
#	showcase/packages/spring-ai/src/app/api/debug/route.ts
#	showcase/packages/spring-ai/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/spring-ai/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/spring-ai/src/app/demos/hitl/page.tsx
#	showcase/packages/spring-ai/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/spring-ai/src/main/java/com/copilotkit/showcase/springai/AgentConfig.java
#	showcase/packages/spring-ai/src/main/java/com/copilotkit/showcase/springai/tools/WeatherTool.java
#	showcase/packages/spring-ai/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/spring-ai/tests/e2e/hitl.spec.ts
#	showcase/packages/spring-ai/tsconfig.json
#	showcase/packages/strands/manifest.yaml
#	showcase/packages/strands/src/agents/agent.py
#	showcase/packages/strands/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/strands/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/strands/src/app/demos/hitl/page.tsx
#	showcase/packages/strands/src/app/demos/tool-rendering/page.tsx
#	showcase/shell/src/data/registry.json
2026-04-13 19:57:58 -07:00
Jordan Ritter e233d08f40 feat: upgrade all 17 showcase packages to full feature parity
Each package wraps shared tools in its framework's idiom, demo pages import
from @copilotkit/showcase-shared via tsconfig paths. Comprehensive Playwright
e2e tests adapted per package (130+ test files).

Cross-cutting fixes: debug routes (/ok→/health), dead code removal,
error boundaries, thread safety, langroid adapter, claude-sdk-ts text emission.
2026-04-13 17:38:55 -07:00
Jordan Ritter 1bdc85845a fix: pin all showcase Docker base images to specific minor versions 2026-04-12 23:40:16 -07:00
Jordan Ritter 479e62cb7f feat: add unified showcase platform with CI, Docker starters, and 13 deployed integrations 2026-04-08 19:59:29 -07:00