copilotkit 4.23.1 → 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 (94) hide show
  1. package/README.md +164 -17
  2. package/cli-build-info.json +8 -8
  3. package/exporters/langgraph/README.md +33 -0
  4. package/exporters/langgraph/export_checkpointer.py +16 -0
  5. package/index.js +10909 -8245
  6. package/onboarding/index.json +2 -1
  7. package/onboarding/prompts/authenticate/start.md +50 -42
  8. package/onboarding/prompts/conversion/plan.md +3 -3
  9. package/onboarding/prompts/credentials/finalize-plan.md +30 -8
  10. package/onboarding/prompts/credentials/plan.md +115 -49
  11. package/onboarding/prompts/credentials/settle-credentials.md +16 -5
  12. package/onboarding/prompts/credentials/write-plan.md +15 -15
  13. package/onboarding/prompts/deployment/choose-local.md +62 -14
  14. package/onboarding/prompts/deployment/local-evaluation.md +37 -7
  15. package/onboarding/prompts/fallback/best-effort.md +8 -8
  16. package/onboarding/prompts/feature/a2ui/implement.md +15 -8
  17. package/onboarding/prompts/feature/a2ui/plan.md +15 -7
  18. package/onboarding/prompts/feature/a2ui/proof.md +14 -7
  19. package/onboarding/prompts/feature/a2ui/start.md +26 -8
  20. package/onboarding/prompts/feature/channels/implement.md +21 -9
  21. package/onboarding/prompts/feature/channels/plan.md +15 -7
  22. package/onboarding/prompts/feature/channels/proof.md +14 -7
  23. package/onboarding/prompts/feature/channels/start.md +30 -19
  24. package/onboarding/prompts/feature/chat-suggestions/implement.md +15 -8
  25. package/onboarding/prompts/feature/chat-suggestions/plan.md +15 -7
  26. package/onboarding/prompts/feature/chat-suggestions/proof.md +14 -7
  27. package/onboarding/prompts/feature/chat-suggestions/start.md +26 -8
  28. package/onboarding/prompts/feature/complete.md +2 -2
  29. package/onboarding/prompts/feature/learning/implement.md +32 -18
  30. package/onboarding/prompts/feature/learning/plan.md +15 -7
  31. package/onboarding/prompts/feature/learning/proof.md +76 -9
  32. package/onboarding/prompts/feature/learning/start.md +26 -8
  33. package/onboarding/prompts/feature/open-generative-ui/implement.md +15 -8
  34. package/onboarding/prompts/feature/open-generative-ui/plan.md +15 -7
  35. package/onboarding/prompts/feature/open-generative-ui/proof.md +14 -7
  36. package/onboarding/prompts/feature/open-generative-ui/start.md +26 -8
  37. package/onboarding/prompts/feature/realtime-sync/implement.md +20 -12
  38. package/onboarding/prompts/feature/realtime-sync/plan.md +15 -7
  39. package/onboarding/prompts/feature/realtime-sync/proof.md +14 -7
  40. package/onboarding/prompts/feature/realtime-sync/start.md +25 -7
  41. package/onboarding/prompts/feature/rich-threads/implement.md +21 -13
  42. package/onboarding/prompts/feature/rich-threads/plan.md +15 -7
  43. package/onboarding/prompts/feature/rich-threads/proof.md +14 -7
  44. package/onboarding/prompts/feature/rich-threads/start.md +25 -7
  45. package/onboarding/prompts/feature/stop.md +9 -3
  46. package/onboarding/prompts/feature/voice/implement.md +15 -8
  47. package/onboarding/prompts/feature/voice/plan.md +16 -8
  48. package/onboarding/prompts/feature/voice/proof.md +14 -7
  49. package/onboarding/prompts/feature/voice/start.md +26 -8
  50. package/onboarding/prompts/framework/ag2.md +6 -5
  51. package/onboarding/prompts/framework/agno.md +6 -5
  52. package/onboarding/prompts/framework/built-in.md +9 -6
  53. package/onboarding/prompts/framework/claude-sdk-python.md +2 -2
  54. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  55. package/onboarding/prompts/framework/crewai-flows.md +12 -4
  56. package/onboarding/prompts/framework/custom-ag-ui.md +8 -2
  57. package/onboarding/prompts/framework/deep-agents.md +6 -5
  58. package/onboarding/prompts/framework/google-adk.md +2 -2
  59. package/onboarding/prompts/framework/langgraph-fastapi.md +8 -5
  60. package/onboarding/prompts/framework/langgraph-python.md +8 -5
  61. package/onboarding/prompts/framework/langgraph-typescript.md +8 -5
  62. package/onboarding/prompts/framework/llamaindex.md +6 -5
  63. package/onboarding/prompts/framework/mastra.md +9 -6
  64. package/onboarding/prompts/framework/ms-agent-dotnet.md +12 -4
  65. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +12 -4
  66. package/onboarding/prompts/framework/ms-agent-python.md +6 -5
  67. package/onboarding/prompts/framework/pydantic-ai.md +6 -5
  68. package/onboarding/prompts/framework/strands-python.md +10 -6
  69. package/onboarding/prompts/framework/strands-typescript.md +10 -6
  70. package/onboarding/prompts/frontend/angular.md +10 -3
  71. package/onboarding/prompts/frontend/nextjs.md +36 -3
  72. package/onboarding/prompts/frontend/plan.md +13 -7
  73. package/onboarding/prompts/frontend/react-native.md +9 -2
  74. package/onboarding/prompts/frontend/react-spa.md +9 -2
  75. package/onboarding/prompts/frontend/vue.md +9 -2
  76. package/onboarding/prompts/implementation/build-and-validate.md +49 -21
  77. package/onboarding/prompts/proof/complete.md +3 -3
  78. package/onboarding/prompts/proof/oss-baseline.md +30 -13
  79. package/onboarding/prompts/proof/round-trip.md +55 -17
  80. package/onboarding/prompts/research/gather.md +21 -11
  81. package/onboarding/prompts/research/merge.md +8 -2
  82. package/onboarding/prompts/research/preflight.md +2 -2
  83. package/onboarding/prompts/research/route.md +14 -7
  84. package/onboarding/prompts/starter/clone.md +151 -9
  85. package/onboarding/prompts/stopped/run-failed.md +8 -2
  86. package/onboarding/prompts/subagent/create-plan.md +9 -2
  87. package/onboarding/prompts/subagent/implement-and-validate.md +2 -2
  88. package/onboarding/prompts/subagent/inspect-repository.md +12 -6
  89. package/onboarding/prompts/subagent/prove-oss-baseline.md +6 -1
  90. package/onboarding/prompts/subagent/prove-round-trip.md +53 -10
  91. package/onboarding/prompts/unsupported/no-validated-path.md +8 -2
  92. package/package.json +1 -1
  93. package/release/release-tool.js +18 -1
  94. package/services/local-auth-worker.js +175 -159
@@ -41,11 +41,10 @@ and continue when that thing arrives. A pause waits for one of two things:
41
41
  pick", gives no answer, and the default that the prompt states applies. Where the
42
42
  prompt states no default, ask once more.
43
43
 
44
- Before you end your turn to wait for the developer where the prompt states no default,
45
- report the pause:
44
+ Before you end your turn to wait for the developer, report the pause:
46
45
 
47
46
  ```text
48
- npx --prefer-offline --yes copilotkit@4.23.1 onboard checkpoint --phase awaiting-developer
47
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
49
48
  ```
50
49
 
51
50
  When the answer or the result arrives, continue from the step that paused. Do not read an
@@ -65,7 +64,7 @@ Both research subagents failing means this harness has no working subagent at al
65
64
  is worth recording once:
66
65
 
67
66
  ```text
68
- npx --prefer-offline --yes copilotkit@4.23.1 onboard checkpoint --phase delegation-unavailable
67
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase delegation-unavailable
69
68
  ```
70
69
 
71
70
  Then say once, in your own words, that this environment has no working subagents, so you
@@ -77,11 +76,22 @@ For the rest of this run, wherever a prompt tells you to spawn a subagent, read
77
76
  Before you ask the developer any setup question, finish every read-only investigation and
78
77
  preflight check in this section.
79
78
 
80
- Prepare two research assignments. Give each research subagent one assignment. Tell it to run
81
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read subagent/inspect-repository` first and follow the
82
- prompt it returns. If that read fails because the subagent cannot use the shell, stop that
83
- subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
84
- and the same handoff. Require only its assigned packet.
79
+ Prepare two research assignments. Before you spawn either subagent, run these two
80
+ read-only commands yourself, from the target project directory:
81
+
82
+ ```text
83
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard read subagent/inspect-repository
84
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard inspect --json
85
+ ```
86
+
87
+ Give each research subagent the prompt that the first command returns, the whole JSON that
88
+ the second command returns, and one assignment. Tell it that its handoff already holds both,
89
+ so it runs no onboarding command. A coding agent's permission layer can refuse a package
90
+ that runs from the registry inside a subagent, even where it lets you run the same command.
91
+ The run then waits for an approval that nobody sees. Require only its assigned packet.
92
+
93
+ Give the same JSON to every later subagent that this research spawns, such as a retry, a
94
+ focused directory check, or a conflict verifier.
85
95
 
86
96
  Start both research subagents in parallel:
87
97
 
@@ -92,8 +102,8 @@ Start both research subagents in parallel:
92
102
  The research is under way. Continue to the surface-control preflight while it runs:
93
103
 
94
104
  ```text
95
- npx --prefer-offline --yes copilotkit@4.23.1 onboard read research/preflight
105
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard read research/preflight
96
106
  ```
97
107
 
98
108
  If inspection stops onboarding, run
99
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read stopped/run-failed`.
109
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read stopped/run-failed`.
@@ -48,8 +48,14 @@ app directory. Both results must start with `Status: passed`. Otherwise, use the
48
48
  Read the next step only after `login --json` has emitted `type: completed`. If sign-in still
49
49
  waits on the developer, end your turn and wait for it: that is a pause.
50
50
 
51
+ Before you end your turn to wait for the developer, report the pause:
52
+
53
+ ```text
54
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
55
+ ```
56
+
51
57
  When both research results are merged and sign-in is done, run
52
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read research/route`.
58
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read research/route`.
53
59
 
54
60
  If inspection stops onboarding, run
55
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read stopped/run-failed`.
61
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read stopped/run-failed`.
@@ -27,8 +27,8 @@ Where the device probe found no booted device, that is the whole finding.
27
27
  Then merge the research:
28
28
 
29
29
  ```text
30
- npx --prefer-offline --yes copilotkit@4.23.1 onboard read research/merge
30
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard read research/merge
31
31
  ```
32
32
 
33
33
  If inspection stops onboarding, run
34
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read stopped/run-failed`.
34
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read stopped/run-failed`.
@@ -9,7 +9,7 @@ sends the run down one path.
9
9
  Before you route on, run this from the target app directory:
10
10
 
11
11
  ```text
12
- npx --prefer-offline --yes copilotkit@4.23.1 onboard protect
12
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard protect
13
13
  ```
14
14
 
15
15
  It reads the working tree itself, records every changed or untracked path with a digest,
@@ -44,7 +44,7 @@ On any one of them, run this before you read the three findings below, and witho
44
44
  the purpose question:
45
45
 
46
46
  ```text
47
- npx --prefer-offline --yes copilotkit@4.23.1 onboard read feature/channels/start
47
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard read feature/channels/start
48
48
  ```
49
49
 
50
50
  Name the provider to that node so it does not ask again. A `/slack` page names Slack. A
@@ -105,7 +105,7 @@ settle these three from your own reading of the project. Each one comes from the
105
105
  packets or it is not proved.
106
106
 
107
107
  If all three are proved, prove the live starting state before any project file changes. Run
108
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read proof/oss-baseline`.
108
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read proof/oss-baseline`.
109
109
 
110
110
  Route there before you ask the developer anything else. The questions after this prompt
111
111
  select a framework and a frontend that the findings already name, so a developer who
@@ -116,9 +116,16 @@ these three findings.
116
116
  For every other combination of the three, take one more step first. If neither the
117
117
  developer nor the repository findings prove what the project is for, ask one guided
118
118
  question about the user outcome. This asks what the developer wants to build before you
119
- select a framework. Give two or three short examples. Record the answer and give it to
120
- each later subagent. Then run
121
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read credentials/plan`.
119
+ select a framework. Give two or three short examples.
120
+
121
+ Before you end your turn to wait for the developer, report the pause:
122
+
123
+ ```text
124
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
125
+ ```
126
+
127
+ Record the answer and give it to each later subagent. Then run
128
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read credentials/plan`.
122
129
 
123
130
  Do not ask that question on the route above. A project carrying all three states its
124
131
  purpose in the application it already serves.
@@ -132,5 +139,5 @@ A purpose question here names a domain before that choice.
132
139
  Take the same read named above without asking.
133
140
 
134
141
  If authentication, inspection, or the baseline capture stops onboarding, run
135
- `npx --prefer-offline --yes copilotkit@4.23.1 onboard read stopped/run-failed`. None of them says anything
142
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard read stopped/run-failed`. None of them says anything
136
143
  about whether this project's stack is supported, which is not yet known at this point.
@@ -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.23.1 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.23.1 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,9 +147,76 @@ 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
+
156
+ If you cannot pass the key file to `init`, for example because a sandbox refuses the path,
157
+ clone without `--model-key-file`. Then copy the key from `<target>` with one command:
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`.
159
+ `<env file>` is `.env`, or `agent/.env` for the Microsoft Agent Framework Python starter.
160
+ The command writes the key into that file without printing it and protects the file. If the
161
+ command is refused too, ask the developer to run it. Give them exactly this one line:
162
+ `! cd <target> && npx --prefer-offline --yes copilotkit@4.25.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file>`.
163
+ The command needs no input. Without `!`, they run the same command in a terminal.
164
+ Do not write a `sed`, `grep`, or `cat` command to copy the key.
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
+
172
+ ### For a recorded local choice
173
+
174
+ If the run recorded the local deployment choice in `deployment/choose-local`, use this
175
+ command instead of the hosted command above. Do not ask the project questions above.
176
+ Local evaluation creates its own empty project, and `init --local` refuses `--create` and
177
+ `--project`.
178
+
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`
180
+
181
+ Use the model choice from `deployment/choose-local`. If the developer deferred it, keep
182
+ `--defer-model`. If the developer gave model settings, replace `--defer-model` with
183
+ `--model-config <private-file>`. Do not read or print that file. The CLI selects the latest
184
+ stable release. If the developer gave a candidate manifest for release testing, add
185
+ `--candidate <manifest.json>`. Otherwise, do not add it. The `--dir`, `--no-install` and `--model-key-file` rules
186
+ above apply here too.
187
+
188
+ If the developer chose guided model setup in `deployment/choose-local`, keep `--defer-model`.
189
+ After `init` reports the stack ready:
190
+
191
+ Ask the developer to run this command in their own terminal window, in `<target>`:
192
+
193
+ ```text
194
+ npx --prefer-offline --yes copilotkit@4.25.0 local setup
195
+ ```
196
+
197
+ Do not give it as a `!` line, and do not run it yourself. Its guided model prompt needs a
198
+ terminal, and a coding agent's shell has none. Without a terminal, the command stops and
199
+ changes nothing. The prompt asks for the model and its key, and it saves them privately.
200
+ On a running stack, it restarts only Learning. Do not ask for a model file.
201
+
202
+ Say that the run continues when they reply or resume this session. Report the pause with
203
+ `npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-model-credential`, end your
204
+ turn, and wait. When the developer replies, run
205
+ `npx --prefer-offline --yes copilotkit@4.25.0 local status --json` from `<target>` and read `learning.configuration`.
206
+
207
+ The command installs the local stack, then connects the starter to it. It writes the
208
+ gitignored `.copilotkit/local.json` stack reference and `.copilotkit/project.json` with the
209
+ local project. It writes `INTELLIGENCE_API_URL`, `INTELLIGENCE_GATEWAY_WS_URL`,
210
+ `CPK_INTELLIGENCE_API_KEY` and `SL_ENABLED` into `<target>/.env`. Later proof steps use
211
+ this local project. Do not run `project select`, and do not provision another key. The
212
+ output names the local dashboard URL. If you deferred the model, the output also says
213
+ `Learning configuration incomplete`. Report both lines to the developer.
214
+
215
+ ### What the command does
216
+
105
217
  The command clones the starter into the empty target directory. It also connects the
106
- starter to the developer's Intelligence project. The earlier login phase supplies the
107
- account. The command does not need terminal input.
218
+ starter to the developer's Intelligence project, or to the local stack for a local choice.
219
+ The earlier login phase supplies the account. The command does not need terminal input.
108
220
 
109
221
  Do not rebuild the starter by hand. Then inspect only the generated
110
222
  paths inside the target directory. Record the files, install result, project connection,
@@ -144,7 +256,7 @@ When you ask, name each variable and the file it goes in, and say that the run c
144
256
  when they reply or resume this session. Then report the pause and end your turn:
145
257
 
146
258
  ```text
147
- npx --prefer-offline --yes copilotkit@4.23.1 onboard checkpoint --phase awaiting-model-credential
259
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-model-credential
148
260
  ```
149
261
 
150
262
  This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
@@ -155,10 +267,40 @@ call.
155
267
 
156
268
  If no credential is missing, report no pause and continue.
157
269
 
158
- Then run `npx --prefer-offline --yes copilotkit@4.23.1 onboard read proof/round-trip`.
270
+ Then run `npx --prefer-offline --yes copilotkit@4.25.0 onboard read proof/round-trip`.
271
+
272
+ If the local command fails, `init` keeps the cloned starter in `<target>`. Do not run
273
+ `init` again, because the target is no longer empty. Do not delete the starter or the stack.
274
+ Report the exact error, and do not claim that the starter is ready. A failure that names
275
+ Docker is an environment blocker, not a broken run. For example, Docker is stopped or
276
+ missing, or `Docker available resources` is below 4 CPUs, 12 GiB RAM, or 40 GiB storage.
277
+ Tell the developer what to change in Docker. Then report the pause and end your turn:
278
+
279
+ ```text
280
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard checkpoint --phase awaiting-developer
281
+ ```
282
+
283
+ When the developer says that Docker is ready, resume from `<target>` with the same model
284
+ choice. If the run used a `--candidate`, add the same one:
285
+
286
+ ```text
287
+ npx --prefer-offline --yes copilotkit@4.25.0 local setup --defer-model --json
288
+ ```
289
+
290
+ If the run used model settings, replace `--defer-model` with `--model-config <private-file>`.
291
+ Read blockers and the recorded failed step. Do not delete or recreate a failed stack. After
292
+ setup reports the stack ready, connect the starter from `<target>`:
293
+
294
+ ```text
295
+ npx --prefer-offline --yes copilotkit@4.25.0 local connect --approve-connection --json
296
+ ```
297
+
298
+ The connection writes `.copilotkit/local.json`, `.copilotkit/project.json`, and the local
299
+ keys in `<target>/.env`. Then continue with the credential check above. If the resumed
300
+ setup fails again with an error that does not name Docker, take the route below.
159
301
 
160
302
  If the command fails, report its exact error and do not claim that the starter is ready.
161
303
  Then run
162
- `npx --prefer-offline --yes copilotkit@4.23.1 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
163
305
  graph ships and the stack was chosen from its own supported list, so a command that
164
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.23.1 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.23.1 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.23.1 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.23.1 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.23.1 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.23.1 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.23.1 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.23.1 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.23.1 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
@@ -103,10 +103,15 @@ A pass on `runtime-process-in-project` proves only that the process runs inside
103
103
  project. Ask the running agent which graph or agent ID it serves, and compare that with the
104
104
  expected agent ID from Step 1. If they differ, an older build still answers on the port.
105
105
  Report it, and stop it only under the rule below. The servers keep running after
106
- the proof. Then go to Step 5a.
106
+ the proof. Then go to Step 5a. On Windows, `runtime-process-in-project` is `undetermined` and
107
+ marked `advisory`, because the CLI cannot read Windows processes. The checks still pass. Ask
108
+ the agent ID question all the same.
107
109
 
108
110
  Otherwise sort `firstFailure`, and run the command again after each repair:
109
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.
110
115
  - `runtime-answers`: nothing answered, or the project records no runtime URL. When the
111
116
  record holds no URL, the command records one itself if exactly one port in the project
112
117
  answers as a runtime. So this failure means it found none, or more than one. Read the
@@ -114,7 +119,7 @@ Otherwise sort `firstFailure`, and run the command again after each repair:
114
119
  asking. Read the port from the log, not from the plan, and record it:
115
120
 
116
121
  ```text
117
- npx --prefer-offline --yes copilotkit@4.23.1 onboard runtime-url --url <runtime-url>
122
+ npx --prefer-offline --yes copilotkit@4.25.0 onboard runtime-url --url <runtime-url>
118
123
  ```
119
124
 
120
125
  `<runtime-url>` is the project's runtime URL, or the plan's, with its port replaced by the
@@ -129,8 +134,37 @@ Otherwise sort `firstFailure`, and run the command again after each repair:
129
134
  - `verify:intelligence_thread_routes`: usually a missing `identifyUser` where the runtime is
130
135
  constructed. Return it for implementation. Never remove a `mode: "single-route"` mount
131
136
  to satisfy it.
132
- - `round-trip:agent_answers` naming `user-not-identified`: this project's `identifyUser` reads a
133
- 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.
134
168
  - `round-trip:page_context_reaches_agent` at `fail`: the agent answered the plain request
135
169
  and recorded nothing for the request that carried context. Return it with its evidence as
136
170
  a failed proof step. At `undetermined` and marked `advisory`, the agent answered without
@@ -140,6 +174,7 @@ Otherwise sort `firstFailure`, and run the command again after each repair:
140
174
  still does not complete, prove the path in Step 5a, and report the check with its detail.
141
175
  - `round-trip:learning_container_assigned` at `fail`: the thread carries no container or
142
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.
143
178
  `features.self_learning` and `/info` are not evidence of an assignment.
144
179
  - `env-files-current`: the process it names started before its env file was written, and
145
180
  has to start again before a 401 means anything. Report it. Do not restart or stop it.
@@ -160,6 +195,11 @@ with a prefix rule for `curl`, run it again, and do not record a failed predicat
160
195
 
161
196
  ### Step 5a -- Prove that the page's data reaches the model
162
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
+
163
203
  `verify --round-trip` asks a question that needs no context. Where the frontend's files
164
204
  call a context hook, it also sends one token as context and reports
165
205
  `page_context_reaches_agent`, whose `pass` proves that the agent's model sees context at
@@ -217,7 +257,8 @@ to read.
217
257
  Read the registrations this project's frontend declares, by name. Step 5a already sent the
218
258
  step 1 request with those declarations, so read the tool calls out of the events Step 5a
219
259
  captured for the run carrying the page's unchanged context. Do not send that request again.
220
- 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
221
262
  to `<runtime>/agent/<agent id>/run`, carrying those declarations, and read the tool calls out
222
263
  of that run's own events. Where the Step 5a run carried none of those declarations, send
223
264
  that run once more with them, and read that run instead. Never report a wiring gap from a run
@@ -249,8 +290,10 @@ For a recorded `both-oss` starting state, this step has no component to render.
249
290
  same request the baseline recorded, require the same kind of user-visible result the
250
291
  baseline produced, and require that the thread for that request is listed in the drawer.
251
292
  Where this journey's frontend framework ships no threads drawer -- React Native --, prove
252
- that thread with `npx --prefer-offline --yes copilotkit@4.23.1 verify --round-trip`, which reads the
253
- 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.
254
297
 
255
298
  Use the surface control the main coding agent recorded for your environment. That finding
256
299
  is the answer, and there is nothing here for you to go looking for. Do not register a
@@ -277,7 +320,7 @@ limit can be ten minutes. You cannot interrupt a call while it runs, so the limi
277
320
  what you do after one. If a browser call took longer than 60 seconds to return, the browser
278
321
  control is unresponsive. Do not call the browser again in this attempt. A second call to a
279
322
  hung tool waits as long as the first one did. Run
280
- `npx --prefer-offline --yes copilotkit@4.23.1 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,
281
324
  and record the `frontend_assets_served` result. Report the outcome `failed` with the cause
282
325
  `browser-control-unresponsive`. The application is not at fault on this evidence: every
283
326
  step before the browser proved the runtime without one, and no repair to the project can
@@ -287,7 +330,7 @@ reach the tool.
287
330
  the page to finish loading. Do not retype the host, and do not substitute a URL a tool
288
331
  offers you by default. Where the page loads but its styling is missing or the chat
289
332
  control is dead, run
290
- `npx --prefer-offline --yes copilotkit@4.23.1 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`
291
334
  before you diagnose anything else. A dev server can serve its page and refuse every
292
335
  static chunk behind it, and on screen that is indistinguishable from a broken
293
336
  integration. The `frontend_assets_served` check tells the two apart.