copilotkit 4.9.2 → 4.9.17

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 (47) hide show
  1. package/README.md +13 -12
  2. package/cli-build-info.json +8 -8
  3. package/index.js +1879 -685
  4. package/onboarding/index.json +15 -0
  5. package/onboarding/prompts/authenticate/start.md +180 -71
  6. package/onboarding/prompts/conversion/plan.md +103 -0
  7. package/onboarding/prompts/credentials/finalize-plan.md +105 -135
  8. package/onboarding/prompts/credentials/plan.md +42 -25
  9. package/onboarding/prompts/fallback/best-effort.md +107 -16
  10. package/onboarding/prompts/framework/ag2.md +8 -19
  11. package/onboarding/prompts/framework/agno.md +12 -20
  12. package/onboarding/prompts/framework/built-in.md +4 -14
  13. package/onboarding/prompts/framework/claude-sdk-python.md +8 -18
  14. package/onboarding/prompts/framework/claude-sdk-typescript.md +10 -20
  15. package/onboarding/prompts/framework/crewai-flows.md +31 -27
  16. package/onboarding/prompts/framework/deep-agents.md +10 -20
  17. package/onboarding/prompts/framework/google-adk.md +4 -16
  18. package/onboarding/prompts/framework/langgraph-fastapi.md +4 -16
  19. package/onboarding/prompts/framework/langgraph-python.md +4 -16
  20. package/onboarding/prompts/framework/langgraph-typescript.md +4 -16
  21. package/onboarding/prompts/framework/llamaindex.md +8 -19
  22. package/onboarding/prompts/framework/mastra.md +4 -16
  23. package/onboarding/prompts/framework/ms-agent-dotnet.md +19 -50
  24. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +24 -36
  25. package/onboarding/prompts/framework/ms-agent-python.md +4 -16
  26. package/onboarding/prompts/framework/pydantic-ai.md +27 -26
  27. package/onboarding/prompts/framework/strands-python.md +9 -18
  28. package/onboarding/prompts/framework/strands-typescript.md +10 -18
  29. package/onboarding/prompts/frontend/angular.md +22 -19
  30. package/onboarding/prompts/frontend/nextjs.md +6 -16
  31. package/onboarding/prompts/frontend/plan.md +9 -14
  32. package/onboarding/prompts/frontend/react-native.md +11 -14
  33. package/onboarding/prompts/frontend/react-spa.md +5 -15
  34. package/onboarding/prompts/frontend/vue.md +12 -14
  35. package/onboarding/prompts/implementation/build-and-validate.md +61 -101
  36. package/onboarding/prompts/proof/complete.md +24 -5
  37. package/onboarding/prompts/proof/oss-baseline.md +15 -50
  38. package/onboarding/prompts/proof/round-trip.md +96 -271
  39. package/onboarding/prompts/starter/clone.md +4 -4
  40. package/onboarding/prompts/subagent/create-plan.md +49 -11
  41. package/onboarding/prompts/subagent/implement-and-validate.md +71 -51
  42. package/onboarding/prompts/subagent/inspect-repository.md +38 -9
  43. package/onboarding/prompts/subagent/prove-oss-baseline.md +2 -1
  44. package/onboarding/prompts/subagent/prove-round-trip.md +154 -51
  45. package/onboarding/prompts/unsupported/no-validated-path.md +10 -2
  46. package/package.json +1 -1
  47. package/release/release-tool.js +1 -1
@@ -1,65 +1,85 @@
1
1
  # Implement and validate the approved plan
2
2
 
3
- Use only the approved plan and the selected documentation URLs. Fetch every URL in one
4
- step, before you change the project, rather than one after another.
5
- Do not use remembered CopilotKit instructions.
3
+ Implement every step of the approved plan in plan order, and run the full validation list.
4
+ Do not repeat the full repository inspection.
6
5
 
7
- A fetch tool that refuses a URL, or fails to reach it, reports a limit of the tool and
8
- not a fact about the page. Retrieve the same URL a second way before you judge it. Run
9
- `curl -fsSL <url>`, or read the same page without the `.md` suffix. Report a
10
- documentation gap only after a second method also fails.
6
+ Do not change a protected path.
7
+ Do not change a path that overlaps a protected path. Paths overlap when they are equal or
8
+ either path is an ancestor directory on a path-segment boundary. `apps/a` overlaps
9
+ `apps/a/src`, but not `apps/ab`. `app.ts` does not overlap `app.tsx`.
10
+
11
+ Change only the files and directories the approved plan names as changeable. If the work
12
+ requires a file the plan does not name, stop and return the blocker. Do not run a
13
+ repository-wide formatter.
14
+
15
+ Before validation, read the protected path list. Inspect the current changed and untracked
16
+ paths. Keep protected paths out of the run path set. Compare every changed path with the
17
+ paths the plan named. Here, a changed path means one in the run path set. If a changed path
18
+ is outside them, return `Status: blocked` before validation. Run the approved validation
19
+ commands one at a time. Fix validation and proof defects only in the paths the plan named.
20
+
21
+ Use only the approved plan and the selected documentation URLs. Follow the documentation
22
+ policy the main coding agent gives you before you change the project.
11
23
 
12
24
  Add only the props, options, and imports that appear in the fetched documentation. A
13
25
  remembered API from an earlier CopilotKit version will fail type checking against this
14
- release, so do not decorate a documented example with anything it does not show.
26
+ release. Do not add details that the fetched documentation omits.
15
27
 
16
- The documentation supplies the wiring. The project supplies the application. That rule
17
- governs props, options, and imports, and it stops there. A documentation example names a
18
- domain of its own to make itself readable. Build what the plan names, in the project's
19
- own domain, from the wiring the page shows. Do not carry the page's example domain into
20
- the project: not its agent name, not its tools, not its data.
28
+ The documentation supplies the wiring. The project supplies the application. Use that
29
+ wiring in the project's domain. Do not copy an example's agent name, tools, or data.
21
30
 
22
- Preserve each agent or frontend that already exists. Add only the missing parts and the
23
- CopilotKit connection. Do not read, show, store, or return secret values. Do not read a
24
- file outside the project directory: not for a credential, and not for an API question the
25
- fetched documentation answers. A missing credential is the main coding agent's to ask
26
- for.
31
+ Preserve each existing agent and frontend. Add only missing parts and the CopilotKit
32
+ connection. Do not read, show, store, or return secrets. Do not read a file outside the
33
+ project directory: not for a credential, and not for an API question the fetched
34
+ documentation answers. Ask the main coding agent for a missing credential.
35
+
36
+ An existing `README.md` is the developer's, not this run's. Leave it exactly as you found
37
+ it: not the title, not a section, not a line. Where this run has documentation to write,
38
+ write it to a new file and name that file when you report the result. On an empty project
39
+ the README is the whole of the brief -- the only place the developer said what they
40
+ wanted, and the thing they read this run's result against -- so the rule binds hardest
41
+ where the file looks emptiest.
27
42
 
28
43
  For a recorded `both-oss` baseline, preserve the existing agent, frontend, CopilotKit
29
- integration, user-visible request, and runtime behavior. Do not replace the existing
30
- persistence. Change only the approved project selection, the approved CopilotKit
31
- dependency upgrade, and the Intelligence runtime wiring.
32
- Run the recorded baseline checks again after the Intelligence wiring and report any
33
- regression.
34
-
35
- Apply the planned CopilotKit dependency upgrade before you wire Intelligence, as its own
36
- step, and record each version it changed. Then re-run the recorded baseline checks. A
37
- regression at this point can only be the upgrade, which is why it is checked here rather
38
- than after the wiring.
39
-
40
- If the baseline regresses, restore the manifest and lockfile to their recorded state,
41
- leave Intelligence unwired, and report the regression with the failing check. A
42
- half-upgraded project with no working chat is worse than the one this run was given, and
43
- finishing the wiring on top of a broken baseline hides which change broke it.
44
-
45
- Report each `@copilotkit/*` version before and after the upgrade. Where the plan named no
46
- dependency change, say that the installed versions already met the floor.
47
-
48
- When the documentation creates the frontend with the framework's own scaffolder,
44
+ integration, user-visible request, runtime behavior, and persistence. Do not replace the
45
+ existing persistence. Change only the approved project selection, CopilotKit dependency
46
+ upgrade, Intelligence runtime wiring, and the approved threads drawer: the drawer belongs
47
+ in that list because the approved plan already named it, not because this step invents a
48
+ new one. After wiring, run the recorded baseline checks and report any regression.
49
+
50
+ Where the plan names a CopilotKit dependency upgrade:
51
+
52
+ 1. Apply the planned CopilotKit dependency upgrade before you wire Intelligence.
53
+ 2. Report each `@copilotkit/*` version before and after the upgrade.
54
+ 3. Then re-run the recorded baseline checks.
55
+
56
+ If the baseline regresses, restore the manifest and lockfile to their recorded state, leave
57
+ Intelligence unwired, and report the regression with the failing check. Stop. Where the plan
58
+ names no dependency change, report that the installed versions met the floor.
59
+
60
+ When the documentation uses the framework's scaffolder,
49
61
  run that scaffolder rather than hand-authoring what it emits.
50
- Do not re-declare a compiler option it set. Every real project of that framework
51
- inherits those defaults, so a hand-written replacement measures a configuration no
52
- developer has. Where the plan needs configuration the scaffolder did not write,
53
- extend the scaffolder's file and set only what you add.
62
+ Do not re-declare a compiler option it set.
63
+ If the plan needs more configuration, extend the scaffolder's file and set only what you add.
64
+
65
+ Where the plan names data the project already holds, share that data with the agent through
66
+ the documented context API. Tell the agent to refuse to answer about entities the shared
67
+ context does not carry and to name what is missing.
68
+
69
+ An empty context set is a condition to state rather than an input to work around. Keep
70
+ these two cases apart in the instructions you write. The context set holds no records:
71
+ the answer says the page sent none. The context set holds records and none of them match
72
+ the request: the answer says the request names something the page does not hold, and
73
+ names what the page did send. An agent that runs the two together reads an empty page as
74
+ a page to fill in.
54
75
 
55
- Where the plan names data the project already holds, share that data with the agent
56
- through the context API the selected documentation names for this frontend. Then write the agent's instructions to
57
- refuse to answer about entities the shared context does not carry, and to name what is
58
- missing instead. An agent with no context and no refusal invents plausible entities, and
59
- no part of the run errors.
76
+ Where a tool renders one of those records, take every field of the record from the
77
+ context set. A field the model is allowed to fill is a field it fills, so an optional
78
+ field on that tool's schema turns an empty context set into a well-formed record the
79
+ project does not hold, and the rendered result looks the same either way.
60
80
 
61
- Run the validation commands from the approved plan. Record the changed files, command
62
- results, and each error. Do not claim that the real user journey works in this phase.
81
+ Run the full validation list. Record changed files, command results, and errors. Do not
82
+ claim that the real user journey works in this phase.
63
83
 
64
84
  Report the runtime constructor you wrote. Name whether it passes `intelligence` or
65
85
  `runner`. A runtime built with `runner` is the SSE runtime and never reads the credential,
@@ -69,5 +89,5 @@ Gather what you need in as few commands as possible. Combine independent reads i
69
89
  command rather than running them one at a time. Split a command only when its result decides
70
90
  what you run next.
71
91
 
72
- Return the implementation result and validation evidence to the main coding agent. Stop
73
- after you return the result.
92
+ Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
93
+ Return exactly four sections: Status, Files changed, Validation, and Blockers. Stop.
@@ -1,18 +1,41 @@
1
1
  # Inspect the repository
2
2
 
3
- Inspect the repository without changing it. Find evidence for:
3
+ Work only on the packet you were assigned. Inspect the repository without changing it.
4
+
5
+ ## Project evidence packet
6
+
7
+ Find evidence for:
4
8
 
5
9
  - what the project is for, in the project's own words
6
- - any existing agent framework
7
- - any existing frontend
8
- - current CopilotKit packages and configuration
10
+ - the target app or runtime directory that owns `.env` and the CopilotKit setup
11
+ - whether the target project directory contains any entries
12
+ - any existing agent framework and frontend
13
+ - current CopilotKit integration and configuration, including whether
14
+ `.copilotkit/project.json` has `projectId`, `projectSlug`, and `clerkOrgId`
9
15
  - authentication boundaries
10
- - names of required credential variables, without reading their values
16
+ - initial changed and untracked paths, without file contents
17
+
18
+ Return the initial changed and untracked paths as paths only. Do not return their
19
+ contents. Do not retain a before-state for them. The CLI captures the baseline that the
20
+ protected-path audit compares against, so nothing later in the run depends on this
21
+ subagent still existing, and a path that can hold secrets is captured as a digest you
22
+ never read.
23
+
24
+ ## Environment evidence packet
25
+
26
+ - names of required credential variables and whether `.env` has a non-empty
27
+ `CPK_INTELLIGENCE_API_KEY`
28
+ - retain the `.env` modification time for a later comparison without returning it
11
29
  - package manager and lockfile
12
30
  - required toolchains and their installed versions
13
31
  - declared ports and whether each port is available
32
+ - whether the runtime constructor uses a `runner` option, an `intelligence` option, or
33
+ neither can be proved from project files
14
34
  - CopilotKit package versions and package compatibility risks
15
35
 
36
+ Key every environment finding by its app or runtime directory. Do not combine findings
37
+ from different directories.
38
+
16
39
  For the CopilotKit versions, report the exact installed version of every `@copilotkit/*`
17
40
  dependency, read from the lockfile rather than a manifest range, and state whether any of
18
41
  them is below 1.64.0. The conversion decides its upgrade from exactly that, and a caret
@@ -28,7 +51,13 @@ command rather than running them one at a time. Split a command only when its re
28
51
  what you run next. Keep this preflight read-only. Do not install packages, stop processes,
29
52
  or change a port. Check only the toolchains and ports that repository files require.
30
53
 
31
- Return the file paths and a short finding for each item. State each absent or unproved item.
32
- Do not read, print, or return secret values. Do not read a file outside the project
33
- directory. Do not run or return another onboarding command. Stop after returning the
34
- findings to the main coding agent.
54
+ Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
55
+ Use `Status: passed` when the assigned inspection completed, even when a row is `absent` or
56
+ `unproved`. Use `Status: failed` for an inspection error. Use `Status: blocked` when project
57
+ access or an environment limit prevents the inspection.
58
+ Return one row for each assigned item with its status, evidence path, and a short finding.
59
+ Use only `proved`, `absent`, or `unproved` for the status. State each absent or unproved item.
60
+ Do not read, print, or return secret values. For `.env` and `.copilotkit/project.json`
61
+ checks, return only paths, presence checks, and missing field names. Do not read a file
62
+ outside the project directory. Do not run or return another onboarding command. Stop after
63
+ returning the findings to the main coding agent.
@@ -16,7 +16,7 @@ Prove the live runtime in this order:
16
16
  4. Confirm from project files that the runtime constructor passes a `runner` option rather
17
17
  than an `intelligence` option. A package, import, project file, or key is not use proof.
18
18
  5. Run
19
- `npx --yes copilotkit@4.9.2 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
19
+ `npx --yes copilotkit@4.9.17 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
20
20
  with the runtime URL or auth header options that this project needs. Require exit zero
21
21
  and the JSON `ok` field to be `true`.
22
22
  6. Drive one real request through the existing frontend, CopilotKit runtime, and expected
@@ -32,4 +32,5 @@ The default in-memory OSS runner is ephemeral. SQLite, custom, or framework pers
32
32
  can be durable. Report the persistence that project evidence proves, or `unproved`. Do not
33
33
  replace it and do not describe all OSS runs as ephemeral.
34
34
 
35
+ Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
35
36
  Stop after returning the baseline result, process ids and ports used, and evidence paths.
@@ -1,25 +1,32 @@
1
1
  # Prove the complete round trip
2
2
 
3
- Use the proof steps and documentation URLs from the approved plan. Fetch every selected
4
- URL in one step before you start, rather than one after another.
5
- Do not use remembered CopilotKit instructions.
3
+ Use the proof steps and documentation URLs from the approved plan. Follow the documentation
4
+ policy the main coding agent gives you before you start.
5
+
6
+ During Steps 1 through 8, do not edit source files, configuration files, dependencies, or
7
+ tracked files.
8
+ You can make only operational repairs to project-owned processes, ports, and request options.
9
+ Do not write a path that overlaps a protected path. If a required proof or tool path
10
+ overlaps one, return `Status: blocked` before writing it.
6
11
 
7
12
  Run the steps below in the order they appear. They are the proof. Do not design a
8
13
  different sequence of your own, and do not drop a step because an earlier one looked
9
14
  convincing. Step 6 has a web form and a React Native form: run the one that matches this
10
15
  journey's frontend, and run only that one.
11
16
 
17
+ Where this is a second attempt after a repair, run every step from Step 2 through Step 7
18
+ again. The repair changed tracked files and restarted processes, so the wiring, the agent
19
+ identity, and both preconditions are stale. Step 1 is the exception, and it is carried
20
+ rather than derived a second time. Compare the Step 5a and Step 5b results against the
21
+ failed attempt's before you drive the surface. A repair that leaves the failed precondition
22
+ unchanged has not reached the cause, and that is readable before the most expensive step.
23
+
12
24
  Record the result of every step as you go. A step with nothing recorded did not happen.
13
25
  Write each captured file to `.copilotkit/proof/` inside the project and name the path in
14
26
  the record. That directory holds regenerable evidence rather than application code. Where
15
27
  a browser or device tool writes to a location of its own, keep that location and record
16
28
  it instead.
17
29
 
18
- A fetch tool that refuses a URL, or fails to reach it, reports a limit of the tool and
19
- not a fact about the page. Retrieve the same URL a second way before you judge it. Run
20
- `curl -fsSL <url>`, or read the same page without the `.md` suffix. Report a
21
- documentation gap only after a second method also fails.
22
-
23
30
  Gather what you need in as few commands as possible. Combine independent reads into one
24
31
  command rather than running them one at a time. Split a command only when its result decides
25
32
  what you run next.
@@ -40,6 +47,11 @@ Where the plan named no request, write one that produces the outcome the plan na
40
47
  record the request you wrote. Every later step uses these words unchanged, so that the
41
48
  browser, the device, and the grounding check all speak about one request.
42
49
 
50
+ Where the handoff carries a pinned Step 1 record from a failed attempt, that record is this
51
+ step. Use its request words, expected agent id, entity list, and runtime URL unchanged, and
52
+ do not write a new request. A second attempt that asks a different question proves nothing
53
+ about the failure it was spawned to clear.
54
+
43
55
  ## Step 2 -- Start the agent and the frontend
44
56
 
45
57
  Read the port the developer's agent already serves from this project's own configuration.
@@ -108,27 +120,23 @@ IPv6 only, so an IPv4 literal fails against the correct port.
108
120
  ## Step 4 -- Check the wiring
109
121
 
110
122
  With both running, check the wiring in one command before you open a browser:
111
- `npx --yes copilotkit@4.9.2 verify --json`. Add `--runtime-url` when the runtime is not at
123
+ `npx --yes copilotkit@4.9.17 verify --json`. Add `--runtime-url` when the runtime is not at
112
124
  `http://localhost:3000/api/copilotkit`. Read the individual checks rather than the summary
113
- alone: a check reported `undetermined` did not run, and that is not a pass. Fix anything
114
- that is not a pass before the browser, because a browser failure stacked on broken wiring
115
- costs a round of debugging to reach an answer this command already gave.
116
-
117
- Treat `intelligence_consumed` as the check that matters most here. A journey that finishes
118
- with the Intelligence credential never read looks complete and proves nothing about the
119
- paid surface. `api_key_authenticates` passing beside it says the key is real and the
120
- runtime never used it.
121
-
122
- `intelligence_thread_routes` fails when the runtime reports a license but serves no
123
- thread routes, which means saved Threads cannot load in a browser. The usual cause is a
124
- handler mounted `mode: "single-route"`: remove that option so the handler serves its full
125
- route set, and mount it at a catch-all route. If instead that check is `undetermined`
126
- because the runtime reports no thread-endpoint state, the runtime predates the field.
127
- Record that and move on -- there is nothing to repair.
125
+ alone: a check reported `undetermined` did not run, and that is not a pass. Repair a failed
126
+ check only within the limits above. Otherwise, return the check and its evidence before the
127
+ browser.
128
+
129
+ Treat `intelligence_consumed` as the check that matters most here. It proves that the runtime
130
+ used the Intelligence credential. `api_key_authenticates` proves only that the key is valid.
131
+
132
+ `intelligence_thread_routes` fails when a licensed runtime serves no thread routes. A handler
133
+ mounted `mode: "single-route"` is the usual cause. Return it for implementation to remove the
134
+ option and use a catch-all route. Do not edit it. If the check is `undetermined` because no
135
+ thread-endpoint state exists, the runtime predates the field. Record that and continue.
128
136
 
129
137
  ## Step 5 -- Prove that the agent runs
130
138
 
131
- Run `npx --yes copilotkit@4.9.2 verify --round-trip --json`. It sends one request through
139
+ Run `npx --yes copilotkit@4.9.17 verify --round-trip --json`. It sends one request through
132
140
  the runtime and reads the answer back from the thread, so it separates an agent that is
133
141
  configured from an agent that works. Use `--agent <id>` when the runtime declares more
134
142
  than one. If it reports `user-not-identified`, this project's `identifyUser` reads a
@@ -137,30 +145,96 @@ it again, because an auth-gated app refusing an unauthenticated caller is that a
137
145
  working. Do not continue until this passes, and never report a round trip proven without
138
146
  it.
139
147
 
148
+ ### Step 5a -- Prove that the page's data reaches the model
149
+
150
+ `verify --round-trip` sends `context: []` and asks a question that needs no context. It
151
+ passes against an agent the page's data never reaches, and that is the right job for an
152
+ install check. Nothing else before the browser reads that path, so a page whose data the
153
+ agent never sees answers fluently over a record it invented, and the first thing to notice
154
+ is a card in a screenshot.
155
+
156
+ Where this journey shares page data with the agent, prove that path here. Read the context
157
+ entries this project's frontend publishes, from its own context call. Read the tool
158
+ declarations it registers as well, and carry both the way the page carries them, so that
159
+ the agent sees the request the browser sends rather than a thinner one. Send the same run
160
+ body twice, to `<runtime>/agent/<agent id>/run`: once carrying the context entries the page
161
+ publishes, and once carrying `context: []`. Use the step 1 request both times. Record the
162
+ streamed events from each, and name both capture paths.
163
+
164
+ Read the two answers against each other. The run carrying the page's context has to name
165
+ the project's own records. The run carrying an empty context has to say the page sent
166
+ nothing. Two answers that describe the same record mean the context changed nothing, and
167
+ the page's data is not reaching the model.
168
+
169
+ Return the cause and both captures on a failed comparison. Do not open a browser on a
170
+ failed comparison, and do not edit the project here.
171
+
172
+ Where this journey shares no page data with the agent, record that and continue.
173
+
174
+ ### Step 5b -- Prove that the plan's component is wired to a tool call
175
+
176
+ The plan ends at a component this frontend registers itself, through `useComponent` or
177
+ Angular's `registerComponent`. Both declare a tool from the frontend and forward it to the
178
+ agent in the run body, so the component paints only where three things line up: the
179
+ frontend registers the name, the run carries the declaration, and the agent calls it.
180
+
181
+ Nothing reports a gap between them. A tool call the frontend registers no component for
182
+ paints an empty message, and a generative-UI payload naming a surface or a catalog the
183
+ frontend does not know falls to a surface nothing draws. Neither writes anything to the
184
+ browser console, so the browser step reports a finished turn, a blank card, and no error
185
+ to read.
186
+
187
+ Read the registrations this project's frontend declares, by name. Send the step 1 request
188
+ to the route step 5a used, carrying those declarations, and read the tool calls out of
189
+ that run's own events. The agent has to call one of the names the frontend registered. An
190
+ agent that calls nothing, or calls a name no registration matches, is a wiring gap for
191
+ implementation to close rather than a proof repair. Return the name and the frontend file
192
+ you read, before the browser.
193
+
194
+ Where this journey renders a tool the agent owns rather than one the frontend declares,
195
+ pair the called names against the frontend's renderers the same way. For A2UI, also
196
+ compare the catalog id this project's provider registers with the catalog id the agent's
197
+ payload names. Record every pair you matched.
198
+
140
199
  ## Step 6 -- Drive the surface
141
200
 
142
201
  Now send one real request through the running frontend, on this journey's own surface.
143
202
  Make sure that the request passes through CopilotKit and reaches the selected agent, and
144
- that the frontend receives working generative UI from the agent. This is the step that
145
- covers realtime delivery, the frontend provider being wired to this runtime, and a
146
- generative UI component actually rendering, and no command-line check reaches any of them.
147
- It is not optional polish: a run that skips it has proven the agent and not the journey,
148
- and the graph ends such a run as blocked rather than complete.
149
-
150
- Use the surface control the main coding agent recorded for your environment. Do not add a
151
- browser driver or a device tool to this project: a devDependency and a browser download
152
- land in the diff and tax a repository that never asked for one. If nothing in your
153
- environment can drive the surface this journey needs, skip this step rather than
154
- installing one, and report the skip outcome named below.
203
+ that the frontend renders the plan's component through this frontend's own registration --
204
+ the `useComponent` hook, or Angular's `registerComponent` -- over entities the project
205
+ holds. Streamed text alone is not this step's outcome, whatever it says.
206
+
207
+ This is the step that covers realtime delivery, the frontend provider being wired to this
208
+ runtime, and the component actually rendering, and no command-line check reaches any of
209
+ them. It is not optional polish: a run that skips it has proven the agent and not the
210
+ journey, and the graph ends such a run as blocked rather than complete.
211
+
212
+ For a recorded `both-oss` starting state, this step has no component to render. Send the
213
+ same request the baseline recorded, require the same kind of user-visible result the
214
+ baseline produced, and require that the thread for that request is listed in the drawer.
215
+ Where this journey's frontend framework ships no threads drawer -- React Native --, find
216
+ that thread in the managed Intelligence dashboard and record which of the two you proved.
217
+
218
+ Use the surface control the main coding agent recorded for your environment. It either had
219
+ one already or registered one before this step, so that finding is the answer and there is
220
+ nothing here for you to go looking for. Do not add a browser driver or a device tool to this
221
+ project: a devDependency and a browser download land in the diff and tax a repository that
222
+ never asked for one, which is a different thing from the server registered against the
223
+ coding agent. If nothing in your environment can drive the surface this journey needs, skip
224
+ this step rather than installing one, and report the skip outcome named below.
155
225
 
156
226
  Never report a result you did not see, on either surface.
157
227
 
228
+ A rendered result is not proof yet. Record this step's outcome after step 7 has compared
229
+ that result with the project's own data, not before: a card nothing compared is a card
230
+ whose fields nobody has read. Where that comparison fails and sends you back to a cause,
231
+ the attempt that failed it is `failed` and stays in the record with its own capture,
232
+ under a name that says what it was.
233
+
158
234
  ### Step 6a -- Web frontends: React SPA, Next.js, Angular, Vue 3
159
235
 
160
236
  The surface is a browser, and it also covers browser-origin CORS and CSP, which a CLI
161
- request never exercises. Use a browser MCP server already configured for the coding agent
162
- you are running as, the same way step 9 configures the CopilotKit documentation MCP
163
- server.
237
+ request never exercises. Drive it with the browser control step 6 named.
164
238
 
165
239
  1. Open the frontend URL from step 2 and wait for the page to finish loading.
166
240
  2. Take one page snapshot. Record whether the CopilotKit surface is on the page. A page
@@ -171,7 +245,8 @@ server.
171
245
  submit it.
172
246
  5. Wait for the assistant turn to finish rather than for a fixed number of seconds. The
173
247
  turn is finished when the streamed text stops growing and the generative UI component
174
- has rendered.
248
+ has rendered. For a recorded `both-oss` starting state, this step has no component, and
249
+ the turn is finished when the streamed text stops growing.
175
250
  6. Take one screenshot of the finished turn and record where you wrote it.
176
251
  7. Read the browser console a second time, and record every error that step 3 did not
177
252
  already list. Those belong to the request.
@@ -221,32 +296,60 @@ instead, and do not invent a comparison to pass this step.
221
296
  An answer that renders correctly over entities the project does not hold looks the same as
222
297
  a correct one in a browser, in a screenshot, and in a video, so this comparison is the only
223
298
  stage that separates them. An answer that names an entity the project does not hold is a
224
- failed proof, not a passing one. Find which of these it is before you change anything: the
225
- project's data never reaches the agent, the agent receives it and its instructions ignore
226
- it, the page loads its data after the context was registered, or the run wired a different
227
- source than the page renders. Fix that cause, then prove again.
299
+ failed proof, not a passing one.
300
+
301
+ An empty context set is the first case to rule out. Where the context the agent received
302
+ held no records, the answer had to say so, and a rendered record over an empty context set
303
+ is a fabrication rather than a near miss: the card is well formed, the prose reply agrees
304
+ with it, and nothing in the answer marks the gap.
305
+
306
+ Find which of these it is before you change anything: the project's data never reaches the
307
+ agent, the agent receives it and its instructions ignore it, the page loads its data after
308
+ the context was registered, or the run wired a different source than the page renders.
309
+ Return the cause and its evidence. Do not edit it during proof.
228
310
 
229
311
  ## Step 8 -- Compare with the recorded OSS baseline
230
312
 
231
313
  Run this step only for a recorded `both-oss` starting state. Compare the final round trip
232
- with the recorded OSS baseline. The same frontend request must still reach the same agent
233
- and produce the same kind of user-visible result. The runtime must now report
234
- `licenseStatus`, and the authenticated Intelligence checks must pass. Record both before
235
- and after evidence.
314
+ with the recorded OSS baseline against the criterion the conversion prompt froze. The same
315
+ frontend request must still reach the same agent and produce the same kind of user-visible
316
+ result. The runtime must now report `licenseStatus`, and the authenticated Intelligence
317
+ checks must pass. A thread for that request must be persisted and visible. Record both
318
+ before and after evidence, and record that the criterion was `conversion-v1`.
319
+
320
+ For every other starting state, record Step 8 as not applicable.
321
+
322
+ The application edit ban ends only after Step 8 passes or is recorded as not applicable.
323
+ Step 9 can write only the tool files named by its guide.
236
324
 
237
325
  ## Step 9 -- Set up the continued-development tools
238
326
 
239
327
  Fetch the continued-development guide from the main coding agent with the proof
240
328
  documentation. Try the continued-development tools after the application passes proof.
329
+
330
+ Tell the developer what the skills install writes into this project before you run it: a
331
+ `.agents/skills` directory holding one folder per CopilotKit skill, linked into
332
+ `.claude/skills`. Both sit in the working tree, so the install shows up in `git status`
333
+ and can land in a commit. You cannot know whether this project keeps those directories in
334
+ version control, so name them before you write them rather than after.
335
+
241
336
  Use it to install the project-scoped CopilotKit Skills.
242
337
  Use it to configure the CopilotKit documentation MCP server for the current coding agent.
338
+ That registration goes in the coding agent's own configuration for this project, not in
339
+ the working tree.
243
340
 
244
- Do not validate whether the Skills or MCP server installed correctly. Record the command
245
- result for each attempt. Report each tool result separately. A tool error does not change
246
- the proof result.
341
+ Check whether each install succeeded and record what you found. Record the command result
342
+ for each attempt. Report the Skills result and the MCP result separately from the proof
343
+ result. A tool error does not change the proof result: this journey proved or it did not,
344
+ whatever these two tools did.
247
345
 
248
346
  ## Step 10 -- Return the result
249
347
 
348
+ Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
349
+ Use `Status: passed` when the proof attempt completed with `performed`,
350
+ `skipped-no-browser-tool`, or `skipped-no-device`. The parent records a skip through the
351
+ standard blocked completion route. Use `Status: failed` for a failed proof step. Use
352
+ `Status: blocked` when a safety or access limit stops the attempt before a surface outcome.
250
353
  Return the proof or the exact failed step to the main coding agent, together with the
251
354
  input, the visible result, the relevant process status, the evidence locations, the
252
355
  surface-check outcome, and which surface that outcome speaks for. Do not return secret
@@ -17,14 +17,22 @@ are available. Search the broader official CopilotKit documentation before you i
17
17
  Mark each step that the selected pages do not prove. Do not treat the documentation gap as
18
18
  proof that the requested integration is unsupported.
19
19
 
20
+ Before you show the best-effort plan, require this complete packet:
21
+
22
+ - Name the exact target project directory and protected path list.
23
+ - Define the ordered implementation steps with outcomes and dependencies.
24
+ - Name the exact paths each step changes.
25
+ - Give the full validation command list.
26
+ - Give the ordered proof rules.
27
+
20
28
  After the developer approves the best-effort plan, run
21
- `npx --yes copilotkit@4.9.2 onboard read fallback/best-effort`.
29
+ `npx --yes copilotkit@4.9.17 onboard read fallback/best-effort`.
22
30
 
23
31
  Send one short report. Run the feedback command without another developer question. The
24
32
  CLI telemetry gate decides whether the report is sent.
25
33
 
26
34
  ```text
27
- npx --yes copilotkit@4.9.2 onboard feedback
35
+ npx --yes copilotkit@4.9.17 onboard feedback
28
36
  ```
29
37
 
30
38
  Write the feedback message to the command's standard input, in at most four lines.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "copilotkit",
3
- "version": "4.9.2",
3
+ "version": "4.9.17",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14698,7 +14698,7 @@ import * as path4 from "node:path";
14698
14698
 
14699
14699
  // apps/cli/src/config.ts
14700
14700
  function getTemplateRef() {
14701
- return true ? "e432fd161b9114fb15080dbd9d9208e29f5e8960" : "main";
14701
+ return true ? "f08f478cf73c46d34e8db03dedcc61f695f9b9b5" : "main";
14702
14702
  }
14703
14703
 
14704
14704
  // apps/cli/src/services/agentcore-config.ts