copilotkit 4.9.50 → 4.10.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 +44 -4
- package/cli-build-info.json +7 -7
- package/index.js +1810 -354
- package/onboarding/index.json +81 -18
- package/onboarding/prompts/authenticate/start.md +56 -190
- package/onboarding/prompts/conversion/plan.md +3 -3
- package/onboarding/prompts/credentials/finalize-plan.md +25 -98
- package/onboarding/prompts/credentials/plan.md +20 -20
- package/onboarding/prompts/credentials/settle-credentials.md +153 -0
- package/onboarding/prompts/credentials/write-plan.md +93 -0
- package/onboarding/prompts/fallback/best-effort.md +12 -9
- package/onboarding/prompts/feature/a2ui/implement.md +35 -6
- package/onboarding/prompts/feature/a2ui/proof.md +30 -6
- package/onboarding/prompts/feature/a2ui/start.md +29 -6
- package/onboarding/prompts/feature/chat-suggestions/implement.md +36 -6
- package/onboarding/prompts/feature/chat-suggestions/proof.md +30 -5
- package/onboarding/prompts/feature/chat-suggestions/start.md +29 -6
- package/onboarding/prompts/feature/complete.md +11 -0
- package/onboarding/prompts/feature/learning/implement.md +102 -11
- package/onboarding/prompts/feature/learning/proof.md +53 -9
- package/onboarding/prompts/feature/learning/start.md +35 -8
- package/onboarding/prompts/feature/open-generative-ui/implement.md +37 -6
- package/onboarding/prompts/feature/open-generative-ui/proof.md +30 -5
- package/onboarding/prompts/feature/open-generative-ui/start.md +29 -6
- package/onboarding/prompts/feature/realtime-sync/implement.md +36 -7
- package/onboarding/prompts/feature/realtime-sync/proof.md +29 -5
- package/onboarding/prompts/feature/realtime-sync/start.md +28 -5
- package/onboarding/prompts/feature/rich-threads/implement.md +37 -8
- package/onboarding/prompts/feature/rich-threads/proof.md +31 -5
- package/onboarding/prompts/feature/rich-threads/start.md +28 -5
- package/onboarding/prompts/feature/stop.md +10 -7
- package/onboarding/prompts/feature/voice/implement.md +35 -6
- package/onboarding/prompts/feature/voice/proof.md +30 -5
- package/onboarding/prompts/feature/voice/start.md +29 -6
- 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 +2 -2
- package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +2 -2
- 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 +6 -6
- 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 +122 -12
- package/onboarding/prompts/proof/complete.md +23 -10
- package/onboarding/prompts/proof/oss-baseline.md +17 -7
- package/onboarding/prompts/proof/round-trip.md +33 -13
- package/onboarding/prompts/research/gather.md +121 -0
- package/onboarding/prompts/research/route.md +81 -0
- package/onboarding/prompts/starter/clone.md +18 -9
- package/onboarding/prompts/stopped/run-failed.md +44 -0
- package/onboarding/prompts/subagent/create-plan.md +32 -1
- package/onboarding/prompts/subagent/implement-and-validate.md +9 -1
- package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
- package/onboarding/prompts/subagent/prove-round-trip.md +59 -12
- package/onboarding/prompts/unsupported/no-validated-path.md +10 -7
- package/package.json +1 -1
- package/release/release-tool.js +39 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Prove the user journey
|
|
2
2
|
|
|
3
3
|
Do not do the proof work yourself. Spawn one proof subagent. Tell it to run
|
|
4
|
-
`npx --yes copilotkit@4.
|
|
4
|
+
`npx --yes copilotkit@4.10.0 onboard read subagent/prove-round-trip` first and follow the
|
|
5
5
|
prompt it returns. If that read fails because the subagent cannot use the shell, stop that
|
|
6
6
|
subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
|
|
7
7
|
and the same handoff. Give it the selected framework, frontend, model, approved plan, selected
|
|
@@ -14,6 +14,15 @@ drives the surface and cannot see your environment, so without that finding it s
|
|
|
14
14
|
step discovering what you already know. A subagent told it has no control for the surface
|
|
15
15
|
this frontend needs reports the skip outcome rather than looking for a way around it.
|
|
16
16
|
|
|
17
|
+
A run that cloned a starter is the exception. Tell that subagent to stop after
|
|
18
|
+
`verify --round-trip` and to open no browser. The cloned code is what this repository's
|
|
19
|
+
starter smoke jobs already drive on every change, so opening a browser re-proves in the
|
|
20
|
+
developer's run what those jobs prove before the starter ships, and it is the most
|
|
21
|
+
expensive step in this setup. `verify --round-trip` reads the answer back off the thread,
|
|
22
|
+
so it holds for every runtime mount and needs no browser. Give that subagent no browser or
|
|
23
|
+
device control, and record the surface outcome as skipped for a cloned starter rather than
|
|
24
|
+
as a missing capability: nothing was unavailable, the run declined to spend it.
|
|
25
|
+
|
|
17
26
|
Give the subagent this guide for continued-development tools:
|
|
18
27
|
https://docs.copilotkit.ai/build-with-agents.md
|
|
19
28
|
|
|
@@ -23,13 +32,13 @@ pass the time.
|
|
|
23
32
|
Report each attempt at the journey as it ends, counting from one:
|
|
24
33
|
|
|
25
34
|
```text
|
|
26
|
-
npx --yes copilotkit@4.
|
|
35
|
+
npx --yes copilotkit@4.10.0 onboard checkpoint --phase journey-attempted --attempt 1
|
|
27
36
|
```
|
|
28
37
|
|
|
29
38
|
Record what that proof returned before you route on it:
|
|
30
39
|
|
|
31
40
|
```text
|
|
32
|
-
npx --yes copilotkit@4.
|
|
41
|
+
npx --yes copilotkit@4.10.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
|
|
33
42
|
```
|
|
34
43
|
|
|
35
44
|
Report the gate whatever it returned. A proof that never ran is `skipped`, not failed. The
|
|
@@ -37,7 +46,7 @@ command prints one line and sends nothing else. Where a repair cycle runs the pr
|
|
|
37
46
|
record each attempt as it ends.
|
|
38
47
|
|
|
39
48
|
For every protected-path audit in this prompt, run
|
|
40
|
-
`npx --yes copilotkit@4.
|
|
49
|
+
`npx --yes copilotkit@4.10.0 onboard audit` from the target app directory. If its result
|
|
41
50
|
starts with `Status: blocked`, report the printed reason and use the route-out rules below.
|
|
42
51
|
A blocked audit proved nothing changed and is not a preservation failure. If a
|
|
43
52
|
protected-path audit reports a changed path, decide it the way the implementation prompt
|
|
@@ -46,13 +55,20 @@ returns none, so a finding with no Files changed section to test against routes
|
|
|
46
55
|
path one of those sections names is this run's own change and routes out too. Accept a
|
|
47
56
|
path only when a section this run collected covers the step that wrote it and does not
|
|
48
57
|
name it:
|
|
49
|
-
`npx --yes copilotkit@4.
|
|
58
|
+
`npx --yes copilotkit@4.10.0 onboard protect --accept-external --path <path>`. Then run
|
|
50
59
|
the audit again and name the path in the closing summary. Never repair, reset, or revert a
|
|
51
60
|
protected path.
|
|
52
61
|
|
|
62
|
+
That holds for a repair cycle too. When the fix for a failing check lands on a protected
|
|
63
|
+
path, the path is still the developer's, however right the diagnosis is and however small
|
|
64
|
+
the fix. Reading the file never settles who wrote it. Ask the developer to allow the
|
|
65
|
+
change, and record their answer with
|
|
66
|
+
`npx --yes copilotkit@4.10.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
|
|
67
|
+
or route out. Never repair it, and never send it to a repair worker.
|
|
68
|
+
|
|
53
69
|
If the proof result starts with `Status: passed`, run the protected-path audit. Continue to
|
|
54
70
|
`proof/complete` only if that audit passes. After the audit passes, run
|
|
55
|
-
`npx --yes copilotkit@4.
|
|
71
|
+
`npx --yes copilotkit@4.10.0 onboard read proof/complete`. A performed surface outcome with
|
|
56
72
|
the full round trip is core success even if a continued-development tool fails. A skipped
|
|
57
73
|
surface outcome still enters `proof/complete` so the CLI records the blocked result. Do not
|
|
58
74
|
describe a skipped surface as proved. Keep the Skills and MCP results separate from the proof
|
|
@@ -108,7 +124,7 @@ Restart each project-owned process changed by the repair. Report the cycle, coun
|
|
|
108
124
|
one:
|
|
109
125
|
|
|
110
126
|
```text
|
|
111
|
-
npx --yes copilotkit@4.
|
|
127
|
+
npx --yes copilotkit@4.10.0 onboard checkpoint --phase repair-attempted --attempt 1
|
|
112
128
|
```
|
|
113
129
|
|
|
114
130
|
Then spawn a fresh proof subagent
|
|
@@ -126,21 +142,25 @@ and proof cycles.
|
|
|
126
142
|
|
|
127
143
|
Route out only when the failure is not yours to fix, when the same proof still fails after
|
|
128
144
|
three attempts, or when no evidence of the round trip can be produced. In those cases run
|
|
129
|
-
`npx --yes copilotkit@4.
|
|
145
|
+
`npx --yes copilotkit@4.10.0 onboard read stopped/run-failed`. The stack is supported:
|
|
146
|
+
this run did not finish, which is a different ending and a different report. All three are
|
|
130
147
|
about the round trip itself. A round trip that proved is not one of them, whatever failed
|
|
131
148
|
after it.
|
|
132
149
|
|
|
133
150
|
If you stop here without taking that route -- a repair cycle you cannot finish, a limit in
|
|
134
151
|
your own harness, a run that has run out -- send one short report before you stop.
|
|
135
|
-
Run the
|
|
152
|
+
Run the friction command without another developer question. The CLI telemetry gate decides
|
|
136
153
|
whether the report is sent.
|
|
137
154
|
|
|
138
155
|
```text
|
|
139
|
-
npx --yes copilotkit@4.
|
|
156
|
+
npx --yes copilotkit@4.10.0 onboard friction --phase stop --category <slug>
|
|
140
157
|
```
|
|
141
158
|
|
|
142
|
-
Write
|
|
159
|
+
Write one or two sentences to standard input: the step you stopped at and what stopped it.
|
|
160
|
+
Pick the category that fits from docs-missing, docs-wrong, docs-sequential, cli-gap,
|
|
161
|
+
sdk-gap, environment, port-collision, credential, validation-loop, and other. Leave
|
|
162
|
+
--cost-seconds off. A run that stopped cannot separate one papercut's cost from the cost
|
|
163
|
+
of the whole run, so the estimate is optional on a stop report and only there.
|
|
143
164
|
Send no secrets, source code, logs, or command output. The command refuses a report that
|
|
144
165
|
carries any of those, prints the reason, and exits zero. A refused report is not a failed
|
|
145
|
-
step.
|
|
146
|
-
this phase is the one this graph most needs to hear about and the one it hears from least.
|
|
166
|
+
step. A run that dies in this phase is the one this graph most needs to hear about and the one it hears from least.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Gather the evidence this run routes on
|
|
2
|
+
|
|
3
|
+
Sign-in is settled. This phase inspects the project and proves what this environment can
|
|
4
|
+
drive. Do not change application code here, and do not ask the developer a setup question
|
|
5
|
+
yet: every read-only investigation finishes first.
|
|
6
|
+
|
|
7
|
+
## How to wait for a subagent
|
|
8
|
+
|
|
9
|
+
This rule covers every subagent this run spawns, here and in every later prompt.
|
|
10
|
+
|
|
11
|
+
Spawning a subagent returns almost at once. That return is the dispatch succeeding, not the
|
|
12
|
+
work finishing: the subagent runs in the background, and its result reaches you as a
|
|
13
|
+
notification. Where your own harness hands you the report from the dispatch itself instead,
|
|
14
|
+
you already hold the result. Either way there is nothing to poll.
|
|
15
|
+
|
|
16
|
+
After you dispatch, do the work that does not depend on the result -- dispatch the other
|
|
17
|
+
subagent, run the preflight below -- and then stop and wait. Wherever a prompt in this graph
|
|
18
|
+
says to wait for a subagent to finish, that is what it means.
|
|
19
|
+
|
|
20
|
+
Do not sleep to pass the time. Not `sleep`, not `/bin/sleep`, not a timer under another
|
|
21
|
+
name, and not a loop that re-checks whether a result has arrived. Sleeping tells you nothing
|
|
22
|
+
that waiting for the result does not, and it spends wall clock, which is one of the things
|
|
23
|
+
this journey is measured on. One recorded run spent most of two hours asleep between
|
|
24
|
+
dispatches that had all returned in seconds.
|
|
25
|
+
|
|
26
|
+
Before you ask the developer any setup question, finish every read-only investigation and
|
|
27
|
+
preflight check in this section.
|
|
28
|
+
|
|
29
|
+
Prepare two research assignments. Give each research subagent one assignment. Tell it to run
|
|
30
|
+
`npx --yes copilotkit@4.10.0 onboard read subagent/inspect-repository` first and follow the
|
|
31
|
+
prompt it returns. If that read fails because the subagent cannot use the shell, stop that
|
|
32
|
+
subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
|
|
33
|
+
and the same handoff. Require only its assigned packet.
|
|
34
|
+
|
|
35
|
+
Start both research subagents in parallel:
|
|
36
|
+
|
|
37
|
+
1. Spawn one research subagent. Assign it the project evidence packet.
|
|
38
|
+
2. Spawn a second research subagent. Assign it the environment evidence packet.
|
|
39
|
+
3. Start both research subagents. Then continue.
|
|
40
|
+
|
|
41
|
+
Continue to the surface-control preflight.
|
|
42
|
+
|
|
43
|
+
Prove whether your coding-agent environment has browser or device control. Do not assume it
|
|
44
|
+
either way, and do not report what you expect to be true: a run that guesses here records a
|
|
45
|
+
capability every later step then trusts. Use a browser or device tool already
|
|
46
|
+
configured for the coding agent you are running as, the same way a later step uses the
|
|
47
|
+
CopilotKit documentation server. With a browser tool, open one inert page such as
|
|
48
|
+
`about:blank` and read its title. With a device tool and no browser, list the booted devices
|
|
49
|
+
in one command: `adb devices -l`. Record the outcome of that attempt: `available` when the
|
|
50
|
+
tool answered, `unavailable` when there was none to call or the page did not open. Use
|
|
51
|
+
the control that matches the selected surface later.
|
|
52
|
+
|
|
53
|
+
Where the browser probe answered, register nothing. The harness came equipped and the run
|
|
54
|
+
owes it no setup.
|
|
55
|
+
|
|
56
|
+
Where no browser tool answered, register one for the coding agent you are running as, then
|
|
57
|
+
run the same probe again and record what the second attempt did. Register this server:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
npx --yes @playwright/mcp@latest --browser chrome --isolated --output-dir <project>/.copilotkit/proof/browser
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Replace `<project>` with the absolute path of the target project directory. The server is
|
|
64
|
+
registered against the coding agent rather than against a directory, so a relative path here
|
|
65
|
+
resolves wherever that server happens to start.
|
|
66
|
+
|
|
67
|
+
`--browser chrome` drives the Google Chrome the developer already has, so this downloads no
|
|
68
|
+
browser. `--isolated` keeps the profile in memory, so it never touches their own Chrome
|
|
69
|
+
profile. `--output-dir` is what keeps the snapshots and screenshots out of the developer's
|
|
70
|
+
repository root: without it this server writes them to `.playwright-mcp/` beside their code,
|
|
71
|
+
which a project that never asked for a browser has no reason to carry, and which this setup's
|
|
72
|
+
own evidence rule already has a place for. Register it the way your own harness registers a
|
|
73
|
+
server, which is the mechanism a later step uses for the CopilotKit documentation server.
|
|
74
|
+
|
|
75
|
+
Tell the developer in one line what you registered, that it drives their installed Chrome,
|
|
76
|
+
and that it lives in this coding agent's configuration rather than in their repository. Do
|
|
77
|
+
not ask them to approve it, and do not ask a second question about it.
|
|
78
|
+
|
|
79
|
+
Do not add a browser or device driver to the project. A driver added there is a
|
|
80
|
+
devDependency and a browser download in the diff of a repository that never asked for one,
|
|
81
|
+
which is a different thing from a server registered against the coding agent.
|
|
82
|
+
|
|
83
|
+
Where the second probe still does not answer -- no Chrome to drive, no network, or a
|
|
84
|
+
harness that cannot register a server -- record `unavailable` and carry it. Do not keep
|
|
85
|
+
trying, and do not ask the developer about this tool limit.
|
|
86
|
+
|
|
87
|
+
Registering a server does not boot a device. Where the device probe found none, that is the
|
|
88
|
+
whole finding, and a browser is not a substitute for a device.
|
|
89
|
+
|
|
90
|
+
Wait for both research subagents to finish.
|
|
91
|
+
|
|
92
|
+
Then report that the research came back:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
npx --yes copilotkit@4.10.0 onboard checkpoint --phase research-returned
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
A refused checkpoint prints its reason and leaves onboarding unaffected. It is not a
|
|
99
|
+
failed step.
|
|
100
|
+
|
|
101
|
+
Continue only if both research results start with `Status: passed`. For `Status: failed`,
|
|
102
|
+
retry only that packet with its failed items, up to three attempts. For `Status: blocked`,
|
|
103
|
+
or a third failed result, use the stop route at the end of this prompt.
|
|
104
|
+
|
|
105
|
+
Merge both evidence packets by item. On a conflict, spawn one fresh read-only verifier with
|
|
106
|
+
the item, both cited findings, and the research limits. Require its result to start with
|
|
107
|
+
`Status: passed`, `Status: failed`, or `Status: blocked`. Use only a passed cited result. Do
|
|
108
|
+
not inspect the project to settle the conflict yourself. Use the stop route for a non-pass
|
|
109
|
+
verifier result.
|
|
110
|
+
|
|
111
|
+
Match environment evidence to the target app directory from the project packet. Require one
|
|
112
|
+
target app directory and one matching environment row. If either packet gives no match or
|
|
113
|
+
more than one match, send each research worker a focused directory check. Continue only when
|
|
114
|
+
both workers return the same one target app directory. Both results must start with
|
|
115
|
+
`Status: passed`. Otherwise, use the stop route.
|
|
116
|
+
|
|
117
|
+
When both research results are merged, run
|
|
118
|
+
`npx --yes copilotkit@4.10.0 onboard read research/route`.
|
|
119
|
+
|
|
120
|
+
If inspection stops onboarding, run
|
|
121
|
+
`npx --yes copilotkit@4.10.0 onboard read stopped/run-failed`.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Capture the baseline and route on the findings
|
|
2
|
+
|
|
3
|
+
The merged research findings are in hand. This phase captures the protected-path baseline
|
|
4
|
+
before anything is written, checks that the findings answer what the route needs, and
|
|
5
|
+
sends the run down one path.
|
|
6
|
+
|
|
7
|
+
## Capture the protected-path baseline
|
|
8
|
+
|
|
9
|
+
Before you route on, run this from the target app directory:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
npx --yes copilotkit@4.10.0 onboard protect
|
|
13
|
+
```
|
|
14
|
+
|
|
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`.
|
|
17
|
+
|
|
18
|
+
Use the printed list as the protected path list for the rest of the run. Do not assemble
|
|
19
|
+
that list yourself, and do not ask a subagent to hold it: every later audit reads the
|
|
20
|
+
captured baseline back from the CLI, so no step depends on a subagent that has since
|
|
21
|
+
finished.
|
|
22
|
+
|
|
23
|
+
Paths printed as `deferred` are the ones onboarding itself writes, `.env` and
|
|
24
|
+
`.copilotkit/project.json`. Every audit reports them and none fails on them until the step
|
|
25
|
+
that writes them re-captures them, so a run whose only untracked files are the two this
|
|
26
|
+
graph exists to create is never stopped by them.
|
|
27
|
+
|
|
28
|
+
If the result starts with `Status: blocked`, report the printed reason and use the stop
|
|
29
|
+
route at the end of this prompt.
|
|
30
|
+
|
|
31
|
+
## What the merged findings must contain
|
|
32
|
+
|
|
33
|
+
If a repository file exists, each finding must cite it. For an empty project, the subagents
|
|
34
|
+
must cite the directory check and report absent parts.
|
|
35
|
+
|
|
36
|
+
The findings must cover what the project is for, the agent, frontend, CopilotKit setup,
|
|
37
|
+
authentication, credential names, and validation path. Do not ask the developer for facts
|
|
38
|
+
that the repository answers.
|
|
39
|
+
|
|
40
|
+
## Route on the merged findings
|
|
41
|
+
|
|
42
|
+
Read the route off the merged findings. Three of them decide it, and you already hold all
|
|
43
|
+
three:
|
|
44
|
+
|
|
45
|
+
1. an agent is present,
|
|
46
|
+
2. a frontend is present,
|
|
47
|
+
3. a CopilotKit integration is present.
|
|
48
|
+
|
|
49
|
+
Do not infer a working OSS path from packages, imports, project files, or keys, and do not
|
|
50
|
+
settle these three from your own reading of the project. Each one comes from the merged
|
|
51
|
+
packets or it is not proved.
|
|
52
|
+
|
|
53
|
+
If all three are proved, prove the live starting state before any project file changes. Run
|
|
54
|
+
`npx --yes copilotkit@4.10.0 onboard read proof/oss-baseline`.
|
|
55
|
+
|
|
56
|
+
Route there before you ask the developer anything else. The questions after this prompt
|
|
57
|
+
select a framework and a frontend that the findings already name, so a developer who
|
|
58
|
+
answers them has answered for work the next node exists to check. Their existing
|
|
59
|
+
application is what that node protects. Whether it works is what the proof decides, not
|
|
60
|
+
these three findings.
|
|
61
|
+
|
|
62
|
+
For every other combination of the three, take one more step first. If neither the
|
|
63
|
+
developer nor the repository findings prove what the project is for, ask one guided
|
|
64
|
+
question about the user outcome. This asks what the developer wants to build before you
|
|
65
|
+
select a framework. Give two or three short examples and offer a minimal starter. Record
|
|
66
|
+
the answer and give it to each later subagent. Then run
|
|
67
|
+
`npx --yes copilotkit@4.10.0 onboard read credentials/plan`.
|
|
68
|
+
|
|
69
|
+
Do not ask that question on the route above. A project carrying all three states its
|
|
70
|
+
purpose in the application it already serves.
|
|
71
|
+
|
|
72
|
+
Do not ask it when the target directory holds no project either. A greenfield run clones a starter
|
|
73
|
+
the CLI ships, and that starter arrives carrying a working application of its own. The
|
|
74
|
+
answer cannot change which starter lands, because the starter follows from the framework
|
|
75
|
+
and frontend the developer selects next. Asking spends a turn on a decision the run has
|
|
76
|
+
already made, and then names a purpose the cloned code does not serve. Take the same read
|
|
77
|
+
named above without asking, and let the starter state the domain.
|
|
78
|
+
|
|
79
|
+
If authentication or inspection stops onboarding, run
|
|
80
|
+
`npx --yes copilotkit@4.10.0 onboard read stopped/run-failed`. Neither says anything
|
|
81
|
+
about whether this project's stack is supported, which is not yet known at this point.
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# Clone a starter
|
|
2
2
|
|
|
3
3
|
Use this shortcut only when the repository findings prove that the target project
|
|
4
|
-
directory
|
|
5
|
-
|
|
4
|
+
directory holds no project yet: no source directory such as `src/`, `app/`, `agent/` or
|
|
5
|
+
`web/`, no dependency manifest such as `package.json` or `pyproject.toml`, and no `.env`.
|
|
6
|
+
A directory that holds only a Git repository, a coding agent's own configuration, editor
|
|
7
|
+
settings or scratch notes still qualifies. Those are not a project, and `git init` is the
|
|
8
|
+
marker this CLI anchors a run on, so it cannot also be the thing that disqualifies one.
|
|
6
9
|
|
|
7
10
|
Match the selected agent framework and frontend to this table:
|
|
8
11
|
|
|
@@ -43,7 +46,7 @@ the derived name.
|
|
|
43
46
|
Only if the developer asks for an existing project, or asks to see the projects they have,
|
|
44
47
|
read the choices:
|
|
45
48
|
|
|
46
|
-
`npx --yes copilotkit@4.
|
|
49
|
+
`npx --yes copilotkit@4.10.0 project list --json`
|
|
47
50
|
|
|
48
51
|
Then ask which one to use. Do not order the projects by creation time. If the developer
|
|
49
52
|
already gave this answer, do not ask again. Do not read a secret value. Do not show or
|
|
@@ -53,7 +56,7 @@ Run the command from the parent directory. Do not inspect another entry in the p
|
|
|
53
56
|
directory. Replace each placeholder with the recorded value. Do not run a placeholder as
|
|
54
57
|
a shell argument.
|
|
55
58
|
|
|
56
|
-
`npx --yes copilotkit@4.
|
|
59
|
+
`npx --yes copilotkit@4.10.0 init --name <project-name> --framework <framework-id> --channel none --no-banner --create <name> --install`
|
|
57
60
|
|
|
58
61
|
Pass the confirmed name to both `--name` and `--create`: the app directory and its
|
|
59
62
|
Intelligence project take the same name here. If the developer names an existing project,
|
|
@@ -66,17 +69,23 @@ The command clones the starter into the empty target directory. It also connects
|
|
|
66
69
|
starter to the developer's Intelligence project. The earlier login phase supplies the
|
|
67
70
|
account. The command does not need terminal input.
|
|
68
71
|
|
|
69
|
-
|
|
72
|
+
Report the clone before you inspect anything:
|
|
70
73
|
|
|
71
74
|
```text
|
|
72
|
-
npx --yes copilotkit@4.
|
|
75
|
+
npx --yes copilotkit@4.10.0 onboard checkpoint --phase starter-cloned
|
|
73
76
|
```
|
|
74
77
|
|
|
75
|
-
|
|
78
|
+
This is its own step, not an aside. A run that clones and then goes quiet is
|
|
79
|
+
indistinguishable from a run that never cloned, and the checkpoint is the only thing that
|
|
80
|
+
separates them.
|
|
81
|
+
|
|
82
|
+
Do not rebuild the starter by hand. Then inspect only the generated
|
|
76
83
|
paths inside the target directory. Record the files, install result, project connection,
|
|
77
84
|
and validation commands. Then run
|
|
78
|
-
`npx --yes copilotkit@4.
|
|
85
|
+
`npx --yes copilotkit@4.10.0 onboard read proof/round-trip`.
|
|
79
86
|
|
|
80
87
|
If the command fails, report its exact error and do not claim that the starter is ready.
|
|
81
88
|
Then run
|
|
82
|
-
`npx --yes copilotkit@4.
|
|
89
|
+
`npx --yes copilotkit@4.10.0 onboard read stopped/run-failed`. The starter is one this
|
|
90
|
+
graph ships and the stack was chosen from its own supported list, so a command that
|
|
91
|
+
returned an error is a run that broke, not a setup this release does not support.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Stop because the run did not finish
|
|
2
|
+
|
|
3
|
+
This is the ending for a run that broke. The developer's agent, frontend and package
|
|
4
|
+
choices are supported. Something in this run stopped it, and that is what the report has
|
|
5
|
+
to say.
|
|
6
|
+
|
|
7
|
+
Do not tell the developer their setup is unsupported. It is not, and a run that says so
|
|
8
|
+
sends them to change a stack that was never the problem.
|
|
9
|
+
|
|
10
|
+
Keep the developer's current agent, frontend, authentication, and package choices.
|
|
11
|
+
|
|
12
|
+
Name the exact step that stopped the run, and what it returned. State whether
|
|
13
|
+
authentication, project selection, project credentials, the journey, implementation,
|
|
14
|
+
validation, or the round trip stopped it. Give the failure in the words the step printed,
|
|
15
|
+
not a summary of them.
|
|
16
|
+
|
|
17
|
+
If a protected path stopped this run, name that path and how it changed, in the words the
|
|
18
|
+
audit printed. A report that says only that protected files changed cannot be acted on:
|
|
19
|
+
nobody reading it can tell which file moved, or whether this run or the developer moved
|
|
20
|
+
it.
|
|
21
|
+
|
|
22
|
+
Say what the developer has now. Name the processes still running and the files this run
|
|
23
|
+
changed, so they can carry on by hand or start again from a known state. A run that stops
|
|
24
|
+
without saying what it left behind leaves the developer to discover it.
|
|
25
|
+
|
|
26
|
+
Stop onboarding without making more repository changes.
|
|
27
|
+
|
|
28
|
+
Send one short report. Run the friction command without another developer question. The
|
|
29
|
+
CLI telemetry gate decides whether the report is sent.
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
npx --yes copilotkit@4.10.0 onboard friction --phase stop --category <slug>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Write one or two sentences to standard input: the step you stopped at and what stopped
|
|
36
|
+
it. Pick the category that fits from docs-missing, docs-wrong, docs-sequential, cli-gap,
|
|
37
|
+
sdk-gap, environment, port-collision, credential, validation-loop, and other. Leave
|
|
38
|
+
--cost-seconds off. A run that stopped cannot separate one papercut's cost from the cost
|
|
39
|
+
of the whole run, so the estimate is optional on a stop report and only there.
|
|
40
|
+
Send no secrets, source code, logs, or command output. The command refuses a report that
|
|
41
|
+
carries any of those, prints the reason, and exits zero. A refused report is not a failed
|
|
42
|
+
step. Reword it and send it again, or stop without a report. The command prints what it
|
|
43
|
+
sent. This is the channel for a stop. If the CLI says the report was not sent, state what
|
|
44
|
+
it said and stop without another question.
|
|
@@ -23,6 +23,37 @@ SQLite, custom, or framework persistence can be durable. The two options cannot
|
|
|
23
23
|
combined. Take the constructor from the connect-your-runtime page. Where a framework
|
|
24
24
|
quickstart shows a `runner` option instead, the connect-your-runtime page wins.
|
|
25
25
|
|
|
26
|
+
## Plan the Learning Container and its selector
|
|
27
|
+
|
|
28
|
+
The main coding agent gives you a Learning Container id, or tells you the Learning step was
|
|
29
|
+
skipped for this organization.
|
|
30
|
+
|
|
31
|
+
Where it gives you an id, plan two things and name both in the plan the developer approves:
|
|
32
|
+
the container id itself, and a `getLearningContainerId` callback returning that id on the
|
|
33
|
+
`CopilotKitIntelligence` instance. Take the callback from the Learning page, and fetch it
|
|
34
|
+
here rather than expecting the run to have handed it over:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
https://docs.copilotkit.ai/learning.md
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Put the callback in the same runtime edit that connects Intelligence rather than in a step
|
|
41
|
+
of its own: it is one option on the same constructor, so a separate step names a second
|
|
42
|
+
change to a file the first step already changes.
|
|
43
|
+
|
|
44
|
+
Name the container before the selector, and name the id in both. A container nothing routes
|
|
45
|
+
to stays empty forever, so it buys a name and no learning. A selector pointing at an id the
|
|
46
|
+
platform does not hold answers `LEARNING_CONTAINER_NOT_FOUND` on every thread create, which
|
|
47
|
+
breaks a working chat on the next message.
|
|
48
|
+
|
|
49
|
+
Per-user routing is the developer's own selector logic rather than more containers. Do not
|
|
50
|
+
plan one container per end user: a project holds at most 500, the first automatic Learning
|
|
51
|
+
run needs threads from 15 distinct conversations in one container, and a container per
|
|
52
|
+
person needs those 15 conversations from that one person.
|
|
53
|
+
|
|
54
|
+
Where the Learning step was skipped, plan no container and no selector, and say in the plan
|
|
55
|
+
that Learning is not available to this organization.
|
|
56
|
+
|
|
26
57
|
When the starting state is `both-oss`, use its recorded live baseline evidence. Preserve
|
|
27
58
|
the working agent, frontend, CopilotKit integration, and OSS behavior. Plan the project
|
|
28
59
|
selection, the CopilotKit dependency upgrade below, the Intelligence runtime
|
|
@@ -122,7 +153,7 @@ here is work the developer did not ask for.
|
|
|
122
153
|
Plan the threads drawer itself: add it from the selected drawer page, where this frontend
|
|
123
154
|
does not already render one. Where this journey's frontend framework ships no threads
|
|
124
155
|
drawer -- React Native --, plan that the thread is proved by
|
|
125
|
-
`npx --yes copilotkit@4.
|
|
156
|
+
`npx --yes copilotkit@4.10.0 verify --round-trip`, which needs no browser. Do not plan a
|
|
126
157
|
step that opens the managed Intelligence dashboard.
|
|
127
158
|
|
|
128
159
|
## Order the plan into steps
|
|
@@ -110,8 +110,16 @@ project does not hold, and the rendered result looks the same either way.
|
|
|
110
110
|
Run the full validation list. Record changed files, command results, and errors. Do not
|
|
111
111
|
claim that the real user journey works in this phase.
|
|
112
112
|
|
|
113
|
+
Where the plan names a Learning Container id, set `getLearningContainerId` on the
|
|
114
|
+
`CopilotKitIntelligence` instance in the same edit that constructs the runtime with
|
|
115
|
+
`intelligence`. Return that one id for every run. Do not add a file, a step, or a second
|
|
116
|
+
constructor for it, and never write an id the plan does not name: a selector pointing at an
|
|
117
|
+
id the platform does not hold answers `LEARNING_CONTAINER_NOT_FOUND` on every thread create.
|
|
118
|
+
Where the plan names no container, write no selector.
|
|
119
|
+
|
|
113
120
|
Report the runtime constructor you wrote. Name whether it passes `intelligence` or
|
|
114
|
-
`runner
|
|
121
|
+
`runner`, and whether it carries `getLearningContainerId`, with the id it returns.
|
|
122
|
+
A runtime built with `runner` is the SSE runtime and never reads the credential,
|
|
115
123
|
whatever the browser shows.
|
|
116
124
|
|
|
117
125
|
Gather what you need in as few commands as possible. Combine independent reads into one
|
|
@@ -19,7 +19,7 @@ Prove the live runtime in this order:
|
|
|
19
19
|
4. Confirm from project files that the runtime constructor passes a `runner` option rather
|
|
20
20
|
than an `intelligence` option. A package, import, project file, or key is not use proof.
|
|
21
21
|
5. Run
|
|
22
|
-
`npx --yes copilotkit@4.
|
|
22
|
+
`npx --yes copilotkit@4.10.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
|
|
23
23
|
with the runtime URL or auth header options that this project needs. Require exit zero
|
|
24
24
|
and the JSON `ok` field to be `true`.
|
|
25
25
|
6. Drive one real request through the existing frontend, CopilotKit runtime, and expected
|
|
@@ -73,6 +73,12 @@ started process's output. The project's configuration wins over the table.
|
|
|
73
73
|
Where this project's runtime runs as a process of its own, the frontend documentation
|
|
74
74
|
puts it on port 8200. Use the runtime URL from step 1 rather than that number.
|
|
75
75
|
|
|
76
|
+
Read the project's scripts before you start anything. A scaffolded starter serves both the
|
|
77
|
+
agent and the frontend from one `dev` script, which runs them under
|
|
78
|
+
`concurrently --kill-others`. One command starts both, and stopping either one stops the
|
|
79
|
+
other. A second start against a project already running that script collides with a server
|
|
80
|
+
that is up.
|
|
81
|
+
|
|
76
82
|
Start each server in the background with the project's own script. Then wait for it to
|
|
77
83
|
answer rather than for a fixed number of seconds:
|
|
78
84
|
|
|
@@ -89,8 +95,14 @@ Read the loop's own last line rather than assuming it ended because the server a
|
|
|
89
95
|
A server that never answered has written the reason to its own output, and reading that
|
|
90
96
|
output is faster than starting it again.
|
|
91
97
|
|
|
98
|
+
That coupling also turns an ordinary restart into a false failure. Where you stop a server
|
|
99
|
+
to pick up an installed dependency, start both again and wait for both to answer before you
|
|
100
|
+
read the round trip. A check run against a frontend whose agent was stopped with it reports
|
|
101
|
+
a wiring fault this run does not have.
|
|
102
|
+
|
|
92
103
|
Leave the agent and frontend servers running after proof. Record each process ID and a
|
|
93
|
-
safe command that stops that process. Record
|
|
104
|
+
safe command that stops that process. Record whether that command stops both. Record the
|
|
105
|
+
commands that start both servers again.
|
|
94
106
|
|
|
95
107
|
Record the frontend URL the server you started reports, and treat it as provisional. Step 4
|
|
96
108
|
replaces it with the URL the CLI resolves. Do not compose one of your own from a port you
|
|
@@ -123,7 +135,7 @@ IPv6 only, so an IPv4 literal fails against the correct port.
|
|
|
123
135
|
## Step 4 -- Check the wiring
|
|
124
136
|
|
|
125
137
|
With both running, check the wiring in one command before you open a browser:
|
|
126
|
-
`npx --yes copilotkit@4.
|
|
138
|
+
`npx --yes copilotkit@4.10.0 verify --json`. It reads the port from this project, so a
|
|
127
139
|
non-default port needs no flag. The payload reports `runtimeUrl` and `runtimeUrlSource`. A
|
|
128
140
|
`runtimeUrlSource` of `default` means nothing in the project named a port, so pass
|
|
129
141
|
`--runtime-url` with the URL from step 1 in that case. Read the individual checks rather than
|
|
@@ -138,14 +150,17 @@ used the Intelligence credential. `api_key_authenticates` proves only that the k
|
|
|
138
150
|
will not read. `verify` searches upward for the credential and a framework's env loader
|
|
139
151
|
does not, so a key at the repository root is invisible to an app in a subdirectory. The
|
|
140
152
|
check names the file to write instead. Write the key there, or run
|
|
141
|
-
`npx --yes copilotkit@4.
|
|
153
|
+
`npx --yes copilotkit@4.10.0 project select` from the app directory. Do not link,
|
|
142
154
|
copy, or symlink the file to work around it, and do not treat the credential as missing:
|
|
143
155
|
the check above already reported that it exists.
|
|
144
156
|
|
|
145
|
-
`intelligence_thread_routes` fails when a licensed runtime serves no thread routes. A
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
157
|
+
`intelligence_thread_routes` fails when a licensed runtime serves no thread routes. A missing
|
|
158
|
+
`identifyUser` is the usual cause: it gates the whole web surface. Return the check for
|
|
159
|
+
implementation to pass `identifyUser` where the runtime is constructed. Do not edit it.
|
|
160
|
+
A handler mounted `mode: "single-route"` is not a cause and must never be removed to satisfy
|
|
161
|
+
this check: that mount serves the thread routes inside its envelope. If the check is
|
|
162
|
+
`undetermined`, the runtime cannot report the state, and the check names the upgrade. Record
|
|
163
|
+
that and continue.
|
|
149
164
|
|
|
150
165
|
Take the frontend URL from the payload's `frontendUrl`. It replaces whatever step 2
|
|
151
166
|
recorded, and every later step uses it unchanged. Where the field is absent, the project
|
|
@@ -153,7 +168,7 @@ named no port the CLI can read: keep step 2's URL, and rewrite its host as `loca
|
|
|
153
168
|
before you use it.
|
|
154
169
|
|
|
155
170
|
Then run the command once more with the URL you are about to open:
|
|
156
|
-
`npx --yes copilotkit@4.
|
|
171
|
+
`npx --yes copilotkit@4.10.0 verify --frontend-url <that url> --json`. The
|
|
157
172
|
`frontend_assets_served` check asks that server for its page and for one of the page's own
|
|
158
173
|
assets, on that exact host. A `fail` there means the dev server refuses its own static
|
|
159
174
|
assets on the host you were about to use, and the check names the URL to use instead. This
|
|
@@ -161,7 +176,7 @@ is the cheapest step that can save the most expensive one, so run it before the
|
|
|
161
176
|
|
|
162
177
|
## Step 5 -- Prove that the agent runs
|
|
163
178
|
|
|
164
|
-
Run `npx --yes copilotkit@4.
|
|
179
|
+
Run `npx --yes copilotkit@4.10.0 verify --round-trip --json`. It sends one request through
|
|
165
180
|
the runtime and reads the answer back from the thread, so it separates an agent that is
|
|
166
181
|
configured from an agent that works. Use `--agent <id>` when the runtime declares more
|
|
167
182
|
than one. If it reports `user-not-identified`, this project's `identifyUser` reads a
|
|
@@ -170,6 +185,38 @@ it again, because an auth-gated app refusing an unauthenticated caller is that a
|
|
|
170
185
|
working. Do not continue until this passes, and never report a round trip proven without
|
|
171
186
|
it.
|
|
172
187
|
|
|
188
|
+
Where this run settled a Learning Container, add the flag to the call above rather than
|
|
189
|
+
running a second round trip:
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
npx --yes copilotkit@4.10.0 verify --round-trip --expect-learning-container <container id> --json
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
The check reads the thread that this run created, so a second round trip proves a second
|
|
196
|
+
thread and leaves the first unexamined. Add `--agent <id>` here too when the runtime
|
|
197
|
+
declares more than one.
|
|
198
|
+
|
|
199
|
+
It reads the thread back from the platform, so it answers for every runtime mount,
|
|
200
|
+
including a single-route one. Read the `extraChecks` entry whose `id` is
|
|
201
|
+
`learning_container_assigned`, and route on that entry's own `status` rather than on the
|
|
202
|
+
exit status: the command exits non-zero for any check that is not `pass`, and
|
|
203
|
+
`undetermined` is what a runtime the CLI cannot read reports.
|
|
204
|
+
|
|
205
|
+
- `pass` proves the assignment. The thread came back carrying the container this run
|
|
206
|
+
settled.
|
|
207
|
+
- `fail` is a defect. Either the thread carries no container, which means the selector
|
|
208
|
+
returned nothing, or it carries a different one. A thread cannot move between containers
|
|
209
|
+
after its first assignment, so start a new thread rather than repairing that one.
|
|
210
|
+
- `undetermined` proves nothing either way. Record it and continue. An auth-gated
|
|
211
|
+
`identifyUser` produces it on an app that works, and so does a runtime the CLI cannot
|
|
212
|
+
read.
|
|
213
|
+
|
|
214
|
+
`features.self_learning` and `/info` are not evidence. The first is a plan entitlement and
|
|
215
|
+
is already true before any wiring. The second reports Learning from the presence of a
|
|
216
|
+
callback rather than from an assigned thread. Never report either one as proof.
|
|
217
|
+
|
|
218
|
+
Where this run skipped the Learning step, leave the flag off.
|
|
219
|
+
|
|
173
220
|
### Step 5a -- Prove that the page's data reaches the model
|
|
174
221
|
|
|
175
222
|
`verify --round-trip` sends `context: []` and asks a question that needs no context. It
|
|
@@ -232,13 +279,13 @@ holds. Streamed text alone is not this step's outcome, whatever it says.
|
|
|
232
279
|
This is the step that covers realtime delivery, the frontend provider being wired to this
|
|
233
280
|
runtime, and the component actually rendering, and no command-line check reaches any of
|
|
234
281
|
them. It is not optional polish: a run that skips it has proven the agent and not the
|
|
235
|
-
journey, and
|
|
282
|
+
journey, and such a run ends as blocked rather than complete.
|
|
236
283
|
|
|
237
284
|
For a recorded `both-oss` starting state, this step has no component to render. Send the
|
|
238
285
|
same request the baseline recorded, require the same kind of user-visible result the
|
|
239
286
|
baseline produced, and require that the thread for that request is listed in the drawer.
|
|
240
287
|
Where this journey's frontend framework ships no threads drawer -- React Native --, prove
|
|
241
|
-
that thread with `npx --yes copilotkit@4.
|
|
288
|
+
that thread with `npx --yes copilotkit@4.10.0 verify --round-trip`, which reads the
|
|
242
289
|
answer back off the thread and needs no browser. Record which of the two you proved.
|
|
243
290
|
|
|
244
291
|
Use the surface control the main coding agent recorded for your environment. It either had
|
|
@@ -266,7 +313,7 @@ request never exercises. Drive it with the browser control step 6 named.
|
|
|
266
313
|
the page to finish loading. Do not retype the host, and do not substitute a URL a tool
|
|
267
314
|
offers you by default. Where the page loads but its styling is missing or the chat
|
|
268
315
|
control is dead, run
|
|
269
|
-
`npx --yes copilotkit@4.
|
|
316
|
+
`npx --yes copilotkit@4.10.0 verify --frontend-url <the url you opened> --json`
|
|
270
317
|
before you diagnose anything else. A dev server can serve its page and refuse every
|
|
271
318
|
static chunk behind it, and on screen that is indistinguishable from a broken
|
|
272
319
|
integration. The `frontend_assets_served` check tells the two apart.
|