copilotkit 4.24.0 → 4.25.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 (91) hide show
  1. package/README.md +75 -14
  2. package/cli-build-info.json +7 -7
  3. package/index.js +8544 -6674
  4. package/onboarding/index.json +2 -2
  5. package/onboarding/prompts/authenticate/start.md +50 -45
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +30 -8
  8. package/onboarding/prompts/credentials/plan.md +115 -49
  9. package/onboarding/prompts/credentials/settle-credentials.md +7 -5
  10. package/onboarding/prompts/credentials/write-plan.md +15 -15
  11. package/onboarding/prompts/deployment/choose-local.md +44 -7
  12. package/onboarding/prompts/deployment/local-evaluation.md +12 -6
  13. package/onboarding/prompts/fallback/best-effort.md +8 -8
  14. package/onboarding/prompts/feature/a2ui/implement.md +15 -8
  15. package/onboarding/prompts/feature/a2ui/plan.md +15 -7
  16. package/onboarding/prompts/feature/a2ui/proof.md +14 -7
  17. package/onboarding/prompts/feature/a2ui/start.md +15 -14
  18. package/onboarding/prompts/feature/channels/implement.md +21 -9
  19. package/onboarding/prompts/feature/channels/plan.md +15 -7
  20. package/onboarding/prompts/feature/channels/proof.md +14 -7
  21. package/onboarding/prompts/feature/channels/start.md +20 -13
  22. package/onboarding/prompts/feature/chat-suggestions/implement.md +15 -8
  23. package/onboarding/prompts/feature/chat-suggestions/plan.md +15 -7
  24. package/onboarding/prompts/feature/chat-suggestions/proof.md +14 -7
  25. package/onboarding/prompts/feature/chat-suggestions/start.md +15 -14
  26. package/onboarding/prompts/feature/complete.md +2 -2
  27. package/onboarding/prompts/feature/learning/implement.md +32 -18
  28. package/onboarding/prompts/feature/learning/plan.md +15 -7
  29. package/onboarding/prompts/feature/learning/proof.md +37 -13
  30. package/onboarding/prompts/feature/learning/start.md +15 -14
  31. package/onboarding/prompts/feature/open-generative-ui/implement.md +15 -8
  32. package/onboarding/prompts/feature/open-generative-ui/plan.md +15 -7
  33. package/onboarding/prompts/feature/open-generative-ui/proof.md +14 -7
  34. package/onboarding/prompts/feature/open-generative-ui/start.md +15 -14
  35. package/onboarding/prompts/feature/realtime-sync/implement.md +20 -12
  36. package/onboarding/prompts/feature/realtime-sync/plan.md +15 -7
  37. package/onboarding/prompts/feature/realtime-sync/proof.md +14 -7
  38. package/onboarding/prompts/feature/realtime-sync/start.md +14 -13
  39. package/onboarding/prompts/feature/rich-threads/implement.md +21 -13
  40. package/onboarding/prompts/feature/rich-threads/plan.md +15 -7
  41. package/onboarding/prompts/feature/rich-threads/proof.md +14 -7
  42. package/onboarding/prompts/feature/rich-threads/start.md +14 -13
  43. package/onboarding/prompts/feature/stop.md +9 -3
  44. package/onboarding/prompts/feature/voice/implement.md +15 -8
  45. package/onboarding/prompts/feature/voice/plan.md +16 -8
  46. package/onboarding/prompts/feature/voice/proof.md +14 -7
  47. package/onboarding/prompts/feature/voice/start.md +15 -14
  48. package/onboarding/prompts/framework/ag2.md +6 -5
  49. package/onboarding/prompts/framework/agno.md +6 -5
  50. package/onboarding/prompts/framework/built-in.md +9 -6
  51. package/onboarding/prompts/framework/claude-sdk-python.md +2 -2
  52. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  53. package/onboarding/prompts/framework/crewai-flows.md +12 -4
  54. package/onboarding/prompts/framework/custom-ag-ui.md +8 -2
  55. package/onboarding/prompts/framework/deep-agents.md +6 -5
  56. package/onboarding/prompts/framework/google-adk.md +2 -2
  57. package/onboarding/prompts/framework/langgraph-fastapi.md +8 -5
  58. package/onboarding/prompts/framework/langgraph-python.md +8 -5
  59. package/onboarding/prompts/framework/langgraph-typescript.md +8 -5
  60. package/onboarding/prompts/framework/llamaindex.md +6 -5
  61. package/onboarding/prompts/framework/mastra.md +9 -6
  62. package/onboarding/prompts/framework/ms-agent-dotnet.md +12 -4
  63. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +12 -4
  64. package/onboarding/prompts/framework/ms-agent-python.md +6 -5
  65. package/onboarding/prompts/framework/pydantic-ai.md +6 -5
  66. package/onboarding/prompts/framework/strands-python.md +10 -6
  67. package/onboarding/prompts/framework/strands-typescript.md +10 -6
  68. package/onboarding/prompts/frontend/angular.md +10 -3
  69. package/onboarding/prompts/frontend/nextjs.md +36 -3
  70. package/onboarding/prompts/frontend/plan.md +13 -7
  71. package/onboarding/prompts/frontend/react-native.md +9 -2
  72. package/onboarding/prompts/frontend/react-spa.md +9 -2
  73. package/onboarding/prompts/frontend/vue.md +9 -2
  74. package/onboarding/prompts/implementation/build-and-validate.md +45 -19
  75. package/onboarding/prompts/proof/complete.md +3 -3
  76. package/onboarding/prompts/proof/oss-baseline.md +30 -13
  77. package/onboarding/prompts/proof/round-trip.md +55 -17
  78. package/onboarding/prompts/research/gather.md +21 -11
  79. package/onboarding/prompts/research/merge.md +8 -2
  80. package/onboarding/prompts/research/preflight.md +2 -2
  81. package/onboarding/prompts/research/route.md +14 -7
  82. package/onboarding/prompts/starter/clone.md +73 -16
  83. package/onboarding/prompts/stopped/run-failed.md +8 -2
  84. package/onboarding/prompts/subagent/create-plan.md +9 -2
  85. package/onboarding/prompts/subagent/implement-and-validate.md +2 -2
  86. package/onboarding/prompts/subagent/inspect-repository.md +12 -6
  87. package/onboarding/prompts/subagent/prove-oss-baseline.md +6 -1
  88. package/onboarding/prompts/subagent/prove-round-trip.md +50 -9
  89. package/onboarding/prompts/unsupported/no-validated-path.md +8 -2
  90. package/package.json +1 -1
  91. package/release/release-tool.js +9 -3
@@ -13,6 +13,12 @@ dependency manifest: those folders are the developer's projects. `init` refuses
13
13
  three. If the target is one of them, stop the shortcut and ask the developer which
14
14
  project to use, or to open the coding agent in a new empty folder.
15
15
 
16
+ Before you end your turn to wait for the developer, report the pause:
17
+
18
+ ```text
19
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
20
+ ```
21
+
16
22
  Match the selected agent framework and frontend to this table:
17
23
 
18
24
  | Agent framework | Frontend | Framework ID | Model key |
@@ -40,8 +46,14 @@ not include Intelligence.
40
46
  Get the target directory name from its path. The name can contain 1 to 100 letters,
41
47
  numbers, spaces, dots, underscores, or hyphens, in any case. It must not be `.` or `..`,
42
48
  start or end with a space, or end with a dot. `init` accepts the name of an existing empty
43
- directory as it is, so a name such as `MyApp` is valid. Do not rename the directory. If the
44
- selected pair is not in the table, or the directory name is not valid, stop the shortcut.
49
+ directory as it is, so a name such as `MyApp` is valid. Do not rename the directory. Stop
50
+ the shortcut in each of these cases:
51
+
52
+ - The selected pair is not in the table.
53
+ - The developer chose a model vendor whose key is not the Model key of the matched row.
54
+ Each starter runs on the vendor in that column only.
55
+ - The directory name is not valid.
56
+
45
57
  Do not run `init`. No command ran, so this is not a failed shortcut. Go back to the
46
58
  `## Documentation` section of the frontend prompt you read before this one, and build the
47
59
  project from its pages.
@@ -55,12 +67,18 @@ the derived name.
55
67
  Only if the developer asks for an existing project, or asks to see the projects they have,
56
68
  read the choices:
57
69
 
58
- `npx --prefer-offline --yes copilotkit@4.24.0 project list --json`
70
+ `npx --prefer-offline --yes copilotkit@4.25.0 project list --json`
59
71
 
60
72
  Then ask which one to use. Do not order the projects by creation time. If the developer
61
73
  already gave this answer, do not ask again. Do not read a secret value. Do not show or
62
74
  store a secret value.
63
75
 
76
+ Before you end your turn to wait for the developer, report the pause:
77
+
78
+ ```text
79
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
80
+ ```
81
+
64
82
  ## Ask where the model credential lives
65
83
 
66
84
  The starter reads a model credential, and the `init` command below does not ask for one.
@@ -72,10 +90,37 @@ themselves after the clone. Asking where a credential lives is not requesting a
72
90
  value. Never ask for the value itself. If no answer comes, clone anyway. The step after
73
91
  the clone pauses for the key.
74
92
 
93
+ Before you end your turn to wait for the developer, report the pause:
94
+
95
+ ```text
96
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-model-credential
97
+ ```
98
+
75
99
  A path the developer names is theirs to give, including one outside the project. A path
76
100
  this run finds is not. Never read a key file the developer did not name. A key found that
77
101
  way bills a project nobody chose.
78
102
 
103
+ ## Record the selected path
104
+
105
+ This route skips the plan step that records the path, so record it here, once, before
106
+ the clone:
107
+
108
+ ```text
109
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend> --model-vendor <model-vendor> --model-vendor-choice <model-vendor-choice>
110
+ ```
111
+
112
+ - `<starting-state>`: the starting state the research recorded, usually `empty`.
113
+ - `<agent-framework>`: the name of the framework prompt this run read, such as
114
+ `langgraph-typescript` for `framework/langgraph-typescript`. It is not the Framework ID
115
+ in the table.
116
+ - `<frontend>`: the Frontend column of the matched row, `nextjs` or `angular`.
117
+ - `<model-vendor>`: `openai`, `anthropic`, `google`, or `other`.
118
+ - `<model-vendor-choice>`: if the developer chose the provider, `developer`. Otherwise,
119
+ `default`.
120
+
121
+ If a value is refused, fix it from the choices the earlier prompts gave, and run the
122
+ command again.
123
+
79
124
  ## Clone the starter
80
125
 
81
126
  Run the command in one step, from any directory. `--dir` names the target, so the app
@@ -84,7 +129,7 @@ Do not inspect another entry in the parent directory. Replace each placeholder w
84
129
  recorded value. Do not run a placeholder as a shell argument. If the path holds a space,
85
130
  put it in double quotes.
86
131
 
87
- `npx --prefer-offline --yes copilotkit@4.24.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
132
+ `npx --prefer-offline --yes copilotkit@4.25.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
88
133
 
89
134
  `--dir` is always the absolute path of the target directory. `init` builds the app in that
90
135
  directory and gives the app the directory's name. Do not add `--name`: `init` refuses
@@ -102,16 +147,28 @@ variable name and never the value. Do not read or copy the key file yourself. If
102
147
  reports that it cannot read the model key file, it stopped before it cloned anything. Ask
103
148
  the developer for the right path, or run the command again without the flag.
104
149
 
150
+ Before you end your turn to wait for the developer, report the pause:
151
+
152
+ ```text
153
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-model-credential
154
+ ```
155
+
105
156
  If you cannot pass the key file to `init`, for example because a sandbox refuses the path,
106
157
  clone without `--model-key-file`. Then copy the key from `<target>` with one command:
107
- `cd <target> && npx --prefer-offline --yes copilotkit@4.24.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file> --json`.
158
+ `cd <target> && npx --prefer-offline --yes copilotkit@4.25.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file> --json`.
108
159
  `<env file>` is `.env`, or `agent/.env` for the Microsoft Agent Framework Python starter.
109
160
  The command writes the key into that file without printing it and protects the file. If the
110
161
  command is refused too, ask the developer to run it. Give them exactly this one line:
111
- `! cd <target> && npx --prefer-offline --yes copilotkit@4.24.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file>`.
162
+ `! cd <target> && npx --prefer-offline --yes copilotkit@4.25.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file>`.
112
163
  The command needs no input. Without `!`, they run the same command in a terminal.
113
164
  Do not write a `sed`, `grep`, or `cat` command to copy the key.
114
165
 
166
+ Before you end your turn to wait for the developer, report the pause:
167
+
168
+ ```text
169
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-model-credential
170
+ ```
171
+
115
172
  ### For a recorded local choice
116
173
 
117
174
  If the run recorded the local deployment choice in `deployment/choose-local`, use this
@@ -119,7 +176,7 @@ command instead of the hosted command above. Do not ask the project questions ab
119
176
  Local evaluation creates its own empty project, and `init --local` refuses `--create` and
120
177
  `--project`.
121
178
 
122
- `npx --prefer-offline --yes copilotkit@4.24.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --local --defer-model --install`
179
+ `npx --prefer-offline --yes copilotkit@4.25.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --local --defer-model --install`
123
180
 
124
181
  Use the model choice from `deployment/choose-local`. If the developer deferred it, keep
125
182
  `--defer-model`. If the developer gave model settings, replace `--defer-model` with
@@ -134,7 +191,7 @@ After `init` reports the stack ready:
134
191
  Ask the developer to run this command in their own terminal window, in `<target>`:
135
192
 
136
193
  ```text
137
- npx --prefer-offline --yes copilotkit@4.24.0 local setup
194
+ npx --prefer-offline --yes copilotkit@4.25.0 local setup
138
195
  ```
139
196
 
140
197
  Do not give it as a `!` line, and do not run it yourself. Its guided model prompt needs a
@@ -143,9 +200,9 @@ changes nothing. The prompt asks for the model and its key, and it saves them pr
143
200
  On a running stack, it restarts only Learning. Do not ask for a model file.
144
201
 
145
202
  Say that the run continues when they reply or resume this session. Report the pause with
146
- `npx --prefer-offline --yes copilotkit@4.24.0 onboard checkpoint --phase awaiting-model-credential`, end your
203
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-model-credential`, end your
147
204
  turn, and wait. When the developer replies, run
148
- `npx --prefer-offline --yes copilotkit@4.24.0 local status --json` from `<target>` and read `learning.configuration`.
205
+ `npx --prefer-offline --yes copilotkit@4.25.0 local status --json` from `<target>` and read `learning.configuration`.
149
206
 
150
207
  The command installs the local stack, then connects the starter to it. It writes the
151
208
  gitignored `.copilotkit/local.json` stack reference and `.copilotkit/project.json` with the
@@ -199,7 +256,7 @@ When you ask, name each variable and the file it goes in, and say that the run c
199
256
  when they reply or resume this session. Then report the pause and end your turn:
200
257
 
201
258
  ```text
202
- npx --prefer-offline --yes copilotkit@4.24.0 onboard checkpoint --phase awaiting-model-credential
259
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-model-credential
203
260
  ```
204
261
 
205
262
  This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
@@ -210,7 +267,7 @@ call.
210
267
 
211
268
  If no credential is missing, report no pause and continue.
212
269
 
213
- Then run `npx --prefer-offline --yes copilotkit@4.24.0 onboard read proof/round-trip`.
270
+ Then run `npx --prefer-offline --yes copilotkit@4.25.0 onboard read proof/round-trip`.
214
271
 
215
272
  If the local command fails, `init` keeps the cloned starter in `<target>`. Do not run
216
273
  `init` again, because the target is no longer empty. Do not delete the starter or the stack.
@@ -220,14 +277,14 @@ missing, or `Docker available resources` is below 4 CPUs, 12 GiB RAM, or 40 GiB
220
277
  Tell the developer what to change in Docker. Then report the pause and end your turn:
221
278
 
222
279
  ```text
223
- npx --prefer-offline --yes copilotkit@4.24.0 onboard checkpoint --phase awaiting-developer
280
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
224
281
  ```
225
282
 
226
283
  When the developer says that Docker is ready, resume from `<target>` with the same model
227
284
  choice. If the run used a `--candidate`, add the same one:
228
285
 
229
286
  ```text
230
- npx --prefer-offline --yes copilotkit@4.24.0 local setup --defer-model --json
287
+ npx --prefer-offline --yes copilotkit@4.25.0 local setup --defer-model --json
231
288
  ```
232
289
 
233
290
  If the run used model settings, replace `--defer-model` with `--model-config <private-file>`.
@@ -235,7 +292,7 @@ Read blockers and the recorded failed step. Do not delete or recreate a failed s
235
292
  setup reports the stack ready, connect the starter from `<target>`:
236
293
 
237
294
  ```text
238
- npx --prefer-offline --yes copilotkit@4.24.0 local connect --approve-connection --json
295
+ npx --prefer-offline --yes copilotkit@4.25.0 local connect --approve-connection --json
239
296
  ```
240
297
 
241
298
  The connection writes `.copilotkit/local.json`, `.copilotkit/project.json`, and the local
@@ -244,6 +301,6 @@ setup fails again with an error that does not name Docker, take the route below.
244
301
 
245
302
  If the command fails, report its exact error and do not claim that the starter is ready.
246
303
  Then run
247
- `npx --prefer-offline --yes copilotkit@4.24.0 onboard read stopped/run-failed`. The starter is one this
304
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read stopped/run-failed`. The starter is one this
248
305
  graph ships and the stack was chosen from its own supported list, so a command that
249
306
  returned an error is a run that broke, not a setup this release does not support.
@@ -38,10 +38,16 @@ Name the one fix you propose, and say which file or process it touches. Ask the
38
38
  developer whether they approve that one fix. If they decline, or the question cannot be
39
39
  put to them, stop here and send the report below.
40
40
 
41
+ Before you end your turn to wait for the developer, report the pause:
42
+
43
+ ```text
44
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
45
+ ```
46
+
41
47
  If they approve it, make that one fix and nothing else. Then come back into this run:
42
48
 
43
49
  ```text
44
- npx --prefer-offline --yes copilotkit@4.24.0 onboard resume --message "<approval>"
50
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard resume --message "<approval>"
45
51
  ```
46
52
 
47
53
  Put the developer's approval in `--message`, in one or two sentences: the fix they
@@ -64,7 +70,7 @@ Send one short report. The friction command follows the telemetry setting the de
64
70
  already chose, so it needs no separate question.
65
71
 
66
72
  ```text
67
- npx --prefer-offline --yes copilotkit@4.24.0 onboard friction --phase stop --category <slug> --message "<sentences>"
73
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard friction --phase stop --category <slug> --message "<sentences>"
68
74
  ```
69
75
 
70
76
  `--message` takes one or two sentences: the step you stopped at and what stopped
@@ -94,7 +94,7 @@ against a dead host, and the failure arrives as an empty-body 404 with no cause
94
94
  Ask the CLI for the dependency upgrade, from the target directory:
95
95
 
96
96
  ```text
97
- npx --prefer-offline --yes copilotkit@4.24.0 onboard upgrade-plan --json
97
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard upgrade-plan --json
98
98
  ```
99
99
 
100
100
  It reads the installed tree and the registry. Read `status`:
@@ -176,7 +176,7 @@ here is work the developer did not ask for.
176
176
  Plan the threads drawer itself: add it from the selected drawer page, where this frontend
177
177
  does not already render one. Where this journey's frontend framework ships no threads
178
178
  drawer -- React Native --, plan that the thread is proved by
179
- `npx --prefer-offline --yes copilotkit@4.24.0 verify --round-trip`, which needs no browser. Do not plan a
179
+ `npx --prefer-offline --yes copilotkit@4.25.0 verify --round-trip`, which needs no browser. Do not plan a
180
180
  step that opens the managed Intelligence dashboard.
181
181
 
182
182
  ## Name the files the run writes itself
@@ -218,6 +218,13 @@ step in the plan. Where a protected path you can justify is the only obstacle, t
218
218
  stays. Where the plan needs a protected path you cannot justify in that sentence, return
219
219
  `Status: blocked`.
220
220
 
221
+ Installing or upgrading a package changes the manifest that lists it, such as `package.json`
222
+ or `pyproject.toml`. When a step does that and the manifest is a protected path, list the
223
+ manifest under `Authorization requested`, even if no step edits it by hand. Its consent
224
+ also covers its lockfile, such as `package-lock.json` or `uv.lock`, beside it or at the
225
+ workspace root, so do not list the lockfile on its own line. Install with the package manager's usual command, which
226
+ rewrites the lockfile in place. Never delete a lockfile to regenerate it.
227
+
221
228
  Authorization covers changing a protected path, not removing it. Do not plan the deletion
222
229
  of a protected path, and do not plan a step that moves or renames one, which removes it
223
230
  under its captured name. If a step cannot be written any other way, return
@@ -115,7 +115,7 @@ Intelligence: declare each exact version in its app's manifest, then install wit
115
115
  project's package manager. Then check the installed tree:
116
116
 
117
117
  ```text
118
- npx --prefer-offline --yes copilotkit@4.24.0 onboard upgrade-plan --check --json
118
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard upgrade-plan --check --json
119
119
  ```
120
120
 
121
121
  `single` means every direct dependency resolved to one version. `duplicates` names each
@@ -130,7 +130,7 @@ If the check finds duplicates or the baseline regresses, put the manifests and l
130
130
  back, leave Intelligence unwired, and report what failed:
131
131
 
132
132
  ```text
133
- npx --prefer-offline --yes copilotkit@4.24.0 onboard upgrade-plan --revert --json
133
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard upgrade-plan --revert --json
134
134
  ```
135
135
 
136
136
  Then end your turn. Never add an `overrides`, `resolutions`, or `pnpm.overrides` block to
@@ -4,13 +4,19 @@ Work only on the packet you were assigned. Inspect the repository without changi
4
4
 
5
5
  ## Start with what the CLI already knows
6
6
 
7
- Run this first, from the target project directory:
7
+ Your handoff holds the JSON of this command, which the main coding agent ran from the
8
+ target project directory:
8
9
 
9
10
  ```text
10
- npx --prefer-offline --yes copilotkit@4.24.0 onboard inspect --json
11
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard inspect --json
11
12
  ```
12
13
 
13
- It answers the deterministic half of both packets exactly, from the same code
14
+ Read that JSON. Do not run the command again. If the handoff holds no inspection JSON, run
15
+ the command yourself. If your harness refuses it, return at once with no packet. Say that
16
+ the harness refused the command, name it, and do not wait for an approval. That is not
17
+ `Status: blocked`: the main coding agent can run the command and do this work itself.
18
+
19
+ The JSON answers the deterministic half of both packets exactly, from the same code
14
20
  `copilotkit verify` uses: the project record by presence, and, for each app or runtime
15
21
  directory on its own, the env files, which variable carries the Intelligence key and which
16
22
  file it came from, whether that directory's own process can load it, the package manager
@@ -111,6 +117,6 @@ Return one row for each assigned item with its status, evidence path, and a shor
111
117
  Use only `proved`, `absent`, or `unproved` for the status. State each absent or unproved item.
112
118
  Do not read, print, or return secret values. For `.env` and `.copilotkit/project.json`
113
119
  checks, return only paths, presence checks, missing field names, and the one `.env`
114
- modification time named above. Do not read a file
115
- outside the project directory. Do not run or return an onboarding command other than
116
- `onboard inspect`. End your turn after returning the findings to the main coding agent.
120
+ modification time named above. Do not read a file outside the project directory. Do not
121
+ run an onboarding command, except `onboard inspect` when the handoff holds no inspection
122
+ JSON. End your turn after returning the findings to the main coding agent.
@@ -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.24.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
35
+ `npx --prefer-offline --yes copilotkit@4.25.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
@@ -54,6 +54,11 @@ passed, failed, or skipped, and do not withhold `both-oss` for a skip. A failed
54
54
  on an available surface is a baseline failure and is not a skip. Return each predicate and
55
55
  its secret-safe evidence.
56
56
 
57
+ For each failed predicate, say whether its cause is operational -- a project-owned process
58
+ or port, a request option, or a sandbox block -- or the project itself. Name the check that
59
+ failed, such as the `verify` check id. The main coding agent retries only an operational
60
+ failure.
61
+
57
62
  The default in-memory OSS runner is ephemeral. SQLite, custom, or framework persistence
58
63
  can be durable. Report the persistence that project evidence proves, or `unproved`. Do not
59
64
  replace it and do not describe all OSS runs as ephemeral.
@@ -78,7 +78,7 @@ about the failure it was spawned to clear.
78
78
  Run this from the target app directory:
79
79
 
80
80
  ```text
81
- npx --prefer-offline --yes copilotkit@4.24.0 onboard proof-check --json
81
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard proof-check --json
82
82
  ```
83
83
 
84
84
  It starts each app's `dev` script unless a server from that app already listens, and
@@ -109,6 +109,9 @@ the agent ID question all the same.
109
109
 
110
110
  Otherwise sort `firstFailure`, and run the command again after each repair:
111
111
 
112
+ - `model-key`: the credentials step found the model key missing, or the vendor refused it.
113
+ The agent cannot answer a chat without it, so the command started nothing. Do not change
114
+ code, and do not write a key. Return it with its detail, before the browser.
112
115
  - `runtime-answers`: nothing answered, or the project records no runtime URL. When the
113
116
  record holds no URL, the command records one itself if exactly one port in the project
114
117
  answers as a runtime. So this failure means it found none, or more than one. Read the
@@ -116,7 +119,7 @@ Otherwise sort `firstFailure`, and run the command again after each repair:
116
119
  asking. Read the port from the log, not from the plan, and record it:
117
120
 
118
121
  ```text
119
- npx --prefer-offline --yes copilotkit@4.24.0 onboard runtime-url --url <runtime-url>
122
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard runtime-url --url <runtime-url>
120
123
  ```
121
124
 
122
125
  `<runtime-url>` is the project's runtime URL, or the plan's, with its port replaced by the
@@ -131,8 +134,37 @@ Otherwise sort `firstFailure`, and run the command again after each repair:
131
134
  - `verify:intelligence_thread_routes`: usually a missing `identifyUser` where the runtime is
132
135
  constructed. Return it for implementation. Never remove a `mode: "single-route"` mount
133
136
  to satisfy it.
134
- - `round-trip:agent_answers` naming `user-not-identified`: this project's `identifyUser` reads a
135
- session the CLI does not carry. Run again with `--header "Name: value"` for what it reads.
137
+ - `round-trip:agent_answers` naming `user-not-identified`, or at `fail` because the runtime
138
+ refused the thread the check sent: the check starts its own run on a new thread, and this
139
+ app refuses that run. Its `identifyUser` reads a session the CLI does not carry, or it runs
140
+ only threads that it created. That is the app working. Do not change the app to accept the
141
+ run, and do not ask the developer for a session cookie. Prove the round trip on a thread
142
+ the app created:
143
+ 1. Open the `frontendUrl` the checks resolved, under the Step 6a rules. The app needs a
144
+ signed-in user. Where the page asks for a sign-in, do not create an account and do not
145
+ enter credentials.
146
+ 2. Send the Step 1 request once, on a new thread. On a second attempt, send it again: a
147
+ thread from before the repair does not prove the repaired app.
148
+ 3. Read that request's `threadId` from the request body the page sent to the runtime
149
+ endpoint, in the network requests.
150
+ 4. Run the checks again with `--thread <id>`. They read that thread from the platform with
151
+ the project key and start no run. The checks fail a thread that did not change during
152
+ this run, a thread whose newest message has no answer, and a thread of another agent.
153
+ Follow that detail once, with a new thread, before you report a failed proof.
154
+
155
+ Return `Status: blocked` with this check and its evidence when you cannot do these steps:
156
+ - a cloned-starter run, which opens no browser,
157
+ - no browser tool loaded,
158
+ - a sign-in you cannot complete,
159
+ - a browser tool that does not show request bodies.
160
+
161
+ Say that the developer can
162
+ send one message in the app and give you its thread id, which is all `--thread` needs.
163
+ The app is not at fault, so do not report `failed`. Pass `--header "Name: value"` instead
164
+ only when the developer offers what `identifyUser` reads.
165
+
166
+ Where the handoff carries a thread id from the developer, skip the numbered steps above
167
+ and do not open the app for them. Run the checks with `--thread <id>` at once.
136
168
  - `round-trip:page_context_reaches_agent` at `fail`: the agent answered the plain request
137
169
  and recorded nothing for the request that carried context. Return it with its evidence as
138
170
  a failed proof step. At `undetermined` and marked `advisory`, the agent answered without
@@ -142,6 +174,7 @@ Otherwise sort `firstFailure`, and run the command again after each repair:
142
174
  still does not complete, prove the path in Step 5a, and report the check with its detail.
143
175
  - `round-trip:learning_container_assigned` at `fail`: the thread carries no container or
144
176
  another one. A thread cannot move, so start a new thread rather than repairing that one.
177
+ With `--thread`, send the Step 1 request on a new thread in the app, and pass that id.
145
178
  `features.self_learning` and `/info` are not evidence of an assignment.
146
179
  - `env-files-current`: the process it names started before its env file was written, and
147
180
  has to start again before a 401 means anything. Report it. Do not restart or stop it.
@@ -162,6 +195,11 @@ with a prefix rule for `curl`, run it again, and do not record a failed predicat
162
195
 
163
196
  ### Step 5a -- Prove that the page's data reaches the model
164
197
 
198
+ Where the proof checks needed `--thread`, the app refuses a run that Steps 5a and 5b send,
199
+ for the same reason. Skip both steps and send no run. Record that they sent no run for that
200
+ reason, and prove the page's data and the component in the browser instead, at Steps 6
201
+ and 7.
202
+
165
203
  `verify --round-trip` asks a question that needs no context. Where the frontend's files
166
204
  call a context hook, it also sends one token as context and reports
167
205
  `page_context_reaches_agent`, whose `pass` proves that the agent's model sees context at
@@ -219,7 +257,8 @@ to read.
219
257
  Read the registrations this project's frontend declares, by name. Step 5a already sent the
220
258
  step 1 request with those declarations, so read the tool calls out of the events Step 5a
221
259
  captured for the run carrying the page's unchanged context. Do not send that request again.
222
- Where Step 5a sent no run, because this journey shares no page data, send the step 1 request
260
+ Where Step 5a sent no run because the proof checks needed `--thread`, send no run here
261
+ either. Where Step 5a sent no run, because this journey shares no page data, send the step 1 request
223
262
  to `<runtime>/agent/<agent id>/run`, carrying those declarations, and read the tool calls out
224
263
  of that run's own events. Where the Step 5a run carried none of those declarations, send
225
264
  that run once more with them, and read that run instead. Never report a wiring gap from a run
@@ -251,8 +290,10 @@ For a recorded `both-oss` starting state, this step has no component to render.
251
290
  same request the baseline recorded, require the same kind of user-visible result the
252
291
  baseline produced, and require that the thread for that request is listed in the drawer.
253
292
  Where this journey's frontend framework ships no threads drawer -- React Native --, prove
254
- that thread with `npx --prefer-offline --yes copilotkit@4.24.0 verify --round-trip`, which reads the
255
- answer back off the thread and needs no browser. Record which of the two you proved.
293
+ that thread with `npx --prefer-offline --yes copilotkit@4.25.0 verify --round-trip`, which reads the
294
+ answer back off the thread and needs no browser. Where the proof checks needed `--thread`,
295
+ prove the thread for this request with `verify --thread <id>` instead. Record which of the
296
+ two you proved.
256
297
 
257
298
  Use the surface control the main coding agent recorded for your environment. That finding
258
299
  is the answer, and there is nothing here for you to go looking for. Do not register a
@@ -279,7 +320,7 @@ limit can be ten minutes. You cannot interrupt a call while it runs, so the limi
279
320
  what you do after one. If a browser call took longer than 60 seconds to return, the browser
280
321
  control is unresponsive. Do not call the browser again in this attempt. A second call to a
281
322
  hung tool waits as long as the first one did. Run
282
- `npx --prefer-offline --yes copilotkit@4.24.0 verify --frontend-url <the frontendUrl the proof checks resolved> --json` once,
323
+ `npx --prefer-offline --yes copilotkit@4.25.0 verify --frontend-url <the frontendUrl the proof checks resolved> --json` once,
283
324
  and record the `frontend_assets_served` result. Report the outcome `failed` with the cause
284
325
  `browser-control-unresponsive`. The application is not at fault on this evidence: every
285
326
  step before the browser proved the runtime without one, and no repair to the project can
@@ -289,7 +330,7 @@ reach the tool.
289
330
  the page to finish loading. Do not retype the host, and do not substitute a URL a tool
290
331
  offers you by default. Where the page loads but its styling is missing or the chat
291
332
  control is dead, run
292
- `npx --prefer-offline --yes copilotkit@4.24.0 verify --frontend-url <the url you opened> --json`
333
+ `npx --prefer-offline --yes copilotkit@4.25.0 verify --frontend-url <the url you opened> --json`
293
334
  before you diagnose anything else. A dev server can serve its page and refuse every
294
335
  static chunk behind it, and on screen that is indistinguishable from a broken
295
336
  integration. The `frontend_assets_served` check tells the two apart.
@@ -29,14 +29,20 @@ Before you show the best-effort plan, require this complete packet:
29
29
  - Give the full validation command list.
30
30
  - Give the ordered proof rules.
31
31
 
32
+ Before you end your turn to wait for the developer, report the pause:
33
+
34
+ ```text
35
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
36
+ ```
37
+
32
38
  After the developer approves the best-effort plan, run
33
- `npx --prefer-offline --yes copilotkit@4.24.0 onboard read fallback/best-effort`.
39
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read fallback/best-effort`.
34
40
 
35
41
  Send one short report. The friction command follows the telemetry setting the developer
36
42
  already chose, so it needs no separate question.
37
43
 
38
44
  ```text
39
- npx --prefer-offline --yes copilotkit@4.24.0 onboard friction --phase stop --category <slug> --message "<sentences>"
45
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard friction --phase stop --category <slug> --message "<sentences>"
40
46
  ```
41
47
 
42
48
  `--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.24.0",
3
+ "version": "4.25.0",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=20.9.0"
@@ -14920,11 +14920,17 @@ var FLAG_DEFINITIONS = defineFlags({
14920
14920
  // gateway stores browser event batches. Both surfaces read the derived
14921
14921
  // FF_LEARNING_TRAJECTORIES override; the gateway mirrors the env default.
14922
14922
  "learning.trajectories": {
14923
- purpose: "Gates Trajectory join tokens, operator read APIs, and the web app capability in app-api, and browser event capture on the realtime gateway.",
14923
+ purpose: "Gates Trajectory capture, saved reads, and Trajectory sessions as a Learning source in app-api, the realtime gateway, the web app, and the Learning scheduler and runners.",
14924
14924
  owner: "learning",
14925
14925
  createdAt: "2026-10-01",
14926
14926
  status: "rollout",
14927
- surfaces: ["app-api", "realtime-gateway", "app-frontend"],
14927
+ surfaces: [
14928
+ "app-api",
14929
+ "realtime-gateway",
14930
+ "app-frontend",
14931
+ "learning-scheduler",
14932
+ "learning-runner"
14933
+ ],
14928
14934
  defaultByEnv: { dev: true, ci: true, prod: false }
14929
14935
  },
14930
14936
  "analytics.pipeline": {
@@ -14957,7 +14963,7 @@ init_define_CLI_LOCAL_EVALUATION_SUPPORT();
14957
14963
 
14958
14964
  // apps/cli/src/config.ts
14959
14965
  function getTemplateRef() {
14960
- return true ? "c88a2dd2a4c024e956e3f88b6b86d5715951e284" : "main";
14966
+ return true ? "1477c8eab6f88833fa93236fe766746c9800a991" : "main";
14961
14967
  }
14962
14968
 
14963
14969
  // apps/cli/src/services/agentcore-config.ts