copilotkit 4.18.0 → 4.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +8 -3
  2. package/cli-build-info.json +7 -7
  3. package/index.js +4050 -3186
  4. package/onboarding/index.json +1 -1
  5. package/onboarding/prompts/authenticate/start.md +21 -12
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +7 -7
  8. package/onboarding/prompts/credentials/plan.md +47 -21
  9. package/onboarding/prompts/credentials/settle-credentials.md +24 -12
  10. package/onboarding/prompts/credentials/write-plan.md +5 -5
  11. package/onboarding/prompts/fallback/best-effort.md +31 -19
  12. package/onboarding/prompts/feature/a2ui/implement.md +7 -7
  13. package/onboarding/prompts/feature/a2ui/proof.md +8 -8
  14. package/onboarding/prompts/feature/a2ui/start.md +10 -10
  15. package/onboarding/prompts/feature/channels/implement.md +8 -8
  16. package/onboarding/prompts/feature/channels/proof.md +7 -7
  17. package/onboarding/prompts/feature/channels/start.md +10 -10
  18. package/onboarding/prompts/feature/chat-suggestions/implement.md +7 -7
  19. package/onboarding/prompts/feature/chat-suggestions/proof.md +7 -7
  20. package/onboarding/prompts/feature/chat-suggestions/start.md +10 -10
  21. package/onboarding/prompts/feature/complete.md +2 -2
  22. package/onboarding/prompts/feature/learning/implement.md +16 -16
  23. package/onboarding/prompts/feature/learning/proof.md +8 -8
  24. package/onboarding/prompts/feature/learning/start.md +10 -10
  25. package/onboarding/prompts/feature/open-generative-ui/implement.md +7 -7
  26. package/onboarding/prompts/feature/open-generative-ui/proof.md +7 -7
  27. package/onboarding/prompts/feature/open-generative-ui/start.md +10 -10
  28. package/onboarding/prompts/feature/realtime-sync/implement.md +8 -8
  29. package/onboarding/prompts/feature/realtime-sync/proof.md +7 -7
  30. package/onboarding/prompts/feature/realtime-sync/start.md +9 -9
  31. package/onboarding/prompts/feature/rich-threads/implement.md +9 -9
  32. package/onboarding/prompts/feature/rich-threads/proof.md +7 -7
  33. package/onboarding/prompts/feature/rich-threads/start.md +9 -9
  34. package/onboarding/prompts/feature/stop.md +3 -3
  35. package/onboarding/prompts/feature/voice/implement.md +7 -7
  36. package/onboarding/prompts/feature/voice/proof.md +7 -7
  37. package/onboarding/prompts/feature/voice/start.md +10 -10
  38. package/onboarding/prompts/framework/ag2.md +2 -2
  39. package/onboarding/prompts/framework/agno.md +2 -2
  40. package/onboarding/prompts/framework/built-in.md +2 -2
  41. package/onboarding/prompts/framework/claude-sdk-python.md +2 -2
  42. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  43. package/onboarding/prompts/framework/crewai-flows.md +2 -2
  44. package/onboarding/prompts/framework/deep-agents.md +2 -2
  45. package/onboarding/prompts/framework/google-adk.md +2 -2
  46. package/onboarding/prompts/framework/langgraph-fastapi.md +2 -2
  47. package/onboarding/prompts/framework/langgraph-python.md +2 -2
  48. package/onboarding/prompts/framework/langgraph-typescript.md +2 -2
  49. package/onboarding/prompts/framework/llamaindex.md +2 -2
  50. package/onboarding/prompts/framework/mastra.md +2 -2
  51. package/onboarding/prompts/framework/ms-agent-dotnet.md +8 -3
  52. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +8 -3
  53. package/onboarding/prompts/framework/ms-agent-python.md +2 -2
  54. package/onboarding/prompts/framework/pydantic-ai.md +2 -2
  55. package/onboarding/prompts/framework/strands-python.md +2 -2
  56. package/onboarding/prompts/framework/strands-typescript.md +2 -2
  57. package/onboarding/prompts/frontend/angular.md +3 -3
  58. package/onboarding/prompts/frontend/nextjs.md +3 -3
  59. package/onboarding/prompts/frontend/plan.md +7 -7
  60. package/onboarding/prompts/frontend/react-native.md +2 -2
  61. package/onboarding/prompts/frontend/react-spa.md +2 -2
  62. package/onboarding/prompts/frontend/vue.md +2 -2
  63. package/onboarding/prompts/implementation/build-and-validate.md +23 -15
  64. package/onboarding/prompts/proof/complete.md +32 -16
  65. package/onboarding/prompts/proof/oss-baseline.md +5 -5
  66. package/onboarding/prompts/proof/round-trip.md +23 -15
  67. package/onboarding/prompts/research/gather.md +6 -6
  68. package/onboarding/prompts/research/merge.md +5 -4
  69. package/onboarding/prompts/research/preflight.md +15 -50
  70. package/onboarding/prompts/research/route.md +7 -6
  71. package/onboarding/prompts/starter/clone.md +6 -6
  72. package/onboarding/prompts/stopped/run-failed.md +2 -2
  73. package/onboarding/prompts/subagent/create-plan.md +10 -1
  74. package/onboarding/prompts/subagent/inspect-repository.md +10 -2
  75. package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
  76. package/onboarding/prompts/subagent/prove-round-trip.md +70 -56
  77. package/onboarding/prompts/unsupported/no-validated-path.md +2 -2
  78. package/package.json +1 -1
  79. package/release/release-tool.js +11 -2
@@ -55,7 +55,7 @@ the derived name.
55
55
  Only if the developer asks for an existing project, or asks to see the projects they have,
56
56
  read the choices:
57
57
 
58
- `npx --prefer-offline --yes copilotkit@4.18.0 project list --json`
58
+ `npx --prefer-offline --yes copilotkit@4.19.0 project list --json`
59
59
 
60
60
  Then ask which one to use. Do not order the projects by creation time. If the developer
61
61
  already gave this answer, do not ask again. Do not read a secret value. Do not show or
@@ -82,7 +82,7 @@ Run the command from the parent directory. Do not inspect another entry in the p
82
82
  directory. Replace each placeholder with the recorded value. Do not run a placeholder as
83
83
  a shell argument. If the directory name holds a space, put it in double quotes.
84
84
 
85
- `npx --prefer-offline --yes copilotkit@4.18.0 init --name <directory-name> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
85
+ `npx --prefer-offline --yes copilotkit@4.19.0 init --name <directory-name> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
86
86
 
87
87
  `--name` is always the target directory name derived above, because `init` creates the
88
88
  app at `<parent>/<name>`. Any other value puts the app in a new folder beside the target,
@@ -108,7 +108,7 @@ account. The command does not need terminal input.
108
108
  Report the clone before you inspect anything:
109
109
 
110
110
  ```text
111
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase starter-cloned
111
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase starter-cloned
112
112
  ```
113
113
 
114
114
  This is its own step, not an aside. A run that clones and then goes quiet is
@@ -153,7 +153,7 @@ When you ask, name each variable and the file it goes in, and say that the run c
153
153
  when they reply or resume this session. Then report the pause and end your turn:
154
154
 
155
155
  ```text
156
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase awaiting-model-credential
156
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase awaiting-model-credential
157
157
  ```
158
158
 
159
159
  This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
@@ -164,10 +164,10 @@ call.
164
164
 
165
165
  If no credential is missing, report no pause and continue.
166
166
 
167
- Then run `npx --prefer-offline --yes copilotkit@4.18.0 onboard read proof/round-trip`.
167
+ Then run `npx --prefer-offline --yes copilotkit@4.19.0 onboard read proof/round-trip`.
168
168
 
169
169
  If the command fails, report its exact error and do not claim that the starter is ready.
170
170
  Then run
171
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`. The starter is one this
171
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`. The starter is one this
172
172
  graph ships and the stack was chosen from its own supported list, so a command that
173
173
  returned an error is a run that broke, not a setup this release does not support.
@@ -41,7 +41,7 @@ put to them, stop here and send the report below.
41
41
  If they approve it, make that one fix and nothing else. Then come back into this run:
42
42
 
43
43
  ```text
44
- npx --prefer-offline --yes copilotkit@4.18.0 onboard resume --message "<approval>"
44
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard resume --message "<approval>"
45
45
  ```
46
46
 
47
47
  Put the developer's approval in `--message`, in one or two sentences: the fix they
@@ -64,7 +64,7 @@ Send one short report. The friction command follows the telemetry setting the de
64
64
  already chose, so it needs no separate question.
65
65
 
66
66
  ```text
67
- npx --prefer-offline --yes copilotkit@4.18.0 onboard friction --phase stop --category <slug> --message "<sentences>"
67
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard friction --phase stop --category <slug> --message "<sentences>"
68
68
  ```
69
69
 
70
70
  `--message` takes one or two sentences: the step you stopped at and what stopped
@@ -103,6 +103,15 @@ it moves to. The `@ag-ui/*` packages are the CopilotKit protocol layer, on their
103
103
  line, so they are the ones this meets most often, but the rule is the intersection rather
104
104
  than that namespace.
105
105
 
106
+ A package the plan adds that a `@copilotkit/*` or `@ag-ui/*` package also depends on, such
107
+ as `zod`, takes the version that tree resolves, not the latest published one. A peer range
108
+ does not settle it. `@copilotkit/react-core@1.75.0` declares `zod >=3.25`, while
109
+ `@ag-ui/core@0.0.59` requires `zod ^3.22.4`, so a plan that adds zod 4 installs two copies.
110
+ Read the range with `npm view @ag-ui/core@<version> dependencies`, for the `@ag-ui/core`
111
+ version the target `@copilotkit/*` release requires, and plan the latest version inside it.
112
+ Where the project already depends on that package, keep its version if that tree accepts
113
+ it. Otherwise name the move as above.
114
+
106
115
  The intersection includes what a `@copilotkit/*` package on its own version line declares
107
116
  about the `1.x` line. `@copilotkit/angular` is the one that has this, and its declaration
108
117
  is materialized at publish time rather than written in the repository, so read it from the
@@ -174,7 +183,7 @@ here is work the developer did not ask for.
174
183
  Plan the threads drawer itself: add it from the selected drawer page, where this frontend
175
184
  does not already render one. Where this journey's frontend framework ships no threads
176
185
  drawer -- React Native --, plan that the thread is proved by
177
- `npx --prefer-offline --yes copilotkit@4.18.0 verify --round-trip`, which needs no browser. Do not plan a
186
+ `npx --prefer-offline --yes copilotkit@4.19.0 verify --round-trip`, which needs no browser. Do not plan a
178
187
  step that opens the managed Intelligence dashboard.
179
188
 
180
189
  ## Order the plan into steps
@@ -7,7 +7,7 @@ Work only on the packet you were assigned. Inspect the repository without changi
7
7
  Run this first, from the target project directory:
8
8
 
9
9
  ```text
10
- npx --prefer-offline --yes copilotkit@4.18.0 onboard inspect --json
10
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard inspect --json
11
11
  ```
12
12
 
13
13
  It answers the deterministic half of both packets exactly, from the same code
@@ -24,6 +24,13 @@ from. A `null` `source` means the process environment supplied it. A coding agen
24
24
  passes that value on to every dev server it starts, so it decides where the model calls
25
25
  go before any project file does. Carry its `warning` as it came back.
26
26
 
27
+ The packet's `toolchains` block reads the .NET SDK, Node.js, and Python 3 from PATH. Its
28
+ `unready` list names every framework that this machine cannot run yet, with the toolchain
29
+ each one needs. Report both as they came back. The framework question reads them before
30
+ the developer chooses. This reading is about the machine, not about one directory, so
31
+ report it once and not per app. Report it when `apps` is empty too: a project that does
32
+ not exist yet still picks a framework.
33
+
27
34
  Carry those readings into your findings as they came back. Do not work one of them out
28
35
  again by reading files. The directory that owns `.env` is the hard case and the CLI holds
29
36
  the fixes for it, so a second answer derived here is a guess competing with a proof.
@@ -62,7 +69,8 @@ reading of the files will not reproduce.
62
69
  - names of required credential variables, beyond the Intelligence key the CLI reported
63
70
  - the `.env` modification time, or that no `.env` exists, for a later comparison. It is a
64
71
  timestamp, not a value from the file
65
- - required toolchains and their installed versions
72
+ - required toolchains and their installed versions. Start from the CLI's `toolchains`
73
+ block, and add only the version of each toolchain it reported as present
66
74
  - whether each port the CLI reported as declared is free
67
75
  - whether the runtime constructor uses a `runner` option, an `intelligence` option, or
68
76
  neither can be proved from project files
@@ -32,7 +32,7 @@ Prove the live runtime in this order:
32
32
  4. Confirm from project files that the runtime constructor passes a `runner` option rather
33
33
  than an `intelligence` option. A package, import, project file, or key is not use proof.
34
34
  5. Run
35
- `npx --prefer-offline --yes copilotkit@4.18.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
35
+ `npx --prefer-offline --yes copilotkit@4.19.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
36
36
  with the runtime URL or auth header options that this project needs. Require exit zero
37
37
  and the JSON `ok` field to be `true`.
38
38
  6. Drive one real request through the existing frontend, CopilotKit runtime, and expected
@@ -12,8 +12,9 @@ overlaps one, return `Status: blocked` before writing it.
12
12
 
13
13
  One CLI command is the exception to both rules. The Step 2 `onboard runtime-url` command
14
14
  can write `.copilotkit/project.json` even when that path is protected. It moves the
15
- protected-path baseline with its own write, and it refuses a record that changed since the
16
- baseline. Never edit that file any other way.
15
+ protected-path baseline with its own write. If only the record's `runtimeUrl` changed since
16
+ the baseline, it replaces that URL and settles the record. It refuses any other change.
17
+ Never edit that file any other way.
17
18
 
18
19
  The existing agent's behavior is outside every step of this proof. It is four things: the
19
20
  agent's system prompt and instructions, its tools and what those tools do, its model and
@@ -134,7 +135,7 @@ is taken moves to the next free one without asking. Where the runtime runs as a
134
135
  its own, this is the runtime's port, not the frontend's.
135
136
 
136
137
  ```text
137
- npx --prefer-offline --yes copilotkit@4.18.0 onboard runtime-url --url <runtime-url>
138
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard runtime-url --url <runtime-url>
138
139
  ```
139
140
 
140
141
  `<runtime-url>` is the Step 1 runtime URL with its port replaced by the port that server
@@ -184,7 +185,7 @@ IPv6 only, so an IPv4 literal fails against the correct port.
184
185
  ## Step 4 -- Check the wiring
185
186
 
186
187
  With both running, check the wiring in one command before you open a browser:
187
- `npx --prefer-offline --yes copilotkit@4.18.0 verify --json`. It reads the port from this project, so a
188
+ `npx --prefer-offline --yes copilotkit@4.19.0 verify --json`. It reads the port from this project, so a
188
189
  non-default port needs no flag. The payload reports `runtimeUrl` and `runtimeUrlSource`. A
189
190
  `runtimeUrlSource` of `default` means nothing in the project named a port, so the Step 2
190
191
  record is missing. Run the Step 2 `onboard runtime-url` command, then run `verify` again. Read the individual checks rather than
@@ -212,13 +213,17 @@ this check: that mount serves the thread routes inside its envelope. If the chec
212
213
  `undetermined`, the runtime cannot report the state, and the check names the upgrade. Record
213
214
  that and continue.
214
215
 
216
+ `single_route_core_supports_intelligence` and `frontend_runtime_url_resolvable` read the
217
+ installed `@copilotkit/core` and the frontend's `runtimeUrl`. Each names the upgrade or the
218
+ URL that fixes it. Return the check for implementation. Do not edit it.
219
+
215
220
  Take the frontend URL from the payload's `frontendUrl`. It replaces whatever step 2
216
221
  recorded, and every later step uses it unchanged. Where the field is absent, the project
217
222
  named no port the CLI can read: keep step 2's URL, and rewrite its host as `localhost`
218
223
  before you use it.
219
224
 
220
225
  Then run the command once more with the URL you are about to open:
221
- `npx --prefer-offline --yes copilotkit@4.18.0 verify --frontend-url <that url> --json`. The
226
+ `npx --prefer-offline --yes copilotkit@4.19.0 verify --frontend-url <that url> --json`. The
222
227
  `frontend_assets_served` check asks that server for its page and for one of the page's own
223
228
  assets, on that exact host. A `fail` there means the dev server refuses its own static
224
229
  assets on the host you were about to use, and the check names the URL to use instead. This
@@ -226,20 +231,29 @@ is the cheapest step that can save the most expensive one, so run it before the
226
231
 
227
232
  ## Step 5 -- Prove that the agent runs
228
233
 
229
- Run `npx --prefer-offline --yes copilotkit@4.18.0 verify --round-trip --json`. It sends one request through
234
+ Run `npx --prefer-offline --yes copilotkit@4.19.0 verify --round-trip --json`. It sends one request through
230
235
  the runtime and reads the answer back from the thread, so it separates an agent that is
231
236
  configured from an agent that works. Use `--agent <id>` when the runtime declares more
232
237
  than one. If it reports `user-not-identified`, this project's `identifyUser` reads a
233
238
  session the CLI does not carry: pass what it reads with `--header "Name: value"` and run
234
239
  it again, because an auth-gated app refusing an unauthenticated caller is that app
235
- working. Do not continue until this passes, and never report a round trip proven without
236
- it.
240
+ working. Do not continue until the `roundTrip` entry passes, and never report a round trip
241
+ proven without it.
242
+
243
+ The command exits non-zero for any check that is not `pass`, including each `extraChecks`
244
+ entry, so route on each entry's own `status` rather than on the exit status. Where the
245
+ frontend's files call a context hook, one entry has the `id` `page_context_reaches_agent`:
246
+
247
+ - `pass` proves that the agent's model sees context the page sends.
248
+ - `fail` is a defect: context the page sends never reaches the model. Return it with its
249
+ evidence as a failed proof step.
250
+ - `undetermined` means the context round trip did not complete. Record it and continue.
237
251
 
238
252
  Where this run settled a Learning Container, add the flag to the call above rather than
239
253
  running a second round trip:
240
254
 
241
255
  ```text
242
- npx --prefer-offline --yes copilotkit@4.18.0 verify --round-trip --expect-learning-container <container id> --json
256
+ npx --prefer-offline --yes copilotkit@4.19.0 verify --round-trip --expect-learning-container <container id> --json
243
257
  ```
244
258
 
245
259
  The check reads the thread that this run created, so a second round trip proves a second
@@ -273,7 +287,7 @@ the credential was written holds an empty key while the file beside it carries t
273
287
  one. Run this from the target app directory:
274
288
 
275
289
  ```text
276
- npx --prefer-offline --yes copilotkit@4.18.0 onboard env-staleness
290
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard env-staleness
277
291
  ```
278
292
 
279
293
  A `stale` line names the env file and how long after launch it was written. Report that,
@@ -289,7 +303,7 @@ environment on to every process it starts, so a provider base URL exported for t
289
303
  reaches the dev servers. Run this from the target app directory:
290
304
 
291
305
  ```text
292
- npx --prefer-offline --yes copilotkit@4.18.0 onboard inspect --json
306
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard inspect --json
293
307
  ```
294
308
 
295
309
  Read `providerEndpoints` for the app directory. An entry with a `null` `source` came from
@@ -300,11 +314,13 @@ edit a project file to answer it: the value lives in the shell, not in the proje
300
314
 
301
315
  ### Step 5a -- Prove that the page's data reaches the model
302
316
 
303
- `verify --round-trip` sends `context: []` and asks a question that needs no context. It
304
- passes against an agent the page's data never reaches, and that is the right job for an
305
- install check. Nothing else before the browser reads that path, so a page whose data the
306
- agent never sees answers fluently over a record it invented, and the first thing to notice
307
- is a card in a screenshot.
317
+ `verify --round-trip` asks a question that needs no context. Where the frontend's files call
318
+ a context hook, it also sends one token as context and reports
319
+ `page_context_reaches_agent`, which proves that the agent's model sees context at all. It
320
+ does not prove that the page's own entries arrive in the shape the agent reads. Nothing
321
+ else before the browser reads that path, so a page whose data the agent never sees answers
322
+ fluently over a record it invented, and the first thing to notice is a card in a
323
+ screenshot.
308
324
 
309
325
  Where this journey shares page data with the agent, prove that path here. Read the context
310
326
  entries this project's frontend publishes, from its own context call. Read the tool
@@ -376,16 +392,15 @@ For a recorded `both-oss` starting state, this step has no component to render.
376
392
  same request the baseline recorded, require the same kind of user-visible result the
377
393
  baseline produced, and require that the thread for that request is listed in the drawer.
378
394
  Where this journey's frontend framework ships no threads drawer -- React Native --, prove
379
- that thread with `npx --prefer-offline --yes copilotkit@4.18.0 verify --round-trip`, which reads the
395
+ that thread with `npx --prefer-offline --yes copilotkit@4.19.0 verify --round-trip`, which reads the
380
396
  answer back off the thread and needs no browser. Record which of the two you proved.
381
397
 
382
- Use the surface control the main coding agent recorded for your environment. It either had
383
- one already or registered one before this step, so that finding is the answer and there is
384
- nothing here for you to go looking for. Do not add a browser driver or a device tool to this
385
- project: a devDependency and a browser download land in the diff and tax a repository that
386
- never asked for one, which is a different thing from the server registered against the
387
- coding agent. If nothing in your environment can drive the surface this journey needs, skip
388
- this step rather than installing one, and report the skip outcome named below.
398
+ Use the surface control the main coding agent recorded for your environment. That finding
399
+ is the answer, and there is nothing here for you to go looking for. Do not register a
400
+ browser server with the coding agent, and do not add a browser driver or a device tool to
401
+ this project: a devDependency and a browser download land in the diff and tax a repository
402
+ that never asked for one. If nothing in your environment can drive the surface this journey
403
+ needs, skip this step rather than installing one, and report the skip outcome named below.
389
404
 
390
405
  Never report a result you did not see, on either surface.
391
406
 
@@ -400,11 +415,22 @@ under a name that says what it was.
400
415
  The surface is a browser, and it also covers browser-origin CORS and CSP, which a CLI
401
416
  request never exercises. Drive it with the browser control step 6 named.
402
417
 
418
+ A browser call can hang. It then returns only when the tool's own limit ends it, and that
419
+ limit can be ten minutes. You cannot interrupt a call while it runs, so the limit here is on
420
+ what you do after one. If a browser call took longer than 60 seconds to return, the browser
421
+ control is unresponsive. Do not call the browser again in this attempt. A second call to a
422
+ hung tool waits as long as the first one did. Run
423
+ `npx --prefer-offline --yes copilotkit@4.19.0 verify --frontend-url <the url step 4 resolved> --json` once,
424
+ and record the `frontend_assets_served` result. Report the outcome `failed` with the cause
425
+ `browser-control-unresponsive`. The application is not at fault on this evidence: every
426
+ step before the browser proved the runtime without one, and no repair to the project can
427
+ reach the tool.
428
+
403
429
  1. Open the frontend URL step 4 resolved, exactly as that step recorded it, and wait for
404
430
  the page to finish loading. Do not retype the host, and do not substitute a URL a tool
405
431
  offers you by default. Where the page loads but its styling is missing or the chat
406
432
  control is dead, run
407
- `npx --prefer-offline --yes copilotkit@4.18.0 verify --frontend-url <the url you opened> --json`
433
+ `npx --prefer-offline --yes copilotkit@4.19.0 verify --frontend-url <the url you opened> --json`
408
434
  before you diagnose anything else. A dev server can serve its page and refuse every
409
435
  static chunk behind it, and on screen that is indistinguishable from a broken
410
436
  integration. The `frontend_assets_served` check tells the two apart.
@@ -429,9 +455,12 @@ request never exercises. Drive it with the browser control step 6 named.
429
455
  the answer from, and what that element showed.
430
456
 
431
457
  Report exactly one of `performed`, `skipped-no-browser-tool`, `skipped-cloned-starter`, or
432
- `failed` for a web frontend. Report `skipped-cloned-starter` when the main coding agent told
433
- you to open no browser because the run cloned a starter. The cloned-starter exception above
434
- Step 1 says which steps to run.
458
+ `failed` for a web frontend. With `failed`, also report the cause
459
+ `browser-control-unresponsive` if the browser control stopped answering. Report
460
+ `skipped-cloned-starter` when the main coding agent told you to open no browser because the
461
+ run cloned a starter. Report `skipped-no-browser-tool` when no browser tool is loaded in
462
+ this session. Do not register one yourself in either case.
463
+ The cloned-starter exception above Step 1 says which steps to run.
435
464
 
436
465
  ### Step 6b -- React Native
437
466
 
@@ -517,40 +546,25 @@ Tell the developer what the skills install writes into this project before you r
517
546
  `.agents/skills` directory holding one folder per CopilotKit skill, linked into
518
547
  `.claude/skills`. Both sit in the working tree, so the install shows up in `git status`
519
548
  and can land in a commit. You cannot know whether this project keeps those directories in
520
- version control, so name them before you write them rather than after. Say the same
521
- thing about the MCP registration below where it writes `.mcp.json`: that file lands in the
522
- working tree beside them, for the same reason and with the same consequence.
523
-
524
- Use it to install the project-scoped CopilotKit Skills.
525
- Use it to configure the CopilotKit documentation MCP server for the coding-agent slug this
526
- run reported to `onboard identify`.
527
-
528
- Register it in this project wherever that agent reads a project-scoped file. For
529
- `claude-code` that is `claude mcp add --scope project`, which writes `.mcp.json` at the
530
- project root. Without that flag the command writes the agent's own configuration under the
531
- developer's home directory, outside this project, so pass it even where the command line
532
- you were given leaves it out. For `github-copilot` the project-scoped file is
533
- `.vscode/mcp.json`, and for `cursor` it is the project `mcp.json`.
534
-
535
- Where the agent reads no project-scoped file at all, do not run the registration. `codex`
536
- and `windsurf` write only under the home directory, and the desktop and web clients
537
- register through a settings screen this run cannot reach. Print the exact command or
538
- setting the guide gives for that agent, and tell the developer it is theirs to run. Record
539
- that as handed over rather than as failed: nothing went wrong, and this run is not allowed
540
- to edit configuration outside the project.
541
-
542
- Check whether each install succeeded and record what you found. Record the command result
543
- for each attempt. Report the Skills result and the MCP result separately from the proof
544
- result. A tool error does not change the proof result: this journey proved or it did not,
545
- whatever these two tools did.
549
+ version control, so name them before you write them rather than after.
550
+
551
+ Use it to install the project-scoped CopilotKit Skills. Do not register an MCP server: the
552
+ Skills read the CopilotKit documentation without one.
553
+
554
+ Check whether the install succeeded and record what you found. Record the command result.
555
+ Report the Skills result separately from the proof result. A tool error does not change the
556
+ proof result: this journey proved or it did not, whatever the install did.
546
557
 
547
558
  ## Step 10 -- Return the result
548
559
 
549
560
  Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
550
561
  Use `Status: passed` when the proof attempt completed with `performed`,
551
562
  `skipped-no-browser-tool`, `skipped-no-device`, or `skipped-cloned-starter`. The parent
552
- records a skip through the standard completion route, which ends every skip but
553
- `skipped-cloned-starter` as blocked. Use `Status: failed` for a failed proof step. Use
563
+ records a skip through the standard completion route, which ends `skipped-no-device` as
564
+ blocked and the other two skips as complete. Use `Status: passed` with the surface-check outcome `failed` and the cause
565
+ `browser-control-unresponsive` when every step before the browser passed and the browser
566
+ control then stopped answering. The round trip is proved, and the parent must not send a
567
+ tool fault to a repair. Use `Status: failed` for a failed proof step. Use
554
568
  `Status: blocked` when a safety or access limit stops the attempt before a surface outcome.
555
569
  Return the proof or the exact failed step to the main coding agent, together with the
556
570
  input, the visible result, the relevant process status, the evidence locations, the
@@ -30,13 +30,13 @@ Before you show the best-effort plan, require this complete packet:
30
30
  - Give the ordered proof rules.
31
31
 
32
32
  After the developer approves the best-effort plan, run
33
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read fallback/best-effort`.
33
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read fallback/best-effort`.
34
34
 
35
35
  Send one short report. The friction command follows the telemetry setting the developer
36
36
  already chose, so it needs no separate question.
37
37
 
38
38
  ```text
39
- npx --prefer-offline --yes copilotkit@4.18.0 onboard friction --phase stop --category <slug> --message "<sentences>"
39
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard friction --phase stop --category <slug> --message "<sentences>"
40
40
  ```
41
41
 
42
42
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "copilotkit",
3
- "version": "4.18.0",
3
+ "version": "4.19.0",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=20.9.0"
@@ -14760,6 +14760,14 @@ var FLAG_DEFINITIONS = defineFlags({
14760
14760
  defaultByEnv: { dev: true, ci: true, prod: false },
14761
14761
  envVar: "FF_MANAGED_BOTS"
14762
14762
  },
14763
+ "self-hosted.local-evaluation": {
14764
+ purpose: "Gates new local evaluation discovery and license issuance until exact published artifacts pass promotion checks. Installed lifecycle and renewal stay available.",
14765
+ owner: "platform",
14766
+ createdAt: "2026-09-23",
14767
+ status: "rollout",
14768
+ surfaces: ["cli", "ops-api"],
14769
+ defaultByEnv: { dev: true, ci: true, prod: false }
14770
+ },
14763
14771
  "managed-channels": {
14764
14772
  purpose: "Canonical Managed Channels rollout gate, evaluated alongside the legacy FF_MANAGED_BOTS override while deployments migrate.",
14765
14773
  owner: "channels",
@@ -14811,7 +14819,7 @@ var FLAG_DEFINITIONS = defineFlags({
14811
14819
 
14812
14820
  // apps/cli/src/config.ts
14813
14821
  function getTemplateRef() {
14814
- return true ? "70d1f3c0a832d6274e2fe710e24102f6429f14f4" : "main";
14822
+ return true ? "bb299bd0e71963c139b78c5bc9ac0bc0fd6d614f" : "main";
14815
14823
  }
14816
14824
 
14817
14825
  // apps/cli/src/services/agentcore-config.ts
@@ -15038,7 +15046,8 @@ var TELEMETRY_ERROR_CODES = {
15038
15046
  LOGIN_REPEATED_EXPIRY: "LOGIN_REPEATED_EXPIRY",
15039
15047
  /**
15040
15048
  * An import source's environment is missing a required value or holds one
15041
- * the importer rejects, such as an unset `MASTRA_IMPORT_AGENT_ID` (PE-397).
15049
+ * the importer rejects, such as an unset `MASTRA_IMPORT_AGENT_ID` (PE-397),
15050
+ * or a Mastra URL that names a file with no Mastra tables (PE-398).
15042
15051
  */
15043
15052
  IMPORT_SOURCE_CONFIG_INVALID: "IMPORT_SOURCE_CONFIG_INVALID"
15044
15053
  };