Commit Graph

1227 Commits

Author SHA1 Message Date
Alem Tuzlak e77588a062 chore: fix formatting 2026-04-03 18:50:14 +02:00
Tyler Slaton 180b719d50 Revert "fix: add types conditions to package exports for proper TypeScript resolution"
This reverts commit 499bca09ad.
2026-04-03 09:42:01 -07:00
Alem Tuzlak 5c7c894969 fix(runtime): address PR review findings for fetch-based runtime
- RouteInfo: discriminated union replaces interface with optional fields,
  eliminating 8 non-null assertions and enabling TypeScript narrowing
- Dispatch: consolidated dispatchMultiRoute and dispatchSingleRoute into
  single dispatchRoute function, removing parallel switch statements
- Hooks: multi-route 404/405 now throw Response to flow through onResponse
  hooks, matching single-route behavior
- Hono CORS: explicit `cors: true` default instead of relying on
  toFetchCorsConfig(undefined) returning {} (confusing truthy path)
- Tests: replaced 22 `platform as any` casts with MockIntelligencePlatform
  interface; removed unused CopilotKitIntelligence imports
2026-04-03 18:41:33 +02:00
Alem Tuzlak 9a6ee39d96 chore(runtime): update package config, CI workflows, and docs
- Add package.json exports for v2/{express,hono,node} subpaths
- Add elysia devDependency and tsdown entry points
- Exclude bun integration tests from vitest config
- Update CI workflows to include runtime-servers test job
- Add runtime-server-adapter docs page
- Add changeset for the fetch-based runtime feature
2026-04-03 18:41:27 +02:00
Alem Tuzlak 7355c9b380 test(runtime): add unit and integration tests for fetch-based runtime
Comprehensive test coverage for the new fetch handler layer:
- Unit tests for fetch-handler, fetch-cors, fetch-router, hooks
- Adapter tests for Express and Hono bridges
- Node.js native HTTP handler tests
- Integration test suites for single and multi-endpoint setups
  across Express, Hono, Node, and Bun/Elysia servers
- Edge case and backward compatibility tests
2026-04-03 18:41:26 +02:00
Alem Tuzlak 1a45d3cb3a feat(runtime): add Express, Hono, and Node.js adapters for fetch handler
Bridge the framework-agnostic fetch handler to specific frameworks:
- Express adapter via express-fetch-bridge.ts (converts req/res to fetch)
- Hono adapter (thin wrapper, Hono already uses Request/Response)
- Node.js native HTTP adapter via node-fetch-handler.ts
- Re-export entry points at @copilotkit/runtime/v2/{express,hono,node}

Simplifies existing Express and Hono endpoints by delegating to the
shared fetch core instead of duplicating routing and CORS logic.
2026-04-03 18:41:24 +02:00
Alem Tuzlak 971c3dc1b5 feat(runtime): add fetch-based core handler, CORS, hooks, and router
Introduce the framework-agnostic fetch handler layer:
- fetch-handler.ts: single Request→Response pipeline for all routes
- fetch-cors.ts: CORS preflight and response header handling
- fetch-router.ts: path-based routing for multi-endpoint setups
- hooks.ts: lifecycle hooks (onBeforeRequest, onAfterResponse, onError)

Also migrates handler error responses from Response.json() to
new Response(JSON.stringify(...)) for broader runtime compatibility
(Node.js <20, CF Workers, Deno).
2026-04-03 18:40:29 +02:00
Alem Tuzlak 83fffea5e8 refactor(runtime): move runtime internals into core/ directory
Move middleware-sse-parser.ts, middleware.ts, and runtime.ts into
a new core/ subdirectory to make room for the fetch-based handler
layer. Updates all import paths in handlers and existing tests.
2026-04-03 18:40:28 +02:00
Tyler Slaton 4f1f132d41 fix: address issues with licensing, formatting and types (#3597) 2026-04-03 09:38:41 -07:00
Ran Shem Tov d1f57e6b37 feat(cli): provide a clean scaffolded agentcore project per framework 2026-04-03 17:36:37 +02:00
Claude 92ebd74011 fix: resolve a2ui-root CustomElementRegistry error under React Strict Mode
`@a2ui/lit` registers the "a2ui-root" custom element via Lit's
@customElement decorator as a side effect when its UI module loads.
React Strict Mode double-mounts components, and since
customElements.define() is irreversible, the second mount throws:
"the name a2ui-root has already been used with this registry"

Several a2ui-renderer files used value imports from "@a2ui/lit" when
only types were needed, pulling in the full module tree including
the custom element registration. Changed to `import type` where
possible and switched to the narrower `@a2ui/lit/0.8` subpath
(core.js only, no UI/custom element registration) where value
access is needed.

https://claude.ai/code/session_01CUPfWAF8EmLieEasaepAgp
2026-04-03 15:00:46 +00:00
Ran Shemtov 92039cba79 feat(cli): clean up scaffolded agentcore projects
After downloading the agentcore template, remove files that don't apply
to the selected framework: the other agent directory, the other deploy
script, and the terraform infra. Rename the remaining deploy script to
deploy.sh for a single obvious entry point.

https://claude.ai/code/session_01LeSq6n4oGs8FocDSnSV6c7
2026-04-03 13:55:43 +00:00
Ran Shem Tov 92447be772 chore: fix formatting 2026-04-03 15:46:03 +02:00
Ran Shem Tov 9c0b134bdb fix(cli): harden configureAgentCore template configuration
- Throw if config.yaml.example is missing (was silent no-op)
- Validate pattern/stack_name_base keys exist before replacing (was silent miss)
- Preserve trailing YAML comments via \S+(.*) regex pattern

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:45:50 +02:00
Claude 552e3bb713 feat(cli): add agentcore-langgraph and agentcore-strands framework options
Add two new framework options to `cpk create` that scaffold AgentCore-based
projects with either LangGraph or Strands. Both download the agentcore
example template and auto-configure config.yaml with the correct agent
pattern and stack name suffix.

https://claude.ai/code/session_01LeSq6n4oGs8FocDSnSV6c7
2026-04-03 15:45:50 +02:00
Ran Shem Tov ba7691b453 chore: fix formatting 2026-04-03 15:20:58 +02:00
Ran Shem Tov 3b6a060423 chore: refresh web inspector css 2026-04-03 15:20:44 +02:00
Ran Shem Tov 6fa01fb8a1 test: add edge case coverage and fix auto-detect status check
- Fix fetchRuntimeInfoAutoDetect in agent.ts to use 2xx-only check
  (was checking only 404/405, now aligns with agent-registry.ts)
- Remove duplicate JSDoc block on fetchRuntimeInfoAutoDetect
- Add 7 edge case tests: 500/403/405/network-error/both-fail scenarios
- Add 4 tests for useSingleEndpoint->runtimeTransport ternary mapping
- Update Angular test stubs to use "auto" default (was "rest")

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:20:44 +02:00
Claude 0a65f70f85 feat: auto-detect single-endpoint transport from runtime info response
Instead of requiring users to explicitly set transport: "single", the
client now auto-detects the transport mode by trying REST (GET /info)
first and falling back to single-endpoint (POST with { method: "info" })
if the REST probe returns 404/405 or fails. The explicit flag is kept
for backward compatibility.

https://claude.ai/code/session_016xtYN15TY2BaBviryTcVyY
2026-04-03 15:20:44 +02:00
Ran Shem Tov aae2c5cee1 chore: use latest ag-ui langgraph version 2026-04-03 14:57:45 +02:00
Martha Schumann f955dd37dd perf(react-core): reduce wasted re-renders in CopilotChat with 100+ messages
Replace full JSON.stringify(agent.messages) memo dep with a lightweight
fingerprint (length + last-id + last-content + last tool-call args) so only
the in-flight message is serialized on each render instead of the whole array.

Wrap deduplicatedMessages in useMemo([messages]) so the Map is not
reconstructed on every render cycle.

Add generateMessages(n) factory to test-helpers for perf-focused tests, a
vitest bench for the dedup map at 100/1000 messages, and three regression
tests that assert completed messages do not re-render when new messages or
state snapshots arrive.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 15:40:35 -07:00
Tyler Slaton ac54391d0f fix: only create license checker for Intelligence runtime, not SSE
createLicenseChecker was called unconditionally in BaseCopilotRuntime,
printing the "No license token configured" banner even for open-source
SSE-mode users who don't use any licensed features. Moved it to
CopilotIntelligenceRuntime only.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:56:31 -07:00
Tyler Slaton 499bca09ad fix: add types conditions to package exports for proper TypeScript resolution
All @copilotkit/* packages were missing type declarations in their exports
map. This meant TypeScript couldn't resolve types for subpath imports like
@copilotkit/react-core/v2 without manual tsconfig paths workarounds
pointing to dist .d.ts files (which no longer exist after the tsup to
tsdown migration).

Uses nested conditional exports to map .d.mts for ESM and .d.cts for CJS
consumers, satisfying both attw and TypeScript module resolution under
nodenext and bundler modes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:56:09 -07:00
Tyler Slaton 9dc688be2e fix: stop barrel-exporting license-verifier through shared to avoid bundling Node crypto into client
@copilotkit/shared was doing `export * from "@copilotkit/license-verifier"`,
which pulled the entire license-verifier bundle (including Node's `crypto`)
into any client-side consumer. This caused "Module not found: Can't resolve
'crypto'" errors for users bundling @copilotkit/react-core for the browser.

Now shared only re-exports types (erased at compile time) and a client-safe
`createLicenseContextValue` inlined without crypto. Runtime imports
`createLicenseChecker` and `getLicenseWarningHeader` directly from
`@copilotkit/license-verifier`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:55:58 -07:00
Maxim a2386017b4 Merge branch 'main' into feat/useagent-throttle-ms 2026-04-02 19:04:53 +02:00
Maxim 3f1c16881e fix: replace as any cast with typed RunAgentInput factory in throttle tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:46:35 +02:00
Tyler Slaton 596b5cd1b5 Merge branch 'main' into fix/261-sidebar-full-height 2026-04-02 09:27:32 -07:00
Maxim b2bc508f95 test: add missing throttleMs edge case coverage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:11:31 +02:00
Maxim c2dcee2751 fix: unify effectiveThrottleMs to return 0, upgrade validation to console.error
Also fixes JSDoc inaccuracies: documents trailing-edge window restart,
uses enum names instead of callback names, adds notificationThrottle
interaction note.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:06:58 +02:00
Maxim 9b6d444c43 fix: trailing edge restarts throttle window to prevent back-to-back renders
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:01:43 +02:00
Alem Tuzlak 401a27c981 fix: resolve rebase conflicts and format files
- Remove stale eslint-config-custom refs from package.json files
- Regenerate pnpm-lock.yaml
- Format agentcore and other files with oxfmt
2026-04-02 16:43:34 +02:00
Alem Tuzlak 79ce60c580 chore: migrate from eslint+prettier to oxlint+oxfmt
Replace eslint and prettier with oxlint and oxfmt for faster linting
and formatting across the monorepo. Remove all eslint and prettier
configs, dependencies, and related packages. Add .oxlintrc.json and
.oxfmtrc.json for the new tooling. Update CI workflows and lefthook
hooks accordingly. Reformat codebase with oxfmt.

https://claude.ai/code/session_01GMkSf29p78HuMR1mbXn8He
2026-04-02 16:39:05 +02:00
Maxim a4109ad3be refactor: enhance message handling in useAgent tests
- Introduced message factory functions to eliminate `as any` type assertions for message literals.
- Updated test cases to utilize the new message factories for improved clarity and type safety.
- Added helper functions for subscriber notifications to streamline test setup.

This refactor improves code readability and maintainability in the test suite for the useAgent hook.
2026-04-02 16:33:13 +02:00
Maxim d1357083da fix: harden throttleMs implementation from code review
- Replace Date.now()-based throttle with flag-based leading+trailing
  pattern that is immune to wall-clock jumps
- Wrap throttleMs validation in useMemo to warn once per value change
  instead of on every render
- Remove phantom AbstractAgent.notificationThrottleMs JSDoc reference
- Reorder cleanup to clear timer before unsubscribing for safety
- Add tests for trailing-edge data freshness, timer precision, and
  dynamic throttleMs prop changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:13:56 +02:00
Maxim f2b148c0d2 fix: improve throttleMs validation, simplify handlers, add invalid-input tests
- Fix JSDoc to accurately describe behavior for negative/non-finite values
- Remove NODE_ENV guard so console.warn fires in all environments
- Use derived effectiveThrottleMs instead of mutating destructured param
- Simplify handler wrappers: direct references instead of arrow wrappers
- Remove stale comment about content stripping
- Add parameterized tests for invalid throttleMs (NaN, Infinity, -1, -Infinity)
- Fix misleading test comment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 15:44:13 +02:00
Maxim 3cdaaf089d fix: consolidate throttleMs into single useEffect, add input validation and edge-case tests
Addresses code review findings:
- Merge two separate useEffect hooks into one to eliminate dual-subscription
  race window and simplify cleanup
- Add active boolean guard to prevent forceUpdate after unmount/re-run
- Validate throttleMs input (reject NaN, Infinity, negatives with dev warning)
- Expand JSDoc with scope, constraints, and notificationThrottleMs interaction
- Replace JSON.stringify(updateFlags) with direct ref in effect deps
- Strengthen unmount test with render counter instead of not.toThrow()
- Add 5 new test cases: explicit zero, rapid burst, new cycle after trailing,
  updates excluding OnMessagesChanged, subscription cleanup verification

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 15:34:43 +02:00
Maxim 30916a6ab7 feat: add throttleMs option to useAgent for streaming render throttling
Adds optional `throttleMs` parameter to `useAgent()` that coalesces
rapid onMessagesChanged notifications (per-token TEXT_MESSAGE_CHUNK
events) into fewer React re-renders using a leading+trailing throttle.

- throttleMs=0 (default): exact current behavior, zero overhead
- throttleMs>0: only onMessagesChanged is throttled; onStateChanged
  and onRunStatusChanged always fire immediately
- Leading+trailing: first call immediate, last call guaranteed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:09:17 +02:00
Claude 0d9e3b88f6 chore(post-release): update version to 1.55.0-next.8
The previous publish workflow released 1.55.0-next.8 to npm but the
post-release commit failed to push to main (blocked by branch
protection). This applies the version bumps and pre.json updates that
the workflow would have committed, unblocking future releases.

https://claude.ai/code/session_01N8sLK9h9p6FdRjyHqzKzVV
2026-04-02 02:23:27 +00:00
Claude d55ce2c87b fix: add React keys to CopilotMessages children to suppress warning
CopilotMessages received an array of children (memoizedChildren +
RegisteredActionsRenderer) without keys, causing a React "unique key prop"
warning in dev mode. Wrap memoizedChildren in a keyed Fragment and add a
key to RegisteredActionsRenderer.

https://claude.ai/code/session_01N8sLK9h9p6FdRjyHqzKzVV
2026-04-02 01:32:52 +00:00
Alem Tuzlak fc241efce1 test(core): add ProxiedCopilotRuntimeAgent capabilities tests 2026-04-01 18:42:48 +02:00
Alem Tuzlak 2f38e945e2 feat(react-core): add useCapabilities hook 2026-04-01 18:34:20 +02:00
Alem Tuzlak 6a5126d76f feat(core): pass capabilities through AgentRegistry 2026-04-01 18:32:02 +02:00
Alem Tuzlak a3237a4d09 feat(core): add capabilities to ProxiedCopilotRuntimeAgent 2026-04-01 18:30:16 +02:00
Alem Tuzlak 1c255f1381 feat(runtime): include agent capabilities in /info response 2026-04-01 18:27:53 +02:00
Alem Tuzlak 6c25fbd8dc feat(runtime): implement getCapabilities() on BuiltInAgent 2026-04-01 18:24:30 +02:00
Alem Tuzlak bde44f35cf feat(shared): add capabilities to AgentDescription 2026-04-01 18:21:34 +02:00
Alem Tuzlak 232c9eb994 chore: bump @ag-ui/core and @ag-ui/client to 0.0.49 2026-04-01 18:18:40 +02:00
alex mitre 818e4e767b fix(sidebar): allow full-height children inside CopilotSidebar 2026-04-01 08:28:13 -07:00
Claude fb8160cec6 fix: clear web inspector body-transition timers on disconnect
The WebInspectorElement schedules 300ms setTimeout callbacks to clean up
document.body.style.transition after dock/undock animations. When the
element is removed from the DOM (e.g. during test teardown), these timers
fire after jsdom has been destroyed, causing "ReferenceError: document is
not defined" — which vitest reports as unhandled errors and fails the run.

Track all body-transition timer IDs and clear them in disconnectedCallback.
Skip transition animation entirely during disconnect since the element is
being removed and the animation serves no purpose.

https://claude.ai/code/session_01W2Kb2HXsjZett3HdqM9zay
2026-04-01 11:50:57 +02:00
Claude 5d612556d4 fix: address flaky CI unit tests
- Add fail-fast: false to unit test matrix strategies so one Node
  version failing doesn't cancel all other matrix jobs
- Add retry: 2 to runtime-client-gql vitest config (Nx confirmed
  this package's tests as flaky during parallel execution)
- Replace fragile setTimeout waits in middleware express tests with
  vi.waitFor() polling, which is resilient to CI timing variance

https://claude.ai/code/session_01W2Kb2HXsjZett3HdqM9zay
2026-04-01 11:50:56 +02:00