copilotkit 4.28.0 → 4.29.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 +6 -3
  2. package/cli-build-info.json +5 -5
  3. package/index.js +555 -196
  4. package/onboarding/index.json +2 -2
  5. package/onboarding/prompts/authenticate/start.md +32 -20
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +15 -15
  8. package/onboarding/prompts/credentials/plan.md +24 -24
  9. package/onboarding/prompts/credentials/settle-credentials.md +7 -7
  10. package/onboarding/prompts/credentials/write-plan.md +34 -26
  11. package/onboarding/prompts/deployment/choose-local.md +9 -9
  12. package/onboarding/prompts/deployment/local-evaluation.md +12 -12
  13. package/onboarding/prompts/fallback/best-effort.md +6 -6
  14. package/onboarding/prompts/feature/a2ui/implement.md +4 -4
  15. package/onboarding/prompts/feature/a2ui/plan.md +3 -3
  16. package/onboarding/prompts/feature/a2ui/proof.md +5 -5
  17. package/onboarding/prompts/feature/a2ui/start.md +17 -8
  18. package/onboarding/prompts/feature/channels/implement.md +7 -7
  19. package/onboarding/prompts/feature/channels/plan.md +5 -5
  20. package/onboarding/prompts/feature/channels/proof.md +5 -5
  21. package/onboarding/prompts/feature/channels/start.md +18 -9
  22. package/onboarding/prompts/feature/chat-suggestions/implement.md +4 -4
  23. package/onboarding/prompts/feature/chat-suggestions/plan.md +3 -3
  24. package/onboarding/prompts/feature/chat-suggestions/proof.md +5 -5
  25. package/onboarding/prompts/feature/chat-suggestions/start.md +17 -8
  26. package/onboarding/prompts/feature/complete.md +2 -2
  27. package/onboarding/prompts/feature/learning/implement.md +12 -12
  28. package/onboarding/prompts/feature/learning/plan.md +4 -4
  29. package/onboarding/prompts/feature/learning/proof.md +13 -13
  30. package/onboarding/prompts/feature/learning/start.md +17 -8
  31. package/onboarding/prompts/feature/open-generative-ui/implement.md +4 -4
  32. package/onboarding/prompts/feature/open-generative-ui/plan.md +3 -3
  33. package/onboarding/prompts/feature/open-generative-ui/proof.md +5 -5
  34. package/onboarding/prompts/feature/open-generative-ui/start.md +17 -8
  35. package/onboarding/prompts/feature/realtime-sync/implement.md +5 -5
  36. package/onboarding/prompts/feature/realtime-sync/plan.md +3 -3
  37. package/onboarding/prompts/feature/realtime-sync/proof.md +5 -5
  38. package/onboarding/prompts/feature/realtime-sync/start.md +16 -7
  39. package/onboarding/prompts/feature/rich-threads/implement.md +6 -6
  40. package/onboarding/prompts/feature/rich-threads/plan.md +3 -3
  41. package/onboarding/prompts/feature/rich-threads/proof.md +5 -5
  42. package/onboarding/prompts/feature/rich-threads/start.md +16 -7
  43. package/onboarding/prompts/feature/stop.md +4 -4
  44. package/onboarding/prompts/feature/voice/implement.md +4 -4
  45. package/onboarding/prompts/feature/voice/plan.md +4 -4
  46. package/onboarding/prompts/feature/voice/proof.md +5 -5
  47. package/onboarding/prompts/feature/voice/start.md +17 -8
  48. package/onboarding/prompts/framework/ag2.md +3 -3
  49. package/onboarding/prompts/framework/agno.md +3 -3
  50. package/onboarding/prompts/framework/built-in.md +3 -3
  51. package/onboarding/prompts/framework/claude-sdk-python.md +3 -3
  52. package/onboarding/prompts/framework/claude-sdk-typescript.md +3 -3
  53. package/onboarding/prompts/framework/crewai-flows.md +5 -5
  54. package/onboarding/prompts/framework/custom-ag-ui.md +4 -4
  55. package/onboarding/prompts/framework/deep-agents.md +3 -3
  56. package/onboarding/prompts/framework/google-adk.md +3 -3
  57. package/onboarding/prompts/framework/langgraph-fastapi.md +3 -3
  58. package/onboarding/prompts/framework/langgraph-python.md +3 -3
  59. package/onboarding/prompts/framework/langgraph-typescript.md +3 -3
  60. package/onboarding/prompts/framework/llamaindex.md +3 -3
  61. package/onboarding/prompts/framework/mastra.md +3 -3
  62. package/onboarding/prompts/framework/ms-agent-dotnet.md +5 -5
  63. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +5 -5
  64. package/onboarding/prompts/framework/ms-agent-python.md +3 -3
  65. package/onboarding/prompts/framework/pydantic-ai.md +3 -3
  66. package/onboarding/prompts/framework/strands-python.md +3 -3
  67. package/onboarding/prompts/framework/strands-typescript.md +3 -3
  68. package/onboarding/prompts/frontend/angular.md +4 -4
  69. package/onboarding/prompts/frontend/nextjs.md +4 -4
  70. package/onboarding/prompts/frontend/plan.md +10 -10
  71. package/onboarding/prompts/frontend/react-native.md +3 -3
  72. package/onboarding/prompts/frontend/react-spa.md +3 -3
  73. package/onboarding/prompts/frontend/vue.md +3 -3
  74. package/onboarding/prompts/implementation/build-and-validate.md +26 -10
  75. package/onboarding/prompts/proof/complete.md +3 -3
  76. package/onboarding/prompts/proof/oss-baseline.md +21 -5
  77. package/onboarding/prompts/proof/round-trip.md +33 -11
  78. package/onboarding/prompts/research/gather.md +58 -41
  79. package/onboarding/prompts/research/merge.md +3 -3
  80. package/onboarding/prompts/research/preflight.md +2 -2
  81. package/onboarding/prompts/research/route.md +5 -5
  82. package/onboarding/prompts/setup/questions.md +6 -6
  83. package/onboarding/prompts/starter/clone.md +28 -28
  84. package/onboarding/prompts/stopped/run-failed.md +3 -3
  85. package/onboarding/prompts/subagent/create-plan.md +27 -2
  86. package/onboarding/prompts/subagent/implement-and-validate.md +31 -3
  87. package/onboarding/prompts/subagent/inspect-repository.md +17 -4
  88. package/onboarding/prompts/subagent/prove-oss-baseline.md +24 -1
  89. package/onboarding/prompts/subagent/prove-round-trip.md +29 -6
  90. package/onboarding/prompts/unsupported/no-validated-path.md +3 -3
  91. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  # Clone a starter
2
2
 
3
- First run `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers`. It prints the answers that
3
+ First run `npx --prefer-offline --yes copilotkit@4.29.0 onboard setup-answers`. It prints the answers that
4
4
  `setup/questions` recorded, even after this conversation lost them: `framework`, `frontend`,
5
5
  `vendor`, `project`, `key`, and on the local route `learning`. Take every "recorded" answer
6
6
  below from the record, or this conversation when the record lacks it. Do not ask a question
@@ -22,7 +22,7 @@ project to use, or to open the coding agent in a new empty folder.
22
22
  Before you end your turn to wait for the developer, report the pause:
23
23
 
24
24
  ```text
25
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
25
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-developer --about existing-folder
26
26
  ```
27
27
 
28
28
  Match the selected agent framework and frontend to this table:
@@ -76,7 +76,7 @@ the derived name.
76
76
  Only if the developer asks for an existing project, or asks to see the projects they have,
77
77
  read the choices:
78
78
 
79
- `npx --prefer-offline --yes copilotkit@4.28.0 project list --json`
79
+ `npx --prefer-offline --yes copilotkit@4.29.0 project list --json`
80
80
 
81
81
  Then ask which one to use. Do not order the projects by creation time. If the developer
82
82
  already gave this answer, do not ask again. Do not read a secret value. Do not show or
@@ -85,7 +85,7 @@ store a secret value.
85
85
  Before you end your turn to wait for the developer, report the pause:
86
86
 
87
87
  ```text
88
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
88
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-developer --about project-name
89
89
  ```
90
90
 
91
91
  ## Ask where the model credential lives
@@ -119,7 +119,7 @@ stops the clone. Pass the new file with `--model-key-file`, as for any other key
119
119
  Before you end your turn to wait for the developer, report the pause:
120
120
 
121
121
  ```text
122
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
122
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-model-credential
123
123
  ```
124
124
 
125
125
  A path the developer names is theirs to give, including one outside the project. A path
@@ -132,7 +132,7 @@ This route skips the plan step that records the path, so record it here, once, b
132
132
  the clone:
133
133
 
134
134
  ```text
135
- npx --prefer-offline --yes copilotkit@4.28.0 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend> --model-vendor <model-vendor> --model-vendor-choice <model-vendor-choice>
135
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend> --model-vendor <model-vendor> --model-vendor-choice <model-vendor-choice>
136
136
  ```
137
137
 
138
138
  - `<starting-state>`: the starting state the research recorded, usually `empty`.
@@ -155,7 +155,7 @@ Do not inspect another entry in the parent directory. Replace each placeholder w
155
155
  recorded value. Do not run a placeholder as a shell argument. If the path holds a space,
156
156
  put it in double quotes.
157
157
 
158
- `npx --prefer-offline --yes copilotkit@4.28.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
158
+ `npx --prefer-offline --yes copilotkit@4.29.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
159
159
 
160
160
  `--dir` is always the absolute path of the target directory. `init` builds the app in that
161
161
  directory and gives the app the directory's name. Do not add `--name`: `init` refuses
@@ -178,23 +178,23 @@ the developer for the right path, or run the command again without the flag.
178
178
  Before you end your turn to wait for the developer, report the pause:
179
179
 
180
180
  ```text
181
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
181
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-model-credential
182
182
  ```
183
183
 
184
184
  If you cannot pass the key file to `init`, for example because a sandbox refuses the path,
185
185
  clone without `--model-key-file`. Then copy the key from `<target>` with one command:
186
- `cd <target> && npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file> --json`.
186
+ `cd <target> && npx --prefer-offline --yes copilotkit@4.29.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file> --json`.
187
187
  `<env file>` is `.env`, or `agent/.env` for the Microsoft Agent Framework Python starter.
188
188
  The command writes the key into that file without printing it. If the
189
189
  command is refused too, ask the developer to run it. Give them exactly this one line:
190
- `! cd <target> && npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file>`.
190
+ `! cd <target> && npx --prefer-offline --yes copilotkit@4.29.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file>`.
191
191
  The command needs no input. Without `!`, they run the same command in a terminal.
192
192
  Do not write a `sed`, `grep`, or `cat` command to copy the key.
193
193
 
194
194
  Before you end your turn to wait for the developer, report the pause:
195
195
 
196
196
  ```text
197
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
197
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-model-credential
198
198
  ```
199
199
 
200
200
  ### For a recorded local choice
@@ -204,7 +204,7 @@ command instead of the hosted command above. Do not ask the project questions ab
204
204
  Local evaluation creates its own empty project, and `init --local` refuses `--create` and
205
205
  `--project`.
206
206
 
207
- `npx --prefer-offline --yes copilotkit@4.28.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --local --defer-model --install`
207
+ `npx --prefer-offline --yes copilotkit@4.29.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --local --defer-model --install`
208
208
 
209
209
  Use the `learning` answer from the record, or this conversation. Use the default only when
210
210
  neither holds one.
@@ -214,12 +214,12 @@ file. The CLI selects the latest stable release. If the developer gave a candida
214
214
  manifest for release testing, add `--candidate <manifest.json>`. Otherwise, do not add it.
215
215
  The `--dir`, `--no-install` and `--model-key-file` rules above apply here too.
216
216
 
217
- Before `init`, run `npx --prefer-offline --yes copilotkit@4.28.0 onboard local-terms --json`. If `accepted`
217
+ Before `init`, run `npx --prefer-offline --yes copilotkit@4.29.0 onboard local-terms --json`. If `accepted`
218
218
  is false, pause here. Give the developer this exact command to run in their own terminal:
219
- `npx --prefer-offline --yes copilotkit@4.28.0 local accept-terms`. Never accept the agreement yourself.
219
+ `npx --prefer-offline --yes copilotkit@4.29.0 local accept-terms`. Never accept the agreement yourself.
220
220
  Report the pause with
221
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer`, end your turn,
222
- and wait for "done". Then run `local-terms` again, and continue only when `accepted` is
221
+ `npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-developer --about local-terms`, end your
222
+ turn, and wait for "done". Then run `local-terms` again, and continue only when `accepted` is
223
223
  true. A local command that fails with `eula_acceptance_required` comes back to this step.
224
224
 
225
225
  For `learning.guided`, keep `--defer-model`.
@@ -228,7 +228,7 @@ After `init` reports the stack ready:
228
228
  Ask the developer to run this command in their own terminal window, in `<target>`:
229
229
 
230
230
  ```text
231
- npx --prefer-offline --yes copilotkit@4.28.0 local setup
231
+ npx --prefer-offline --yes copilotkit@4.29.0 local setup
232
232
  ```
233
233
 
234
234
  Do not give it as a `!` line, and do not run it yourself. Its guided model prompt needs a
@@ -237,9 +237,9 @@ changes nothing. The prompt asks for the model and its key, and it saves them pr
237
237
  On a running stack, it restarts only Learning. Do not ask for a model file.
238
238
 
239
239
  Say that the run continues when they reply or resume this session. Report the pause with
240
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential`, end your
240
+ `npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-model-credential`, end your
241
241
  turn, and wait. When the developer replies, run
242
- `npx --prefer-offline --yes copilotkit@4.28.0 local status --json` from `<target>` and read `learning.configuration`.
242
+ `npx --prefer-offline --yes copilotkit@4.29.0 local status --json` from `<target>` and read `learning.configuration`.
243
243
 
244
244
  The command installs the local stack, then connects the starter to it. It writes the
245
245
  gitignored `.copilotkit/local.json` stack reference and `.copilotkit/project.json` with the
@@ -302,10 +302,10 @@ grep -c '^<VARIABLE>=.' <target>/.env
302
302
  a count and never the value.
303
303
 
304
304
  If a variable is empty, run
305
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --json` from
305
+ `npx --prefer-offline --yes copilotkit@4.29.0 onboard credentials --model-key <VARIABLE> --json` from
306
306
  `<target>`, and show the developer `question.ask` word for word. It names the file by its
307
307
  full path and the line to add. If they reply with the path of a file that holds the key, run
308
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --env-path <file> --copy-to <question.envFile> --json`
308
+ `npx --prefer-offline --yes copilotkit@4.29.0 onboard credentials --model-key <VARIABLE> --env-path <file> --copy-to <question.envFile> --json`
309
309
  from `<target>`. Ask nothing else first. Quote a path that holds a space. The command copies
310
310
  the key without printing it. When it reports `ready`, the key is in `question.envFile`. Run
311
311
  the check above again, and continue. Follow this paragraph, not the packet's `next`, which is
@@ -333,7 +333,7 @@ The two Microsoft Agent Framework starters keep their key outside `<target>/.env
333
333
  When you ask, say that the run continues when they reply or resume this session. Then report the pause and end your turn:
334
334
 
335
335
  ```text
336
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
336
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-model-credential
337
337
  ```
338
338
 
339
339
  This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
@@ -349,7 +349,7 @@ Run this from `<target>`, with one `--model-key` for each variable. For the Micr
349
349
  Framework Python starter, add `--env-path agent/.env`. Skip it for the .NET starter.
350
350
 
351
351
  ```text
352
- npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --json
352
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard credentials --model-key <VARIABLE> --json
353
353
  ```
354
354
 
355
355
  The command never prints a value. If `status` is `ready`, continue. Otherwise do what
@@ -362,7 +362,7 @@ works and the app's model does not: the vendor does not serve the model that
362
362
  names, or names another, change `COPILOTKIT_AGENT_MODEL` where `question.ask` says, and
363
363
  run the command again.
364
364
 
365
- Then run `npx --prefer-offline --yes copilotkit@4.28.0 onboard read proof/round-trip`.
365
+ Then run `npx --prefer-offline --yes copilotkit@4.29.0 onboard read proof/round-trip`.
366
366
 
367
367
  If the local command fails, `init` keeps the cloned starter in `<target>`, and its error
368
368
  says whether it installed the starter's dependencies, or names the command that does. Do
@@ -375,14 +375,14 @@ available memory, or 40 GiB storage. Tell the developer what to change in Docker
375
375
  memory, pass on the amount the message names. Then report the pause and end your turn:
376
376
 
377
377
  ```text
378
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
378
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-developer --about environment-fix
379
379
  ```
380
380
 
381
381
  When the developer says that Docker is ready, resume from `<target>` with the same model
382
382
  choice. If the run used a `--candidate`, add the same one:
383
383
 
384
384
  ```text
385
- npx --prefer-offline --yes copilotkit@4.28.0 local setup --defer-model --json
385
+ npx --prefer-offline --yes copilotkit@4.29.0 local setup --defer-model --json
386
386
  ```
387
387
 
388
388
  If the run used model settings, replace `--defer-model` with `--model-config <private-file>`.
@@ -390,7 +390,7 @@ Read blockers and the recorded failed step. Do not delete or recreate a failed s
390
390
  setup reports the stack ready, connect the starter from `<target>`:
391
391
 
392
392
  ```text
393
- npx --prefer-offline --yes copilotkit@4.28.0 local connect --approve-connection --json
393
+ npx --prefer-offline --yes copilotkit@4.29.0 local connect --approve-connection --json
394
394
  ```
395
395
 
396
396
  The connection writes `.copilotkit/local.json`, `.copilotkit/project.json`, and the local
@@ -400,6 +400,6 @@ take the route below.
400
400
 
401
401
  If the command fails, report its exact error and do not claim that the starter is ready.
402
402
  Then run
403
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read stopped/run-failed`. The starter is one this
403
+ `npx --prefer-offline --yes copilotkit@4.29.0 onboard read stopped/run-failed`. The starter is one this
404
404
  graph ships and the stack was chosen from its own supported list, so a command that
405
405
  returned an error is a run that broke, not a setup this release does not support.
@@ -42,13 +42,13 @@ put to them, stop here and send the report below.
42
42
  Before you end your turn to wait for the developer, report the pause:
43
43
 
44
44
  ```text
45
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
45
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-developer --about scoped-fix
46
46
  ```
47
47
 
48
48
  If they approve it, make that one fix and nothing else. Then come back into this run:
49
49
 
50
50
  ```text
51
- npx --prefer-offline --yes copilotkit@4.28.0 onboard resume --message "<approval>"
51
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard resume --message "<approval>"
52
52
  ```
53
53
 
54
54
  Put the developer's approval in `--message`, in one or two sentences: the fix they
@@ -71,7 +71,7 @@ Send one short report. The friction command follows the telemetry setting the de
71
71
  already chose, so it needs no separate question.
72
72
 
73
73
  ```text
74
- npx --prefer-offline --yes copilotkit@4.28.0 onboard friction --phase stop --category <slug> --message "<sentences>"
74
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard friction --phase stop --category <slug> --message "<sentences>"
75
75
  ```
76
76
 
77
77
  `--message` takes one or two sentences: the step you stopped at and what stopped
@@ -22,6 +22,19 @@ override copies.
22
22
  List the required credential variable names. Do not read or return credential values.
23
23
  Preserve each agent or frontend that already exists.
24
24
 
25
+ ## When a command is refused
26
+
27
+ If you are a subagent and your harness refuses a command, return at once. Name the
28
+ command, the directory you ran it from, and the refusal, and run nothing else. Do not wait
29
+ for an approval: nobody sees it. The main coding agent runs the command itself and passes
30
+ the result on. The one wait allowed is a harness escalation request that this brief tells
31
+ you to make for a command. Make that request and wait for its answer.
32
+
33
+ If your handoff holds a command's result, use it and do not run that command again.
34
+
35
+ If you are the main coding agent and follow this brief yourself, this section is not for
36
+ you. Do not return: handle a refused command as the run's other prompts say.
37
+
25
38
  ## What the existing agent's behavior is
26
39
 
27
40
  The existing agent's behavior is four things: its system prompt and instructions, its
@@ -97,7 +110,7 @@ against a dead host, and the failure arrives as an empty-body 404 with no cause
97
110
  Ask the CLI for the dependency upgrade, from the target directory:
98
111
 
99
112
  ```text
100
- npx --prefer-offline --yes copilotkit@4.28.0 onboard upgrade-plan --json
113
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard upgrade-plan --json
101
114
  ```
102
115
 
103
116
  It reads the installed tree and the registry. Read `status`:
@@ -185,7 +198,7 @@ here is work the developer did not ask for.
185
198
  Plan the threads drawer itself: add it from the selected drawer page, where this frontend
186
199
  does not already render one. Where this journey's frontend framework ships no threads
187
200
  drawer -- React Native --, plan that the thread is proved by
188
- `npx --prefer-offline --yes copilotkit@4.28.0 verify --round-trip`, which needs no browser. Do not plan a
201
+ `npx --prefer-offline --yes copilotkit@4.29.0 verify --round-trip`, which needs no browser. Do not plan a
189
202
  step that opens the managed Intelligence dashboard.
190
203
 
191
204
  ## Name the files the run writes itself
@@ -325,10 +338,22 @@ change. Say that in the plan.
325
338
 
326
339
  Do not leave a change that needs approval out of the list to keep the run moving.
327
340
 
341
+ ## Return the result
342
+
328
343
  Gather what you need in as few commands as possible. Combine independent reads into one
329
344
  command rather than running them one at a time. Split a command only when its result decides
330
345
  what you run next.
331
346
 
347
+ Before you return, record that you are returning:
348
+
349
+ ```text
350
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase subagent-returned --brief create-plan --result <ok|failed>
351
+ ```
352
+
353
+ The Status line of your result decides the value. Pass `ok` only for `Status: passed`.
354
+ Pass `failed` for `Status: failed` or `Status: blocked`. If your harness refuses this command, say so in your result and return
355
+ anyway: the main coding agent records it.
356
+
332
357
  Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
333
358
  Return the plan, the URLs that you read, and each documentation gap. End your turn after you return
334
359
  the findings to the main coding agent.
@@ -89,6 +89,19 @@ approved paths that do not overwrite such a file, unless the plan lists it under
89
89
  running the scaffolder. Ask the main coding agent to revise credential setup when a
90
90
  required variable is missing. Do not provision another key to repair a scaffold overwrite.
91
91
 
92
+ ## When a command is refused
93
+
94
+ If you are a subagent and your harness refuses a command, return at once. Name the
95
+ command, the directory you ran it from, and the refusal, and run nothing else. Do not wait
96
+ for an approval: nobody sees it. The main coding agent runs the command itself and passes
97
+ the result on. The one wait allowed is a harness escalation request that this brief tells
98
+ you to make for a command. Make that request and wait for its answer.
99
+
100
+ If your handoff holds a command's result, use it and do not run that command again.
101
+
102
+ If you are the main coding agent and follow this brief yourself, this section is not for
103
+ you. Do not return: handle a refused command as the run's other prompts say.
104
+
92
105
  ## What the existing agent's behavior is
93
106
 
94
107
  The existing agent's behavior is four things: its system prompt and instructions, its
@@ -136,7 +149,7 @@ Intelligence: declare each exact version in its app's manifest, then install wit
136
149
  project's package manager, under the install rule above. Then check the installed tree:
137
150
 
138
151
  ```text
139
- npx --prefer-offline --yes copilotkit@4.28.0 onboard upgrade-plan --check --json
152
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard upgrade-plan --check --json
140
153
  ```
141
154
 
142
155
  `single` means every direct dependency resolved to one version. `duplicates` names each
@@ -151,7 +164,7 @@ If the check finds duplicates or the baseline regresses, put the manifests and l
151
164
  back, leave Intelligence unwired, and report what failed:
152
165
 
153
166
  ```text
154
- npx --prefer-offline --yes copilotkit@4.28.0 onboard upgrade-plan --revert --json
167
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard upgrade-plan --revert --json
155
168
  ```
156
169
 
157
170
  Then end your turn. Never add an `overrides`, `resolutions`, or `pnpm.overrides` block to
@@ -183,11 +196,16 @@ project does not hold, and the rendered result looks the same either way.
183
196
  Run the full validation list. Record changed files, command results, and errors. Do not
184
197
  claim that the real user journey works in this phase.
185
198
 
199
+ Your validation stops at `verify`. The proof step runs the round trip and records the
200
+ proof, once. Do not run `verify --round-trip`, `onboard proof-check`, or `onboard proof`.
201
+ Where the validation list names the round trip, leave it to the proof step and say so in
202
+ the Validation section.
203
+
186
204
  Where the plan names a Learning Container id, check that the container exists first. Run
187
205
  this from the target app directory, before you write any selector:
188
206
 
189
207
  ```text
190
- npx --prefer-offline --yes copilotkit@4.28.0 learning containers get <id> --json
208
+ npx --prefer-offline --yes copilotkit@4.29.0 learning containers get <id> --json
191
209
  ```
192
210
 
193
211
  `"status": "success"` means the container exists. An `error.code` of
@@ -220,6 +238,16 @@ Gather what you need in as few commands as possible. Combine independent reads i
220
238
  command rather than running them one at a time. Split a command only when its result decides
221
239
  what you run next.
222
240
 
241
+ Before you return, record that you are returning:
242
+
243
+ ```text
244
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase subagent-returned --brief implement-and-validate --result <ok|failed>
245
+ ```
246
+
247
+ The Status line of your result decides the value. Pass `ok` only for `Status: passed`.
248
+ Pass `failed` for `Status: failed` or `Status: blocked`. If your harness refuses this command, say so in your result and return
249
+ anyway: the main coding agent records it.
250
+
223
251
  Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
224
252
  Return exactly four sections: Status, Files changed, Validation, and Blockers. Then end
225
253
  your turn.
@@ -8,13 +8,13 @@ Your handoff holds the JSON of this command, which the main coding agent ran fro
8
8
  target project directory:
9
9
 
10
10
  ```text
11
- npx --prefer-offline --yes copilotkit@4.28.0 onboard inspect --json
11
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard inspect --json
12
12
  ```
13
13
 
14
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.
15
+ the command yourself. If your harness refuses it, return with no packet, as "When a command
16
+ is refused" below says. That is not `Status: blocked`: the main coding agent can run the
17
+ command and do this work itself.
18
18
 
19
19
  The JSON answers the deterministic half of both packets exactly, from the same code
20
20
  `copilotkit verify` uses: the project record by presence, and, for each app or runtime
@@ -48,6 +48,19 @@ target directory that holds no project yet, and `no-declared-dependency` for a p
48
48
  where no directory declares one. Report that reason as the finding. Do not report that
49
49
  the inspection found nothing.
50
50
 
51
+ ## When a command is refused
52
+
53
+ If you are a subagent and your harness refuses a command, return at once. Name the
54
+ command, the directory you ran it from, and the refusal, and run nothing else. Do not wait
55
+ for an approval: nobody sees it. The main coding agent runs the command itself and passes
56
+ the result on. The one wait allowed is a harness escalation request that this brief tells
57
+ you to make for a command. Make that request and wait for its answer.
58
+
59
+ If your handoff holds a command's result, use it and do not run that command again.
60
+
61
+ If you are the main coding agent and follow this brief yourself, this section is not for
62
+ you. Do not return: handle a refused command as the run's other prompts say.
63
+
51
64
  ## Project evidence packet
52
65
 
53
66
  Find evidence for:
@@ -3,6 +3,19 @@
3
3
  Read and run only inside the project directory. Do not edit source, configuration,
4
4
  dependencies, or tracked files. Do not read, show, store, or return secret values.
5
5
 
6
+ ## When a command is refused
7
+
8
+ If you are a subagent and your harness refuses a command, return at once. Name the
9
+ command, the directory you ran it from, and the refusal, and run nothing else. Do not wait
10
+ for an approval: nobody sees it. The main coding agent runs the command itself and passes
11
+ the result on. The one wait allowed is a harness escalation request that this brief tells
12
+ you to make for a command. Make that request and wait for its answer.
13
+
14
+ If your handoff holds a command's result, use it and do not run that command again.
15
+
16
+ If you are the main coding agent and follow this brief yourself, this section is not for
17
+ you. Do not return: handle a refused command as the run's other prompts say.
18
+
6
19
  Find the expected agent id from the project. Start the existing agent and frontend only
7
20
  when they are not already running. Before using a port, identify its process and working
8
21
  directory. Do not stop a process outside this project.
@@ -35,7 +48,7 @@ Prove the live runtime in this order:
35
48
  4. Confirm from project files that the runtime constructor passes a `runner` option rather
36
49
  than an `intelligence` option. A package, import, project file, or key is not use proof.
37
50
  5. Run
38
- `npx --prefer-offline --yes copilotkit@4.28.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
51
+ `npx --prefer-offline --yes copilotkit@4.29.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
39
52
  with the runtime URL or auth header options that this project needs. Add
40
53
  `--runtime-url <url>` when the report names a runtime URL the dev server does not
41
54
  serve. Require exit zero
@@ -68,5 +81,15 @@ The default in-memory OSS runner is ephemeral. SQLite, custom, or framework pers
68
81
  can be durable. Report the persistence that project evidence proves, or `unproved`. Do not
69
82
  replace it and do not describe all OSS runs as ephemeral.
70
83
 
84
+ Before you return, record that you are returning:
85
+
86
+ ```text
87
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase subagent-returned --brief prove-oss-baseline --result <ok|failed>
88
+ ```
89
+
90
+ The Status line of your result decides the value. Pass `ok` only for `Status: passed`.
91
+ Pass `failed` for `Status: failed` or `Status: blocked`. If your harness refuses this command, say so in your result and return
92
+ anyway: the main coding agent records it.
93
+
71
94
  Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
72
95
  End your turn after returning the baseline result, process ids and ports used, and evidence paths.
@@ -50,6 +50,19 @@ Gather what you need in as few commands as possible. Combine independent reads i
50
50
  command rather than running them one at a time. Split a command only when its result decides
51
51
  what you run next.
52
52
 
53
+ ## When a command is refused
54
+
55
+ If you are a subagent and your harness refuses a command, return at once. Name the
56
+ command, the directory you ran it from, and the refusal, and run nothing else. Do not wait
57
+ for an approval: nobody sees it. The main coding agent runs the command itself and passes
58
+ the result on. The one wait allowed is a harness escalation request that this brief tells
59
+ you to make for a command. Make that request and wait for its answer.
60
+
61
+ If your handoff holds a command's result, use it and do not run that command again.
62
+
63
+ If you are the main coding agent and follow this brief yourself, this section is not for
64
+ you. Do not return: handle a refused command as the run's other prompts say.
65
+
53
66
  ## Step 1 -- Read what the proof needs
54
67
 
55
68
  Read all of this from the approved plan in one pass, before you start anything:
@@ -76,7 +89,7 @@ about the failure it was spawned to clear.
76
89
  Run this from the target app directory:
77
90
 
78
91
  ```text
79
- npx --prefer-offline --yes copilotkit@4.28.0 onboard proof-check --json
92
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard proof-check --json
80
93
  ```
81
94
 
82
95
  It starts each app's `dev` script unless a server from that app already listens, and
@@ -132,7 +145,7 @@ Otherwise sort `firstFailure`, and run the command again after each repair:
132
145
  asking. Read the port from the log, not from the plan, and record it:
133
146
 
134
147
  ```text
135
- npx --prefer-offline --yes copilotkit@4.28.0 onboard runtime-url --url <runtime-url>
148
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard runtime-url --url <runtime-url>
136
149
  ```
137
150
 
138
151
  `<runtime-url>` is the project's runtime URL, or the plan's, with its port replaced by the
@@ -239,7 +252,7 @@ shows it. Send the same run
239
252
  body twice: once carrying the context entries the page
240
253
  publishes, and once carrying the same entries with one value changed. Use the step 1
241
254
  request both times. Write each body to a JSON file in `.copilotkit/proof/`, and send it with
242
- `npx --prefer-offline --yes copilotkit@4.28.0 verify --send-run <file> --agent <agent id> --json`.
255
+ `npx --prefer-offline --yes copilotkit@4.29.0 verify --send-run <file> --agent <agent id> --json`.
243
256
  The command sends the body to `<runtime>/agent/<agent id>/run` and reads the events the run
244
257
  streams. It writes them to `<file name>.events.jsonl` beside the body, and prints that path
245
258
  with the answer text and the tool calls. Do not send a run with `curl` and read its events
@@ -317,7 +330,7 @@ For a recorded `both-oss` starting state, this step has no component to render.
317
330
  same request the baseline recorded, require the same kind of user-visible result the
318
331
  baseline produced, and require that the thread for that request is listed in the drawer.
319
332
  Where this journey's frontend framework ships no threads drawer -- React Native --, prove
320
- that thread with `npx --prefer-offline --yes copilotkit@4.28.0 verify --round-trip`, which reads the
333
+ that thread with `npx --prefer-offline --yes copilotkit@4.29.0 verify --round-trip`, which reads the
321
334
  answer back off the thread and needs no browser. Where the proof checks needed `--thread`,
322
335
  prove the thread for this request with `verify --thread <id>` instead. Record which of the
323
336
  two you proved.
@@ -347,7 +360,7 @@ limit can be ten minutes. You cannot interrupt a call while it runs, so the limi
347
360
  what you do after one. If a browser call took longer than 60 seconds to return, the browser
348
361
  control is unresponsive. Do not call the browser again in this attempt. A second call to a
349
362
  hung tool waits as long as the first one did. Run
350
- `npx --prefer-offline --yes copilotkit@4.28.0 verify --frontend-url <the frontendUrl the proof checks resolved> --json` once,
363
+ `npx --prefer-offline --yes copilotkit@4.29.0 verify --frontend-url <the frontendUrl the proof checks resolved> --json` once,
351
364
  and record the `frontend_assets_served` result. Report the outcome `failed` with the cause
352
365
  `browser-control-unresponsive`. The application is not at fault on this evidence: every
353
366
  step before the browser proved the runtime without one, and no repair to the project can
@@ -357,7 +370,7 @@ reach the tool.
357
370
  the page to finish loading. Do not retype the host, and do not substitute a URL a tool
358
371
  offers you by default. Where the page loads but its styling is missing or the chat
359
372
  control is dead, run
360
- `npx --prefer-offline --yes copilotkit@4.28.0 verify --frontend-url <the url you opened> --json`
373
+ `npx --prefer-offline --yes copilotkit@4.29.0 verify --frontend-url <the url you opened> --json`
361
374
  before you diagnose anything else. A dev server can serve its page and refuse every
362
375
  static chunk behind it, and on screen that is indistinguishable from a broken
363
376
  integration. The `frontend_assets_served` check tells the two apart.
@@ -466,6 +479,16 @@ For every other starting state, record Step 8 as not applicable.
466
479
 
467
480
  ## Step 9 -- Return the result
468
481
 
482
+ Before you return, record that you are returning:
483
+
484
+ ```text
485
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase subagent-returned --brief prove-round-trip --result <ok|failed>
486
+ ```
487
+
488
+ The Status line of your result decides the value. Pass `ok` only for `Status: passed`.
489
+ Pass `failed` for `Status: failed` or `Status: blocked`. If your harness refuses this command, say so in your result and return
490
+ anyway: the main coding agent records it.
491
+
469
492
  Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
470
493
  Use `Status: passed` when the proof attempt completed with `performed`,
471
494
  `skipped-no-browser-tool`, `skipped-no-device`, or `skipped-cloned-starter`. The parent
@@ -36,17 +36,17 @@ Before you show the best-effort plan, require this complete packet:
36
36
  Before you end your turn to wait for the developer, report the pause:
37
37
 
38
38
  ```text
39
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
39
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard checkpoint --phase awaiting-plan-approval
40
40
  ```
41
41
 
42
42
  After the developer approves the best-effort plan, run
43
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read fallback/best-effort`.
43
+ `npx --prefer-offline --yes copilotkit@4.29.0 onboard read fallback/best-effort`.
44
44
 
45
45
  Send one short report. The friction command follows the telemetry setting the developer
46
46
  already chose, so it needs no separate question.
47
47
 
48
48
  ```text
49
- npx --prefer-offline --yes copilotkit@4.28.0 onboard friction --phase stop --category <slug> --message "<sentences>"
49
+ npx --prefer-offline --yes copilotkit@4.29.0 onboard friction --phase stop --category <slug> --message "<sentences>"
50
50
  ```
51
51
 
52
52
  `--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.28.0",
3
+ "version": "4.29.0",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=20.9.0"