copilotkit 4.22.0 → 4.23.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 (92) hide show
  1. package/README.md +390 -17
  2. package/cli-build-info.json +8 -8
  3. package/index.js +52224 -34474
  4. package/onboarding/index.json +83 -9
  5. package/onboarding/prompts/authenticate/start.md +44 -34
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +12 -7
  8. package/onboarding/prompts/credentials/plan.md +23 -23
  9. package/onboarding/prompts/credentials/settle-credentials.md +10 -7
  10. package/onboarding/prompts/credentials/write-plan.md +17 -7
  11. package/onboarding/prompts/deployment/choose-local.md +46 -0
  12. package/onboarding/prompts/deployment/local-evaluation.md +71 -0
  13. package/onboarding/prompts/fallback/best-effort.md +8 -8
  14. package/onboarding/prompts/feature/a2ui/implement.md +6 -6
  15. package/onboarding/prompts/feature/a2ui/plan.md +72 -0
  16. package/onboarding/prompts/feature/a2ui/proof.md +5 -5
  17. package/onboarding/prompts/feature/a2ui/start.md +11 -32
  18. package/onboarding/prompts/feature/channels/implement.md +23 -16
  19. package/onboarding/prompts/feature/channels/plan.md +85 -0
  20. package/onboarding/prompts/feature/channels/proof.md +5 -5
  21. package/onboarding/prompts/feature/channels/start.md +14 -41
  22. package/onboarding/prompts/feature/chat-suggestions/implement.md +6 -6
  23. package/onboarding/prompts/feature/chat-suggestions/plan.md +71 -0
  24. package/onboarding/prompts/feature/chat-suggestions/proof.md +5 -5
  25. package/onboarding/prompts/feature/chat-suggestions/start.md +11 -30
  26. package/onboarding/prompts/feature/complete.md +2 -2
  27. package/onboarding/prompts/feature/learning/implement.md +13 -13
  28. package/onboarding/prompts/feature/learning/plan.md +82 -0
  29. package/onboarding/prompts/feature/learning/proof.md +6 -6
  30. package/onboarding/prompts/feature/learning/start.md +11 -40
  31. package/onboarding/prompts/feature/open-generative-ui/implement.md +6 -6
  32. package/onboarding/prompts/feature/open-generative-ui/plan.md +70 -0
  33. package/onboarding/prompts/feature/open-generative-ui/proof.md +5 -5
  34. package/onboarding/prompts/feature/open-generative-ui/start.md +11 -30
  35. package/onboarding/prompts/feature/realtime-sync/implement.md +7 -7
  36. package/onboarding/prompts/feature/realtime-sync/plan.md +75 -0
  37. package/onboarding/prompts/feature/realtime-sync/proof.md +5 -5
  38. package/onboarding/prompts/feature/realtime-sync/start.md +10 -33
  39. package/onboarding/prompts/feature/rich-threads/implement.md +8 -8
  40. package/onboarding/prompts/feature/rich-threads/plan.md +77 -0
  41. package/onboarding/prompts/feature/rich-threads/proof.md +5 -5
  42. package/onboarding/prompts/feature/rich-threads/start.md +10 -35
  43. package/onboarding/prompts/feature/stop.md +3 -3
  44. package/onboarding/prompts/feature/voice/implement.md +6 -6
  45. package/onboarding/prompts/feature/voice/plan.md +74 -0
  46. package/onboarding/prompts/feature/voice/proof.md +5 -5
  47. package/onboarding/prompts/feature/voice/start.md +11 -29
  48. package/onboarding/prompts/framework/ag2.md +2 -2
  49. package/onboarding/prompts/framework/agno.md +2 -2
  50. package/onboarding/prompts/framework/built-in.md +2 -2
  51. package/onboarding/prompts/framework/claude-sdk-python.md +2 -2
  52. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  53. package/onboarding/prompts/framework/crewai-flows.md +2 -2
  54. package/onboarding/prompts/framework/custom-ag-ui.md +5 -2
  55. package/onboarding/prompts/framework/deep-agents.md +2 -2
  56. package/onboarding/prompts/framework/google-adk.md +2 -2
  57. package/onboarding/prompts/framework/langgraph-fastapi.md +2 -2
  58. package/onboarding/prompts/framework/langgraph-python.md +2 -2
  59. package/onboarding/prompts/framework/langgraph-typescript.md +2 -2
  60. package/onboarding/prompts/framework/llamaindex.md +2 -2
  61. package/onboarding/prompts/framework/mastra.md +2 -2
  62. package/onboarding/prompts/framework/ms-agent-dotnet.md +3 -3
  63. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +3 -3
  64. package/onboarding/prompts/framework/ms-agent-python.md +2 -2
  65. package/onboarding/prompts/framework/pydantic-ai.md +2 -2
  66. package/onboarding/prompts/framework/strands-python.md +2 -2
  67. package/onboarding/prompts/framework/strands-typescript.md +2 -2
  68. package/onboarding/prompts/frontend/angular.md +3 -3
  69. package/onboarding/prompts/frontend/nextjs.md +3 -3
  70. package/onboarding/prompts/frontend/plan.md +7 -7
  71. package/onboarding/prompts/frontend/react-native.md +2 -2
  72. package/onboarding/prompts/frontend/react-spa.md +2 -2
  73. package/onboarding/prompts/frontend/vue.md +2 -2
  74. package/onboarding/prompts/implementation/build-and-validate.md +14 -13
  75. package/onboarding/prompts/proof/complete.md +3 -3
  76. package/onboarding/prompts/proof/oss-baseline.md +5 -5
  77. package/onboarding/prompts/proof/round-trip.md +16 -11
  78. package/onboarding/prompts/research/gather.md +9 -8
  79. package/onboarding/prompts/research/merge.md +6 -3
  80. package/onboarding/prompts/research/preflight.md +2 -2
  81. package/onboarding/prompts/research/route.md +22 -14
  82. package/onboarding/prompts/starter/clone.md +5 -5
  83. package/onboarding/prompts/stopped/run-failed.md +2 -2
  84. package/onboarding/prompts/subagent/create-plan.md +9 -2
  85. package/onboarding/prompts/subagent/implement-and-validate.md +34 -2
  86. package/onboarding/prompts/subagent/inspect-repository.md +1 -1
  87. package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
  88. package/onboarding/prompts/subagent/prove-round-trip.md +39 -21
  89. package/onboarding/prompts/unsupported/no-validated-path.md +2 -2
  90. package/package.json +4 -1
  91. package/release/release-tool.js +167 -18
  92. package/services/local-auth-worker.js +21465 -0
@@ -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.22.0 onboard protect
12
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard protect
13
13
  ```
14
14
 
15
15
  It reads the working tree itself, records every changed or untracked path with a digest,
@@ -31,28 +31,36 @@ route at the end of this prompt.
31
31
 
32
32
  ## Route a named Channel before the findings
33
33
 
34
- The prompt the developer copied names the docs page it came from. A Slack or Teams docs
35
- page names the surface this run is for. So does a developer who has already said Slack or
36
- Microsoft Teams. Either one settles the frontend.
34
+ The prompt the developer copied names the docs page it came from. A CopilotKit docs page
35
+ under `/channels`, `/slack`, or `/teams` names a Channel. So does a run that follows the
36
+ `channels-setup` skill, which `copilotkit channels setup` installs in the project. The
37
+ prompt that command prints names no page. So does a developer who asks for a Channel,
38
+ Slack, or Microsoft Teams in their own words. Any one of these settles the frontend.
37
39
 
38
- Record that docs page and give it to every later node and subagent. The copied prompt is
39
- the only carrier of the surface the developer wants, and no flag states it.
40
+ Record that page or request and give it to every later node and subagent. No flag states
41
+ the surface the developer wants, so this record is its only carrier.
40
42
 
41
- On either, run this before you read the three findings below, and without asking the
42
- purpose question:
43
+ On any one of them, run this before you read the three findings below, and without asking
44
+ the purpose question:
43
45
 
44
46
  ```text
45
- npx --prefer-offline --yes copilotkit@4.22.0 onboard read feature/channels/start
47
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard read feature/channels/start
46
48
  ```
47
49
 
48
- Name the provider to that node so it does not ask again. A Slack page names Slack. A Teams
49
- page names Teams.
50
+ Name the provider to that node so it does not ask again. A `/slack` page names Slack. A
51
+ `/teams` page names Teams. A request that names no provider leaves that question to the
52
+ node.
50
53
 
51
54
  Take this route whatever the three findings prove. An agent, a frontend and a CopilotKit
52
55
  integration are a valid start for a Channel, not a reason to convert the application: the
53
56
  run keeps that code as it is and wires a managed Channel onto it. Do not send a Channel
54
57
  request to the conversion route.
55
58
 
59
+ Nothing else names a Channel. A project with its own channels, bots, or coworkers does not
60
+ ask for one. A repository the developer asked you to clone does not ask for one either.
61
+ Without one of the requests above, read the findings below. `frontend/plan` offers Slack
62
+ and Microsoft Teams when the project has no frontend.
63
+
56
64
  ## What the merged findings must contain
57
65
 
58
66
  If a repository file exists, each finding must cite it. For an empty project, the subagents
@@ -97,7 +105,7 @@ settle these three from your own reading of the project. Each one comes from the
97
105
  packets or it is not proved.
98
106
 
99
107
  If all three are proved, prove the live starting state before any project file changes. Run
100
- `npx --prefer-offline --yes copilotkit@4.22.0 onboard read proof/oss-baseline`.
108
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read proof/oss-baseline`.
101
109
 
102
110
  Route there before you ask the developer anything else. The questions after this prompt
103
111
  select a framework and a frontend that the findings already name, so a developer who
@@ -110,7 +118,7 @@ developer nor the repository findings prove what the project is for, ask one gui
110
118
  question about the user outcome. This asks what the developer wants to build before you
111
119
  select a framework. Give two or three short examples. Record the answer and give it to
112
120
  each later subagent. Then run
113
- `npx --prefer-offline --yes copilotkit@4.22.0 onboard read credentials/plan`.
121
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read credentials/plan`.
114
122
 
115
123
  Do not ask that question on the route above. A project carrying all three states its
116
124
  purpose in the application it already serves.
@@ -124,5 +132,5 @@ A purpose question here names a domain before that choice.
124
132
  Take the same read named above without asking.
125
133
 
126
134
  If authentication, inspection, or the baseline capture stops onboarding, run
127
- `npx --prefer-offline --yes copilotkit@4.22.0 onboard read stopped/run-failed`. None of them says anything
135
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read stopped/run-failed`. None of them says anything
128
136
  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.22.0 project list --json`
58
+ `npx --prefer-offline --yes copilotkit@4.23.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
@@ -84,7 +84,7 @@ Do not inspect another entry in the parent directory. Replace each placeholder w
84
84
  recorded value. Do not run a placeholder as a shell argument. If the path holds a space,
85
85
  put it in double quotes.
86
86
 
87
- `npx --prefer-offline --yes copilotkit@4.22.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
87
+ `npx --prefer-offline --yes copilotkit@4.23.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
88
88
 
89
89
  `--dir` is always the absolute path of the target directory. `init` builds the app in that
90
90
  directory and gives the app the directory's name. Do not add `--name`: `init` refuses
@@ -144,7 +144,7 @@ When you ask, name each variable and the file it goes in, and say that the run c
144
144
  when they reply or resume this session. Then report the pause and end your turn:
145
145
 
146
146
  ```text
147
- npx --prefer-offline --yes copilotkit@4.22.0 onboard checkpoint --phase awaiting-model-credential
147
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard checkpoint --phase awaiting-model-credential
148
148
  ```
149
149
 
150
150
  This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
@@ -155,10 +155,10 @@ call.
155
155
 
156
156
  If no credential is missing, report no pause and continue.
157
157
 
158
- Then run `npx --prefer-offline --yes copilotkit@4.22.0 onboard read proof/round-trip`.
158
+ Then run `npx --prefer-offline --yes copilotkit@4.23.0 onboard read proof/round-trip`.
159
159
 
160
160
  If the command fails, report its exact error and do not claim that the starter is ready.
161
161
  Then run
162
- `npx --prefer-offline --yes copilotkit@4.22.0 onboard read stopped/run-failed`. The starter is one this
162
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read stopped/run-failed`. The starter is one this
163
163
  graph ships and the stack was chosen from its own supported list, so a command that
164
164
  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.22.0 onboard resume --message "<approval>"
44
+ npx --prefer-offline --yes copilotkit@4.23.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.22.0 onboard friction --phase stop --category <slug> --message "<sentences>"
67
+ npx --prefer-offline --yes copilotkit@4.23.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
@@ -12,6 +12,13 @@ the documentation example differs from that purpose, the project wins.
12
12
  Read only inside the project directory. Answer an API question from the documentation
13
13
  URLs you were given, not from another checkout on this machine.
14
14
 
15
+ The main coding agent also gives you the findings of the framework route, such as how the
16
+ agent connects or whether a subclass needs a `clone()` override. Some of those rules, such
17
+ as the `clone()` override, are on no documentation page. Use the findings of the framework
18
+ route as they are. Do not confirm them again from the source of an installed package. Read
19
+ the project's own code only to apply them, for example to find the fields that a `clone()`
20
+ override copies.
21
+
15
22
  List the required credential variable names. Do not read or return credential values.
16
23
  Preserve each agent or frontend that already exists.
17
24
 
@@ -87,7 +94,7 @@ against a dead host, and the failure arrives as an empty-body 404 with no cause
87
94
  Ask the CLI for the dependency upgrade, from the target directory:
88
95
 
89
96
  ```text
90
- npx --prefer-offline --yes copilotkit@4.22.0 onboard upgrade-plan --json
97
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard upgrade-plan --json
91
98
  ```
92
99
 
93
100
  It reads the installed tree and the registry. Read `status`:
@@ -169,7 +176,7 @@ here is work the developer did not ask for.
169
176
  Plan the threads drawer itself: add it from the selected drawer page, where this frontend
170
177
  does not already render one. Where this journey's frontend framework ships no threads
171
178
  drawer -- React Native --, plan that the thread is proved by
172
- `npx --prefer-offline --yes copilotkit@4.22.0 verify --round-trip`, which needs no browser. Do not plan a
179
+ `npx --prefer-offline --yes copilotkit@4.23.0 verify --round-trip`, which needs no browser. Do not plan a
173
180
  step that opens the managed Intelligence dashboard.
174
181
 
175
182
  ## Name the files the run writes itself
@@ -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.22.0 onboard upgrade-plan --check --json
118
+ npx --prefer-offline --yes copilotkit@4.23.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.22.0 onboard upgrade-plan --revert --json
133
+ npx --prefer-offline --yes copilotkit@4.23.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
@@ -169,6 +169,38 @@ constructor for it, and never write an id the plan does not name: a selector poi
169
169
  id the platform does not hold answers `LEARNING_CONTAINER_NOT_FOUND` on every thread create.
170
170
  Where the plan names no container, write no selector.
171
171
 
172
+ ## Install the CopilotKit Skills
173
+
174
+ The main coding agent gives you the developer's answer on the Skills install. Where the
175
+ whole-plan implementation handoff carries no answer, read the approved plan. Approving the
176
+ plan without a word on the Skills approves the install. A repair handoff that carries no
177
+ Skills answer never installs them.
178
+
179
+ Where `.agents/skills` already holds the CopilotKit skills, do not install them again.
180
+ Report that they are in place.
181
+
182
+ Install the Skills only when the developer approved them. Where the developer declined
183
+ them, do not install them, and do not call that a change from the plan. Report in the
184
+ Validation section that the developer declined them.
185
+
186
+ Install them after you run the full validation list. Tell the developer what the skills
187
+ install writes into this project before you run it: a `.agents/skills` directory holding
188
+ one folder per CopilotKit skill, linked into `.claude/skills`. Both sit in the working tree,
189
+ so the install shows up in `git status` and can land in a commit. You cannot know whether
190
+ this project keeps those directories in version control, so name them before you write them
191
+ rather than after.
192
+
193
+ Then run `npx skills add CopilotKit/CopilotKit/skills -y` in the target app directory.
194
+
195
+ The plan names both directories under `Files the run writes itself`, so they are not
196
+ departures. Name them under Files changed. Do not register an MCP server: the Skills read
197
+ the CopilotKit documentation without one.
198
+
199
+ Check whether the install succeeded, and record the command result in the Validation
200
+ section. A failed install does not change your status. Report it and continue.
201
+
202
+ ## Report the result
203
+
172
204
  Report the runtime constructor you wrote. Name whether it passes `intelligence` or
173
205
  `runner`, and whether it carries `getLearningContainerId`, with the id it returns.
174
206
  A runtime built with `runner` is the SSE runtime and never reads the credential,
@@ -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.22.0 onboard inspect --json
10
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard inspect --json
11
11
  ```
12
12
 
13
13
  It answers the deterministic half of both packets exactly, from the same code
@@ -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.22.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
35
+ `npx --prefer-offline --yes copilotkit@4.23.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
@@ -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.22.0 onboard proof-check --json
81
+ npx --prefer-offline --yes copilotkit@4.23.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
@@ -107,13 +107,14 @@ the proof. Then go to Step 5a.
107
107
 
108
108
  Otherwise sort `firstFailure`, and run the command again after each repair:
109
109
 
110
- - `runtime-answers`: nothing answered, or the project records no runtime URL. Read the
110
+ - `runtime-answers`: nothing answered, or the project records no runtime URL. When the
111
+ record holds no URL, the command records one itself if exactly one port in the project
112
+ answers as a runtime. So this failure means it found none, or more than one. Read the
111
113
  server log it names. A dev server whose port is taken moves to the next free one without
112
- asking, and a starter's project records no URL until its server binds a port. Read the
113
- port from the log, not from the plan, and record it:
114
+ asking. Read the port from the log, not from the plan, and record it:
114
115
 
115
116
  ```text
116
- npx --prefer-offline --yes copilotkit@4.22.0 onboard runtime-url --url <runtime-url>
117
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard runtime-url --url <runtime-url>
117
118
  ```
118
119
 
119
120
  `<runtime-url>` is the project's runtime URL, or the plan's, with its port replaced by the
@@ -171,14 +172,19 @@ record it invented, and the first thing to notice is a card in a screenshot.
171
172
  Where this journey shares page data with the agent, prove that path here. Read the context
172
173
  entries this project's frontend publishes, from its own context call. Read the tool
173
174
  declarations it registers as well, and carry both the way the page carries them, so that
174
- the agent sees the request the browser sends rather than a thinner one. Send the same run
175
+ the agent sees the request the browser sends rather than a thinner one. Read them from the
176
+ files the main coding agent named in the handoff, and search the project only for a file it
177
+ did not name. Do not search the dependencies for the shape of an entry: the page's own call
178
+ shows it. Send the same run
175
179
  body twice, to `<runtime>/agent/<agent id>/run`: once carrying the context entries the page
176
180
  publishes, and once carrying the same entries with one value changed. Use the step 1
177
181
  request both times. Record the streamed events from each, and name both capture paths.
178
182
 
179
183
  For the changed run, pick one record the step 1 request matches. Add a marker to a text
180
- field that the answer repeats, such as its title or name:
181
- ` [probe-<8 random hex characters>]`. Choose a new marker for each run, record it, and
184
+ field that the answer repeats and that the step 1 request does not quote, such as its title
185
+ or name: ` [probe-<8 random hex characters>]`. A model can copy text the request carries
186
+ from the request rather than from the context, so a marker there proves nothing. Where the
187
+ request quotes every text field of that record, add the marker to its id. Choose a new marker for each run, record it, and
182
188
  change nothing else. Do not remove the entry or send `context: []` instead. The page always
183
189
  sends its entries. A model with a request about records, a tool that needs them, and
184
190
  nothing to copy invents records. That failure belongs to the probe, not to the integration.
@@ -208,9 +214,14 @@ frontend does not know falls to a surface nothing draws. Neither writes anything
208
214
  browser console, so the browser step reports a finished turn, a blank card, and no error
209
215
  to read.
210
216
 
211
- Read the registrations this project's frontend declares, by name. Send the step 1 request
212
- to the route step 5a used, carrying those declarations, and read the tool calls out of
213
- that run's own events. The agent has to call one of the names the frontend registered. An
217
+ Read the registrations this project's frontend declares, by name. Step 5a already sent the
218
+ step 1 request with those declarations, so read the tool calls out of the events Step 5a
219
+ 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
221
+ to `<runtime>/agent/<agent id>/run`, carrying those declarations, and read the tool calls out
222
+ of that run's own events. Where the Step 5a run carried none of those declarations, send
223
+ that run once more with them, and read that run instead. Never report a wiring gap from a run
224
+ that carried no declarations: the agent has no component to call in it. The agent has to call one of the names the frontend registered. An
214
225
  agent that calls nothing, or calls a name no registration matches, is a wiring gap for
215
226
  implementation to close rather than a proof repair. Return the name and the frontend file
216
227
  you read, before the browser.
@@ -238,7 +249,7 @@ For a recorded `both-oss` starting state, this step has no component to render.
238
249
  same request the baseline recorded, require the same kind of user-visible result the
239
250
  baseline produced, and require that the thread for that request is listed in the drawer.
240
251
  Where this journey's frontend framework ships no threads drawer -- React Native --, prove
241
- that thread with `npx --prefer-offline --yes copilotkit@4.22.0 verify --round-trip`, which reads the
252
+ that thread with `npx --prefer-offline --yes copilotkit@4.23.0 verify --round-trip`, which reads the
242
253
  answer back off the thread and needs no browser. Record which of the two you proved.
243
254
 
244
255
  Use the surface control the main coding agent recorded for your environment. That finding
@@ -266,7 +277,7 @@ limit can be ten minutes. You cannot interrupt a call while it runs, so the limi
266
277
  what you do after one. If a browser call took longer than 60 seconds to return, the browser
267
278
  control is unresponsive. Do not call the browser again in this attempt. A second call to a
268
279
  hung tool waits as long as the first one did. Run
269
- `npx --prefer-offline --yes copilotkit@4.22.0 verify --frontend-url <the frontendUrl the proof checks resolved> --json` once,
280
+ `npx --prefer-offline --yes copilotkit@4.23.0 verify --frontend-url <the frontendUrl the proof checks resolved> --json` once,
270
281
  and record the `frontend_assets_served` result. Report the outcome `failed` with the cause
271
282
  `browser-control-unresponsive`. The application is not at fault on this evidence: every
272
283
  step before the browser proved the runtime without one, and no repair to the project can
@@ -276,7 +287,7 @@ reach the tool.
276
287
  the page to finish loading. Do not retype the host, and do not substitute a URL a tool
277
288
  offers you by default. Where the page loads but its styling is missing or the chat
278
289
  control is dead, run
279
- `npx --prefer-offline --yes copilotkit@4.22.0 verify --frontend-url <the url you opened> --json`
290
+ `npx --prefer-offline --yes copilotkit@4.23.0 verify --frontend-url <the url you opened> --json`
280
291
  before you diagnose anything else. A dev server can serve its page and refuse every
281
292
  static chunk behind it, and on screen that is indistinguishable from a broken
282
293
  integration. The `frontend_assets_served` check tells the two apart.
@@ -388,18 +399,25 @@ Step 9 can write only the tool files named by its guide or by this step.
388
399
  Fetch the continued-development guide from the main coding agent with the proof
389
400
  documentation. Try the continued-development tools after the application passes proof.
390
401
 
402
+ The implementation subagent installs the Skills when the developer approved them. Check that
403
+ it did. Look for the `.agents/skills` directory and the `.claude/skills` links in this
404
+ project, and read the Skills result the implementation reported. Do not install them again.
405
+
406
+ Where the developer declined them, do not install them, and do not call that a change from
407
+ the plan. Report the command for them to run later instead:
408
+ `npx skills add CopilotKit/CopilotKit/skills -y`.
409
+
410
+ Where the developer approved them and they are missing, install them as a recovery step.
391
411
  Tell the developer what the skills install writes into this project before you run it: a
392
412
  `.agents/skills` directory holding one folder per CopilotKit skill, linked into
393
413
  `.claude/skills`. Both sit in the working tree, so the install shows up in `git status`
394
414
  and can land in a commit. You cannot know whether this project keeps those directories in
395
- version control, so name them before you write them rather than after.
396
-
397
- Install the Skills only when the approved plan includes them. Where the developer declined
398
- them, do not install them, and do not call that a change from the plan. Report the command
399
- for them to run later instead: `npx skills add CopilotKit/CopilotKit/skills -y`.
415
+ version control, so name them before you write them rather than after. Then run
416
+ `npx skills add CopilotKit/CopilotKit/skills -y` to install the
417
+ project-scoped CopilotKit Skills. Record that the proof ran the install because the
418
+ implementation did not.
400
419
 
401
- Use it to install the project-scoped CopilotKit Skills. Do not register an MCP server: the
402
- Skills read the CopilotKit documentation without one.
420
+ Do not register an MCP server: the Skills read the CopilotKit documentation without one.
403
421
 
404
422
  Check whether the install succeeded and record what you found. Record the command result.
405
423
  Report the Skills result separately from the proof result. A tool error does not change 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.22.0 onboard read fallback/best-effort`.
33
+ `npx --prefer-offline --yes copilotkit@4.23.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.22.0 onboard friction --phase stop --category <slug> --message "<sentences>"
39
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard friction --phase stop --category <slug> --message "<sentences>"
40
40
  ```
41
41
 
42
42
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "copilotkit",
3
- "version": "4.22.0",
3
+ "version": "4.23.0",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=20.9.0"
@@ -16,5 +16,8 @@
16
16
  "optionalDependencies": {
17
17
  "@microsoft/teams.cli": "3.0.3"
18
18
  },
19
+ "dependencies": {
20
+ "oidc-provider": "9.12.2"
21
+ },
19
22
  "license": "SEE LICENSE IN LICENSE"
20
23
  }