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