Commit Graph

6618 Commits

Author SHA1 Message Date
Alem Tuzlak a8eeef3a87 feat(vscode-extension): add test workspace with example catalog and fixtures 2026-04-15 13:57:19 +02:00
Alem Tuzlak 6589cf2e73 Merge branch 'main' into worktree-lucky-popping-wren 2026-04-15 13:22:46 +02:00
Alem Tuzlak 137e17a278 docs: add VS Code extension guide with fixture format and cross-links 2026-04-15 13:12:38 +02:00
github-actions[bot] 4abb9af1b2 style: auto-fix formatting 2026-04-15 11:12:37 +00:00
Jordan Ritter d2a8eca4c6 fix: restructure spring-ai starter to use Maven standard directory layout
The generate-starters script was flattening src/main/{java,resources} into
agent/{java,resources}, breaking Maven builds. Add a post-copy step that
moves them to agent/src/main/{java,resources} as Maven expects.
2026-04-15 13:10:57 +02:00
Jordan Ritter a1d5fd87b0 feat: fill QA checklists with real test steps, add test coverage matrix
Replace TODO placeholders in all 73 QA checklist files across 17 showcase
packages with specific, actionable test steps derived from reading the
actual demo page source code. Each checklist now references real
data-testid selectors, hook names, expected UI states, and interaction
flows.

Add showcase/QA-COVERAGE.md with a comprehensive matrix showing coverage
across manual QA, Vitest unit tests, Playwright E2E (smoke and interaction),
per-package E2E, aimock fixtures, and CI automation for all 9 demos plus
the Sales Dashboard starter hero.
2026-04-15 13:10:57 +02:00
Jordan Ritter a7d4e6d9a0 fix: prevent langgraph-python agent from looping on query_data
The agent's system prompt didn't mention pieChart/barChart frontend
tools, so gpt-4o-mini would call query_data repeatedly instead of
rendering charts. Updated the system prompt to explicitly instruct
the agent to call query_data once then use pieChart/barChart, and
updated the query_data tool description to reinforce single-call
semantics.
2026-04-15 13:10:56 +02:00
github-actions[bot] 6fbf78bd26 style: auto-fix formatting 2026-04-15 13:10:55 +02:00
Jordan Ritter 1332183ea9 fix: langgraph-python starter agent — permissions, imports, and tools.py naming collision
Root causes (verified locally with docker build + run):
1. PermissionError: non-root user can't write .langgraph_api dir — fix: chown -R app:app /app
2. ImportError: relative imports fail in langgraph_cli context — fix: absolute imports
3. ValueError: tools.py and tools/ directory collision — fix: rename to tool_wrappers.py

Tested: docker run returns {"status":"ok","agent":"ok"}
2026-04-15 13:10:55 +02:00
Jordan Ritter 8a127dd2b6 chore: update CODEOWNERS default reviewers 2026-04-15 13:10:54 +02:00
Jordan Ritter 2749a6792f fix: pin langgraph versions to prevent breaking API changes 2026-04-15 13:10:54 +02:00
Alem Tuzlak d00c115edd test(vscode-extension): add React component tests for App, FixturePicker, and bridge 2026-04-15 13:10:53 +02:00
Jordan Ritter 7ba69350fd fix: update test expectations for agent_server:app devScripts 2026-04-15 13:10:53 +02:00
Jordan Ritter ae38d93909 fix: remove invalid secrets reference in deploy workflow step conditions 2026-04-15 13:10:52 +02:00
Jordan Ritter a8774171d5 fix: add agent_server.py to all Python starters, matching demo packages
Python starters were trying to run uvicorn with agent.<module>:app but
those modules don't export a FastAPI app. The demo packages use
agent_server.py as the FastAPI wrapper, so starters need it too.

Changes:
- Copy agent_server.py from each demo package into starter root,
  rewriting "from agents." to "from agent." for the starter layout
- Update all non-langgraph Python devScripts to use agent_server:app
- Update Dockerfile.python to COPY agent_server.py for non-langgraph
- Update getEntrypointBlock() generic Python to use agent_server:app
- Make langgraph-fastapi use langgraph_cli dev like langgraph-python
  (it was incorrectly configured as a uvicorn-based starter)
- Regenerate all starters
2026-04-15 13:10:52 +02:00
Jordan Ritter eac1161628 fix: clean Slack alert formatting across showcase workflows
Use jq to build JSON payloads safely and payload-file-path to avoid
inline multiline content. Limits error context to 3 lines, strips ANSI
codes, and caps field length at 200 chars.

- drift-detection: split payload build from post, sanitize playwright output
- starter-smoke: replace toJSON(format(...)) double-encoding with jq
- showcase_deploy: replace 300-char inline ternary with readable shell conditional
2026-04-15 13:10:51 +02:00
Jordan Ritter add2251e16 fix: remove test-integration-tmp from starter-smoke matrix (lost in #3899 merge) 2026-04-15 13:10:50 +02:00
Jordan Ritter 8a66424a33 fix: align langgraph-python starter with working demo package layout
The langgraph-python starter crashes on Railway because of a directory
structure mismatch: agents were in agent/ with langgraph.json inside
agent/, causing langgraph_cli to fail resolving module paths.

Match the demo package's working layout:
- Move agents from agent/ to src/agents/ (same as demo)
- Put langgraph.json at project root (same as demo)
- Point entrypoint at root langgraph.json instead of agent/langgraph.json
- Templatize Dockerfile.python with AGENT_DIR and DOCKER_EXTRA_COPY vars
- Skip langgraph.json path rewriting when agentDir matches agentSourceDir
- Update tests to use framework agentDir instead of hardcoding "agent"

Regenerate all 17 starters.
2026-04-15 13:10:50 +02:00
Jordan Ritter b5b27ca248 fix: wider starter hero section, sticky renderer selector above sidebar 2026-04-15 13:10:49 +02:00
Jordan Ritter 96f248b5e5 fix: format 2026-04-15 13:10:48 +02:00
Jordan Ritter fb6b518362 fix: mock navigator in clipboard test for Node 20 compatibility 2026-04-15 13:10:48 +02:00
Jordan Ritter 73cb72abfc fix: harden deploy pipeline — independent concurrency, post-deploy health checks 2026-04-15 13:10:47 +02:00
Jordan Ritter 93511a0753 fix: responsive iframe height and scrollable starter content 2026-04-15 13:10:47 +02:00
Jordan Ritter 1f14ee4b48 fix: format showcase_deploy.yml 2026-04-15 13:10:46 +02:00
Jordan Ritter f4887a763e test: add userToggledRef behavior tests for reasoning message
Two new test cases covering the core behavioral fix:
- User collapses during streaming → panel stays collapsed after stream ends
- User collapses then re-expands during streaming → panel stays open after stream ends
2026-04-15 13:10:45 +02:00
Jordan Ritter 921b02ab57 test: wrap fireEvent.click in act() for deterministic reasoning toggle test
Without act(), React 18 defers the state update through its scheduler,
which can race with waitFor polling on slow CI runners (Node 20.x/22.x).
Wrapping in act() forces synchronous flush.
2026-04-15 13:10:45 +02:00
Jordan Ritter adbd38b5e5 fix: respect user expand/collapse intent in reasoning message
The auto-collapse useEffect unconditionally called setIsOpen(false) when
streaming ended, overriding any manual expand/collapse the user had
performed.  Add a userToggledRef that tracks explicit clicks so the
effect only auto-collapses when the user hasn't interacted.
2026-04-15 13:10:44 +02:00
Jordan Ritter a21c021e88 fix: make adduser idempotent in all Dockerfile templates, regenerate starters 2026-04-15 13:10:43 +02:00
Jordan Ritter d45620c1e7 fix: propagate copyToClipboard success result to CopyButton UI state
The CopyButton in react-core was showing the "copied" checkmark based on
an independent clipboard availability check rather than the actual copy
result. This meant a failed copy (e.g. permission denied) would still
show the success indicator. Now the onClick handler returns the boolean
from copyToClipboard, and handleClick uses that to drive the UI state.
Also removes unsafe type casts of onClick to Promise<void>.
2026-04-15 13:10:43 +02:00
Jordan Ritter 2f4152c8ec fix: extract shared copyToClipboard utility to eliminate clipboard duplication
Address review feedback: extract the repeated clipboard availability check +
writeText + error handling pattern into a shared copyToClipboard() utility in
@copilotkit/shared. All 9 call sites across angular, react-core, and react-ui
now use the shared utility instead of duplicating the same code block.
2026-04-15 13:10:42 +02:00
Jordan Ritter 04739dd6ba fix: guard clipboard calls and only show copied state on success (#2114)
Add null checks for navigator.clipboard across all copy-to-clipboard
calls to prevent TypeError in non-localhost environments where the
Clipboard API is unavailable. The copied indicator now only appears
after a confirmed successful write, preventing false positive UX
feedback when the clipboard API is missing or the write fails.
2026-04-15 13:10:41 +02:00
Jordan Ritter d4c75ce15e fix: replace tautological test with real unit tests for error visibility
Extract getErrorSuppression as a pure testable function from the
routeError closure. Replace the mock-only test that only proved mock
wiring with 12 real assertions covering all visibility x isDev
combinations against the actual logic.
2026-04-15 13:10:41 +02:00
Jordan Ritter 2c3c6a973d fix: surface TOAST/BANNER errors even when showDevConsole=false (#2431)
The routeError function returned early for ALL errors when
showDevConsole was false, suppressing user-visible errors
(TOAST and BANNER visibility) in production.

Now only DEV_ONLY and SILENT errors are suppressed in production.
TOAST and BANNER errors are always surfaced to the chat UI.
2026-04-15 13:10:40 +02:00
Jordan Ritter 8faad0a325 fix: remove incorrect changeset file
CopilotKit no longer uses changesets for versioning.
2026-04-15 13:10:39 +02:00
Jordan Ritter 53e6e84af0 chore: add changeset 2026-04-15 13:10:39 +02:00
Jordan Ritter 9a0c7eb18f fix: remove unstable key on CodeBlock to prevent flickering during streaming
The original Math.random() key caused React to remount the CodeBlock on
every render. The PR's content-based key (language + content prefix) still
changed every streaming token, causing the same flickering. Removing the
key entirely lets React use positional identity, which is stable across
re-renders while content streams in.

Closes #2669
2026-04-15 13:10:38 +02:00
Jordan Ritter 7c9ac787f0 fix: clone visited-refs set to prevent false circular-ref detection across sibling branches
The shared visitedRefs Set was mutated in place, so when two sibling
properties referenced the same $def (e.g. billing and shipping both
referencing Address), the second resolution was incorrectly flagged as
circular. Clone the set before recursing so each branch has its own
ancestry path. Added regression test that fails without this fix.
2026-04-15 13:10:37 +02:00
Jordan Ritter 6b391c6538 fix: add circular $ref cycle detection in JSON schema to Zod conversion
Recursive JSON schemas that reference themselves via $ref would cause
infinite recursion and stack overflow. This adds a visited set that
tracks which $ref paths have been seen during resolution. When a cycle
is detected, it breaks with z.any() and logs a console.warn so users
get feedback. Also adds console.warn for the generic z.any() fallback
on unsupported schema types.

Adds tests for circular refs, non-circular $ref resolution, anyOf with
$ref variants, integer type, null type, and unsupported type warning.
2026-04-15 13:10:36 +02:00
github-actions[bot] 3c32e469d8 style: auto-fix formatting 2026-04-15 13:10:36 +02:00
Jordan Ritter 8ebbba20df fix: handle anyOf/oneOf/ in JSON schema to Zod conversion (#2220) 2026-04-15 13:10:35 +02:00
Jordan Ritter 92730856b5 fix: widen openai peer dep range to include v6.x
The compatibility layer correctly handles v6 (same API surface as v5),
but the version range ^5.0.0 excluded v6.x. Changed to >=5.0.0 so
users on the latest openai SDK don't get peer dependency warnings.
2026-04-15 13:10:34 +02:00
Jordan Ritter 614e4cf815 fix: replace unsafe type casts with proper type guards for OpenAI v4/v5 compat
- Remove all `as any`, `as Function`, and `as Record<string, unknown>` casts
  from production code in the OpenAI compatibility layer
- Introduce typed `OpenAIV4Beta` interface and `hasV4BetaChat` type guard
  for safe runtime detection of v4 vs v5 clients
- Extract `retrieveThreadRun` and `submitToolOutputsStream` helper functions
  into utils.ts with properly typed generic signatures, moving the v4/v5
  dispatch logic out of the assistant adapter
- Give `getChatCompletionsForStreaming` an explicit return type so callers
  no longer need secondary casts
- Update tests to exercise the new helpers directly instead of
  duplicating dispatch logic inline
2026-04-15 13:10:34 +02:00
Jordan Ritter e4c669f677 fix: regenerate lockfile for openai peer dep range change
The openai specifier in package.json was updated to ^4.85.1 || ^5.0.0
but the lockfile was not regenerated, causing all CI jobs to fail with
frozen-lockfile mismatch errors.
2026-04-15 13:10:33 +02:00
Jordan Ritter 1a458d1dcf test: add OpenAI SDK v4/v5 compatibility tests (#1979)
Cover isOpenAIV5 detection, getChatCompletionsForStreaming dispatch,
and named-path-param calling conventions for runs.retrieve and
submitToolOutputsStream.
2026-04-15 13:10:32 +02:00
Jordan Ritter 020588e357 fix: support OpenAI SDK v5 in adapter and assistant adapter (#1979)
OpenAI SDK v5 removed beta.chat (promoted to chat.completions) and
changed multi-path-param methods to use named params (e.g.
runs.retrieve(runId, { thread_id }) instead of positional args).

- Add isOpenAIV5() detection and getChatCompletionsForStreaming() helper
- Migrate OpenAIAdapter to use helper for streaming completions
- Migrate OpenAIAssistantAdapter runs.retrieve() and
  submitToolOutputsStream() to branch on SDK version
- Add openai ^4.85.1 || ^5.0.0 to peerDependencies
2026-04-15 13:10:32 +02:00
Jordan Ritter 856ec88b22 fix: update blockquote nested paragraph selector after p-to-div change
The blockquote.copilotKitMarkdownElement p selector targeted literal <p>
elements inside blockquotes, but paragraphs now render as <div> after
the hydration fix. Updated to target .copilotKitParagraph class instead.

Also removes unused import and adds a regression test for this selector.
2026-04-15 13:10:31 +02:00
Jordan Ritter 3bb12d12ec fix: update CSS selectors to match div-based paragraph component
The p tag was changed to div to fix hydration errors, but CSS selectors
still targeted p.copilotKitMarkdownElement. Updated to use the
.copilotKitParagraph class selector so paragraph styling (line-height,
font-size, margin) applies correctly to the new div element.
2026-04-15 13:10:30 +02:00
Jordan Ritter 7403aba8a3 fix: use div instead of p tag in Markdown to prevent hydration errors (#2234) 2026-04-15 13:10:30 +02:00
Jordan Ritter 7b5275e8db fix: scope dark theme CSS variables in colors.css
Same bug pattern as console.css and input.css: bare `.dark,` was a
standalone selector leaking all --copilot-kit-* CSS custom properties
onto any element with a .dark class. Also removed broken `:root`
pseudo-element from `body[style*="color-scheme: dark"] :root` — :root
cannot be a descendant of body, so this selector never matched.

Fix: drop standalone `.dark,` (redundant with `html.dark` and
`body.dark`) and remove the non-functional `:root` descendant.
2026-04-15 13:10:29 +02:00
Jordan Ritter 775ded3a24 fix: remove unused variables and prevent silent test pass in dark mode tests
Remove captured-but-never-asserted colorBefore and markerColorLight
variables. Replace silent if-guard in poweredBy test with explicit
test.skip so missing elements surface in test reports instead of
silently passing.
2026-04-15 13:10:29 +02:00