copilotkit 4.26.0 → 4.27.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 +271 -25
- package/cli-build-info.json +7 -7
- package/index.js +6785 -3294
- package/onboarding/index.json +2 -2
- package/onboarding/prompts/authenticate/start.md +28 -23
- package/onboarding/prompts/conversion/plan.md +3 -3
- package/onboarding/prompts/credentials/finalize-plan.md +34 -25
- package/onboarding/prompts/credentials/plan.md +46 -33
- package/onboarding/prompts/credentials/settle-credentials.md +38 -14
- package/onboarding/prompts/credentials/write-plan.md +104 -47
- package/onboarding/prompts/deployment/choose-local.md +17 -20
- package/onboarding/prompts/deployment/local-evaluation.md +45 -21
- package/onboarding/prompts/fallback/best-effort.md +11 -9
- package/onboarding/prompts/feature/a2ui/implement.md +4 -4
- package/onboarding/prompts/feature/a2ui/plan.md +3 -3
- package/onboarding/prompts/feature/a2ui/proof.md +5 -5
- package/onboarding/prompts/feature/a2ui/start.md +10 -8
- package/onboarding/prompts/feature/channels/implement.md +11 -8
- package/onboarding/prompts/feature/channels/plan.md +15 -7
- package/onboarding/prompts/feature/channels/proof.md +5 -5
- package/onboarding/prompts/feature/channels/start.md +11 -10
- package/onboarding/prompts/feature/chat-suggestions/implement.md +4 -4
- package/onboarding/prompts/feature/chat-suggestions/plan.md +3 -3
- package/onboarding/prompts/feature/chat-suggestions/proof.md +5 -5
- package/onboarding/prompts/feature/chat-suggestions/start.md +10 -8
- package/onboarding/prompts/feature/complete.md +2 -2
- package/onboarding/prompts/feature/learning/implement.md +14 -12
- package/onboarding/prompts/feature/learning/plan.md +4 -4
- package/onboarding/prompts/feature/learning/proof.md +24 -14
- package/onboarding/prompts/feature/learning/start.md +8 -8
- package/onboarding/prompts/feature/open-generative-ui/implement.md +4 -4
- package/onboarding/prompts/feature/open-generative-ui/plan.md +3 -3
- package/onboarding/prompts/feature/open-generative-ui/proof.md +5 -5
- package/onboarding/prompts/feature/open-generative-ui/start.md +10 -8
- package/onboarding/prompts/feature/realtime-sync/implement.md +7 -5
- package/onboarding/prompts/feature/realtime-sync/plan.md +3 -3
- package/onboarding/prompts/feature/realtime-sync/proof.md +5 -5
- package/onboarding/prompts/feature/realtime-sync/start.md +7 -7
- package/onboarding/prompts/feature/rich-threads/implement.md +8 -6
- package/onboarding/prompts/feature/rich-threads/plan.md +3 -3
- package/onboarding/prompts/feature/rich-threads/proof.md +5 -5
- package/onboarding/prompts/feature/rich-threads/start.md +7 -7
- package/onboarding/prompts/feature/stop.md +4 -4
- package/onboarding/prompts/feature/voice/implement.md +4 -4
- package/onboarding/prompts/feature/voice/plan.md +4 -4
- package/onboarding/prompts/feature/voice/proof.md +5 -5
- package/onboarding/prompts/feature/voice/start.md +10 -8
- package/onboarding/prompts/framework/ag2.md +20 -5
- package/onboarding/prompts/framework/agno.md +25 -9
- package/onboarding/prompts/framework/built-in.md +21 -6
- package/onboarding/prompts/framework/claude-sdk-python.md +11 -5
- package/onboarding/prompts/framework/claude-sdk-typescript.md +13 -6
- package/onboarding/prompts/framework/crewai-flows.md +24 -10
- package/onboarding/prompts/framework/custom-ag-ui.md +62 -28
- package/onboarding/prompts/framework/deep-agents.md +26 -9
- package/onboarding/prompts/framework/google-adk.md +18 -5
- package/onboarding/prompts/framework/langgraph-fastapi.md +20 -5
- package/onboarding/prompts/framework/langgraph-python.md +20 -5
- package/onboarding/prompts/framework/langgraph-typescript.md +27 -7
- package/onboarding/prompts/framework/llamaindex.md +24 -8
- package/onboarding/prompts/framework/mastra.md +21 -8
- package/onboarding/prompts/framework/ms-agent-dotnet.md +24 -6
- package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +24 -5
- package/onboarding/prompts/framework/ms-agent-python.md +21 -5
- package/onboarding/prompts/framework/pydantic-ai.md +20 -5
- package/onboarding/prompts/framework/strands-python.md +27 -12
- package/onboarding/prompts/framework/strands-typescript.md +27 -12
- package/onboarding/prompts/frontend/angular.md +4 -4
- package/onboarding/prompts/frontend/nextjs.md +4 -4
- package/onboarding/prompts/frontend/plan.md +21 -13
- package/onboarding/prompts/frontend/react-native.md +3 -3
- package/onboarding/prompts/frontend/react-spa.md +3 -3
- package/onboarding/prompts/frontend/vue.md +3 -3
- package/onboarding/prompts/implementation/build-and-validate.md +25 -20
- package/onboarding/prompts/proof/complete.md +10 -7
- package/onboarding/prompts/proof/oss-baseline.md +6 -6
- package/onboarding/prompts/proof/round-trip.md +10 -10
- package/onboarding/prompts/research/gather.md +8 -8
- package/onboarding/prompts/research/merge.md +3 -3
- package/onboarding/prompts/research/preflight.md +2 -2
- package/onboarding/prompts/research/route.md +4 -4
- package/onboarding/prompts/setup/questions.md +192 -159
- package/onboarding/prompts/starter/clone.md +126 -51
- package/onboarding/prompts/stopped/run-failed.md +5 -3
- package/onboarding/prompts/subagent/create-plan.md +73 -20
- package/onboarding/prompts/subagent/implement-and-validate.md +30 -14
- package/onboarding/prompts/subagent/inspect-repository.md +3 -2
- package/onboarding/prompts/subagent/prove-oss-baseline.md +10 -5
- package/onboarding/prompts/subagent/prove-round-trip.md +23 -14
- package/onboarding/prompts/unsupported/no-validated-path.md +5 -4
- package/package.json +1 -1
- package/release/release-tool.js +12 -2
package/README.md
CHANGED
|
@@ -291,7 +291,10 @@ Under `--json`, the first `authentication_url` record is the URL with the code
|
|
|
291
291
|
in it, and it also carries `user_code` and `expires_at`. A renewed code writes
|
|
292
292
|
another `authentication_url` record, with `renewed: true` and its `renewal`
|
|
293
293
|
number, and another `action_required` record. The old page then shows an
|
|
294
|
-
expired code, so show the developer the new one.
|
|
294
|
+
expired code, so show the developer the new one. If an earlier `login` on this
|
|
295
|
+
machine stopped while its code was still valid, the next one reuses that code
|
|
296
|
+
instead of requesting a new one, and its `authentication_url` record carries
|
|
297
|
+
`resumed: true`. A sign-in that ends without a session writes a `failed`
|
|
295
298
|
record with `reason: expired` or `reason: access_denied`, and with
|
|
296
299
|
`retry: ask_developer`: a person must act before a new code can work. If a
|
|
297
300
|
code expired and the request for its replacement failed, for example on a rate
|
|
@@ -323,10 +326,12 @@ Run `onboard start` in the project folder, or in an empty folder for a new app.
|
|
|
323
326
|
|
|
324
327
|
`onboard start` is meant for a coding agent. If stdout is a terminal and the CLI
|
|
325
328
|
detects no coding agent, it prints the agent prompt as usual and then a short
|
|
326
|
-
note for a person.
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
329
|
+
note for a person. Most such people came from a coding agent that asked them
|
|
330
|
+
to run the command. The note sends them back to that agent, or tells them to
|
|
331
|
+
open one in the folder, with a line to paste. The line tells the agent to run
|
|
332
|
+
the command itself, because it is not interactive, and continues the same run.
|
|
333
|
+
An agent that the CLI does not detect reads the full prompt above the note, so
|
|
334
|
+
the note does not block it.
|
|
330
335
|
|
|
331
336
|
### Where a run keeps its state
|
|
332
337
|
|
|
@@ -461,7 +466,7 @@ The fields:
|
|
|
461
466
|
- `local setup` and `local update` check Docker before their progress starts. If that
|
|
462
467
|
check fails, the CLI still sends a failed setup. Its `failed_setup_phase` is
|
|
463
468
|
`docker-check`, and it carries a `failure_reason`.
|
|
464
|
-
- On Ctrl-C or
|
|
469
|
+
- On Ctrl-C, SIGTERM, or SIGHUP, the open phase and the total send `outcome: abandoned` before
|
|
465
470
|
the CLI exits. The total adds `abandoned_setup_phase` and the `bytes_downloaded` so
|
|
466
471
|
far. The CLI waits at most 2 seconds for these sends, then exits with the signal's
|
|
467
472
|
usual status.
|
|
@@ -1058,6 +1063,13 @@ is. The onboarding run keeps the choice for that directory only, so later
|
|
|
1058
1063
|
`onboard credentials` and `onboard model-key` calls from there use `.env.local`
|
|
1059
1064
|
without the flag, and calls from any other directory use `.env`.
|
|
1060
1065
|
|
|
1066
|
+
Once the project key is in a `.env.local` that git ignores and the app's runtime
|
|
1067
|
+
reads, beside a `.env` that git tracks, the CLI treats that file as your choice
|
|
1068
|
+
for the app. A new onboarding run,
|
|
1069
|
+
`license`, and `local connect` write there too, and none of them asks you to
|
|
1070
|
+
untrack `.env` again. The Channels setup commands still read and write `.env`
|
|
1071
|
+
only.
|
|
1072
|
+
|
|
1061
1073
|
## Onboarding backups and restore
|
|
1062
1074
|
|
|
1063
1075
|
`copilotkit onboard start` backs up the project before the run changes anything.
|
|
@@ -1067,23 +1079,37 @@ It prints one line on stderr that names the run whose backup it is.
|
|
|
1067
1079
|
untracked file, kept under the private ref `refs/copilotkit/backup/<run-id>`.
|
|
1068
1080
|
The CLI builds it in a temporary index, so your index, working tree, branch and
|
|
1069
1081
|
stash do not change. Env and credential files (`.env`, `.env.*`, `.dev.vars`,
|
|
1070
|
-
`.envrc`, `credentials`, `*.tfvars`, `secrets.*`, `.npmrc`,
|
|
1082
|
+
`.envrc`, `credentials`, `*.tfvars`, `*.tfstate`, `secrets.*`, `.npmrc`,
|
|
1083
|
+
`.pypirc`, `.git-credentials`, `.pgpass`, `kubeconfig`, `auth.json`, `*.pem`,
|
|
1071
1084
|
`*.key` and similar) never go into that ref, because `git push --mirror` sends
|
|
1072
|
-
it. When they are changed, untracked or ignored,
|
|
1073
|
-
backups folder, readable by you only.
|
|
1085
|
+
it. When they are changed, untracked or ignored, also inside an ignored
|
|
1086
|
+
folder, the CLI copies them to the backups folder, readable by you only.
|
|
1074
1087
|
- Outside a repository, the backup is a copy of the folder, except
|
|
1075
1088
|
`node_modules`, `dist`, `build`, `.next`, `venv`, `.venv`, `__pycache__`,
|
|
1076
1089
|
`.cache` and `.turbo`.
|
|
1077
1090
|
- A file over 20 MB, or an untracked folder with more than 5,000 files, is left
|
|
1078
1091
|
out and named in the closing report. The run still starts.
|
|
1092
|
+
- The backup cannot hold a changed submodule, a nested repository, a symlink, or
|
|
1093
|
+
a staged version of a file that the working tree no longer has. The start line
|
|
1094
|
+
counts them, and the closing report names each one with its reason. An ignored
|
|
1095
|
+
folder that takes too long to search for credential files is named the same
|
|
1096
|
+
way.
|
|
1079
1097
|
- A run that starts in a folder holding several projects takes its backup when
|
|
1080
1098
|
it moves to the one you choose with `onboard start --move`.
|
|
1099
|
+
- A backup that fails is recorded for the run. When a run has no backup, the
|
|
1100
|
+
closing report says that a restore has nothing to put back.
|
|
1101
|
+
- `onboard credentials` reports the backup as `backup.status`: `ok`, `partial`
|
|
1102
|
+
with each path it left out and why, `pending` when the backup waits for
|
|
1103
|
+
`onboard start --move`, or `failed` with the cause. A symlink to a file or
|
|
1104
|
+
folder the backup holds does not count as left out. The onboarding plan counts
|
|
1105
|
+
a `partial` or `failed` backup as a risky change and waits for your answer.
|
|
1081
1106
|
|
|
1082
1107
|
Backups live in `~/.copilotkit/backups/<run-id>/`, or in
|
|
1083
1108
|
`$COPILOTKIT_CONFIG_DIR/backups/` when that is set. Besides the current run, the
|
|
1084
1109
|
CLI keeps the newest four ended runs for up to 14 days, and the newest five runs
|
|
1085
1110
|
that have not ended for up to 90 days, because such a run can still be going on
|
|
1086
|
-
in another project.
|
|
1111
|
+
in another project. A run that has not ended is ranked by the last step it was
|
|
1112
|
+
served, so a long run is not deleted by later starts. It deletes the git ref with the folder. A run that a start
|
|
1087
1113
|
re-enters or `onboard resume` carries on counts as not ended again, and its age
|
|
1088
1114
|
counts from then.
|
|
1089
1115
|
|
|
@@ -1099,7 +1125,8 @@ copilotkit onboard restore --run <run-id> --path src/app.ts
|
|
|
1099
1125
|
A restore keeps the files the run added. It skips a file you changed after the
|
|
1100
1126
|
run ended, unless you add `--force`. A run that stopped with no closing report
|
|
1101
1127
|
has no recorded end, so the CLI cannot tell its edits from yours: a restore then
|
|
1102
|
-
puts back deleted files
|
|
1128
|
+
puts back deleted files, and files that hold only the version committed at the
|
|
1129
|
+
start, which git keeps. Any other changed file needs `--force`. It exits 1 when the run has no backup or a
|
|
1103
1130
|
`--path` is not in the backup.
|
|
1104
1131
|
|
|
1105
1132
|
### Tripwire
|
|
@@ -1108,13 +1135,34 @@ Before each step, the CLI checks the project against the backup. It stops the ru
|
|
|
1108
1135
|
and shows you what changed when:
|
|
1109
1136
|
|
|
1110
1137
|
- a file you had uncommitted changes in is deleted,
|
|
1138
|
+
- a file you had uncommitted changes in loses lines you added, in whole or in
|
|
1139
|
+
part, and nothing new takes their place: `git checkout -- .`, `git restore .`
|
|
1140
|
+
and `git checkout -p` do this, and so does a revert followed by an edit
|
|
1141
|
+
elsewhere in the file, or a file put back to its staged version,
|
|
1111
1142
|
- more than 10 files are deleted,
|
|
1112
1143
|
- HEAD no longer contains the commit the run started on, or
|
|
1113
1144
|
- a stash entry of this worktree was added or removed.
|
|
1114
1145
|
|
|
1115
|
-
|
|
1116
|
-
content moved to a new path counts as renamed, not deleted.
|
|
1117
|
-
|
|
1146
|
+
Other edits, new files, env files and dependency files never stop it. A file
|
|
1147
|
+
whose content moved to a new path counts as renamed, not deleted. One deleted
|
|
1148
|
+
committed file does not stop it either: git and the backup both hold it, and the
|
|
1149
|
+
closing report lists it with the restore command. A new branch that still
|
|
1150
|
+
contains the start commit does not stop it.
|
|
1151
|
+
|
|
1152
|
+
The revert check ignores trailing whitespace, line endings and blank lines. A
|
|
1153
|
+
formatter that strips them does not stop the run. Leading indentation counts,
|
|
1154
|
+
because it is content in Python, YAML and Makefiles. A line the run rewrites is
|
|
1155
|
+
an edit, not a revert. A line the run moves, sorts or swaps is still in the
|
|
1156
|
+
file, so it does not stop the run. Lines count by occurrence: when you wrote a
|
|
1157
|
+
line twice and the run removes one copy, the run stops. Credential files such
|
|
1158
|
+
as `.npmrc` count too. The check reads only files that changed since the
|
|
1159
|
+
start. A file over 1 MB, or a file that is not text, counts only when it holds
|
|
1160
|
+
the committed version exactly. After `copilotkit onboard tripwire --continue`,
|
|
1161
|
+
a reverted file stays accepted until its content changes. A new modification
|
|
1162
|
+
time alone does not end it.
|
|
1163
|
+
|
|
1164
|
+
A restore from the stop puts back each file as it was at the start. The run's
|
|
1165
|
+
other edits to those files are lost.
|
|
1118
1166
|
|
|
1119
1167
|
Every worktree of a repository shares one stash list, so the tripwire compares
|
|
1120
1168
|
stash entries by commit. An entry that existed at the start always counts, so
|
|
@@ -1283,6 +1331,10 @@ browser. `verify` reads the runtime's own reported license to tell the two
|
|
|
1283
1331
|
apart, and only a running runtime can answer that, so the check stays `UNKNOWN`
|
|
1284
1332
|
when the runtime is unreachable.
|
|
1285
1333
|
|
|
1334
|
+
For SSE runtimes, `--round-trip` reports an AG-UI `RUN_ERROR` message before
|
|
1335
|
+
polling for a saved answer. Intelligence JSON responses do not carry these
|
|
1336
|
+
events; inspect runtime and agent logs when that transport reports no answer.
|
|
1337
|
+
|
|
1286
1338
|
Every check reports `PASS`, `FAIL`, or `UNKNOWN`, and `UNKNOWN` never means the
|
|
1287
1339
|
check passed — an unreachable Intelligence API leaves the API key unproven
|
|
1288
1340
|
rather than condemning it. `verify` exits non-zero unless every check passed, so
|
|
@@ -1437,7 +1489,9 @@ is the project's own code and usually reads a signed-in session, which a CLI
|
|
|
1437
1489
|
request does not carry, so an auth-gated app refusing it is that app working
|
|
1438
1490
|
correctly. Pass what it reads with `--header`, repeatable. `verify` sends
|
|
1439
1491
|
the header on every request to the runtime, `/info` included, so a runtime
|
|
1440
|
-
behind auth needs no local proxy.
|
|
1492
|
+
behind auth needs no local proxy. If `/info` answers 401 or 403,
|
|
1493
|
+
`runtime_reachable` names `--header` as the fix, not `--runtime-url`. If the run
|
|
1494
|
+
already sent headers, it names the headers that the runtime refused.
|
|
1441
1495
|
|
|
1442
1496
|
### Proving a thread the app created
|
|
1443
1497
|
|
|
@@ -1571,6 +1625,13 @@ It needs no bound run. The URL must name the mount path: a bare
|
|
|
1571
1625
|
`http://localhost:3001` is refused, because `verify` would probe `/`. With no
|
|
1572
1626
|
project record, it writes nothing and exits non-zero.
|
|
1573
1627
|
|
|
1628
|
+
Inside an onboarding run, a `verify --round-trip --runtime-url <url>` that
|
|
1629
|
+
passes on a runtime other than the recorded one does not count for the run.
|
|
1630
|
+
`verify` says so on stderr, and in `roundTripNotRecorded` with `--json`, and
|
|
1631
|
+
names this command. `onboard proof` then names that runtime too. The CLI reads
|
|
1632
|
+
`localhost`, `127.0.0.1`, `0.0.0.0`, and `[::1]` on the same port and path as
|
|
1633
|
+
one runtime.
|
|
1634
|
+
|
|
1574
1635
|
### A model key has no credits or is rejected
|
|
1575
1636
|
|
|
1576
1637
|
A key with no credits passes every static check. The first model call then
|
|
@@ -1597,18 +1658,90 @@ in the environment instead. A key you export in the shell, or set with direnv or
|
|
|
1597
1658
|
the value came from: `env-file` or `environment`.
|
|
1598
1659
|
|
|
1599
1660
|
- `pass`: the vendor served a model call with the key.
|
|
1600
|
-
- `fail`: the vendor refused the key. The cause is
|
|
1601
|
-
`model_auth` (a rejected key)
|
|
1661
|
+
- `fail`: the vendor refused the key or the app's model. The cause is
|
|
1662
|
+
`model_quota` (no credits), `model_auth` (a rejected key), or
|
|
1663
|
+
`model_unavailable` (the vendor does not serve the app's model to this key).
|
|
1602
1664
|
- `missing`: neither the env file nor the environment holds a real value for
|
|
1603
1665
|
the key.
|
|
1604
1666
|
- `unsupported` or `undetermined`: the check did not settle it. A rate limit, a
|
|
1605
1667
|
vendor outage, or a probe model the key may not use proves nothing about the
|
|
1606
1668
|
key, so none of them is a `fail`.
|
|
1607
1669
|
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1670
|
+
The probe proves the key, not the app's model. When `COPILOTKIT_AGENT_MODEL` names the
|
|
1671
|
+
app's model as `provider:model` or `provider/model`, for the same vendor as the key, the
|
|
1672
|
+
command also sends a one-token call with that model. For OpenAI, that call goes through
|
|
1673
|
+
the Responses API, which the AI SDK uses. The JSON reports the model as `model`, where
|
|
1674
|
+
it was set as `modelSource`, and the env file that holds it as `modelFile`. The fix for a
|
|
1675
|
+
refused model names that file. The key and the model can live in different files, as in
|
|
1676
|
+
the Microsoft Agent Framework Python starter. A model the vendor says it does not serve is a `fail` with
|
|
1677
|
+
the cause `model_unavailable`. When the probe passed, the message names the probe model
|
|
1678
|
+
as one the same key can use. After the probe passed, a 403 or a spent quota on the app's
|
|
1679
|
+
model is `model_unavailable` too: the key works, and Google gives some models no free-tier
|
|
1680
|
+
quota. A bare 404 is `undetermined`, because a wrong base URL path answers 404 too. The command reads the variable from the shell first, then from the service whose base URL
|
|
1681
|
+
the key goes to, or else from the first service that sets it (see below). The JSON names
|
|
1682
|
+
that file as `modelFile`, and the fix for a refused model names it too.
|
|
1683
|
+
|
|
1684
|
+
A base URL on OpenAI's own hosts, including a regional one such as
|
|
1685
|
+
`eu.api.openai.com`, is still OpenAI: the command sends its usual calls to that host.
|
|
1686
|
+
|
|
1687
|
+
When `OPENAI_BASE_URL` points at an OpenAI-compatible
|
|
1688
|
+
provider, such as OpenRouter, Groq, or a local Ollama, the command asks that
|
|
1689
|
+
endpoint for its model list instead. A Python agent also reads the older
|
|
1690
|
+
`OPENAI_API_BASE`: LlamaIndex reads only that name, and LangChain's `ChatOpenAI` falls back
|
|
1691
|
+
to it. So when the key's env file belongs to a Python agent, the command counts
|
|
1692
|
+
`OPENAI_API_BASE` as the endpoint. A Python agent's env file is one whose directory, or the `agent` directory below it,
|
|
1693
|
+
holds `pyproject.toml`, `requirements.txt`, `setup.py`, `Pipfile` or `uv.lock`. A
|
|
1694
|
+
JavaScript app with `BuiltInAgent` or the AI SDK reads only `OPENAI_BASE_URL`. When only
|
|
1695
|
+
`OPENAI_API_BASE` points at another provider there, the app sends the key to OpenAI. So
|
|
1696
|
+
the command sends it nowhere and reports `undetermined` with the reason `unread-base-url`.
|
|
1697
|
+
The AI SDK adds the route after the whole base URL, so a base URL with a query string
|
|
1698
|
+
makes the app call a URL such as `…/v1?x=1/chat/completions`. The command sends nothing
|
|
1699
|
+
for it and reports `undetermined` with the reason `base-url-query`. The command reads the base URL from each service
|
|
1700
|
+
that loads env files: the app, whose directory holds the key's `.env` or `.env.local`
|
|
1701
|
+
(never the working directory), and, in `onboard credentials`, the directory of each
|
|
1702
|
+
`--copy-to` target, such as an agent service that runs from `agent/`. Each service reads
|
|
1703
|
+
its `.env.local` before its `.env`, as the app loads them, and its base URL and model go
|
|
1704
|
+
together. The key's own file counts too when it is outside the app, and so do the key
|
|
1705
|
+
file and the base URL that `onboard setup-answers` recorded: `--copy-to` copies the base
|
|
1706
|
+
URL along with the key, from the key file or else from the recorded answer. When the run
|
|
1707
|
+
chose an OpenAI-compatible provider, in `onboard classify` or the setup answers, and no
|
|
1708
|
+
base URL is found, the command sends nothing and reports `undetermined` with the reason
|
|
1709
|
+
`compatible-base-url-missing`. A key with another provider's prefix, such as `gsk_` or
|
|
1710
|
+
`sk-or-`, never goes to OpenAI either: with no base URL it is `undetermined` with the
|
|
1711
|
+
reason `key-not-openai`. So a key in `.env.local` is checked against a base URL in `.env`, and a key kept in
|
|
1712
|
+
a file outside the app is checked against the right endpoint. When the shell and the
|
|
1713
|
+
services name different base URLs (the scheme and host compare without regard to case),
|
|
1714
|
+
the command sends nothing and reports `undetermined` with the reason
|
|
1715
|
+
`endpoint-conflict`. The JSON names the vendor `openai-compatible` and the endpoint's
|
|
1716
|
+
host as `endpointHost`. With `COPILOTKIT_AGENT_MODEL` set, the command sends a
|
|
1717
|
+
one-token chat with that model to `{base}/chat/completions` instead, which gives a
|
|
1718
|
+
real `pass` or `fail`. A key that the endpoint calls invalid is a `fail`, including
|
|
1719
|
+
OpenRouter's numeric code 401. A 402 is a `fail` with the cause `model_quota`: OpenRouter
|
|
1720
|
+
answers a key with no credit that way. A 404 whose message names the app's model, as
|
|
1721
|
+
Ollama answers a model it has not pulled, is a `fail` with the cause
|
|
1722
|
+
`model_unavailable`. Any
|
|
1723
|
+
other refusal is `undetermined` with the reason `endpoint-refused-key`, because
|
|
1724
|
+
a gateway can want a header that the app adds itself. An accepted key is
|
|
1725
|
+
`undetermined` with the reason `endpoint-accepted-key`, because a model list
|
|
1726
|
+
does not prove that a model call is paid for. The command does not send the key
|
|
1727
|
+
when an Anthropic or Google base URL points the SDK at another endpoint, when
|
|
1728
|
+
only the shell sets the base URL for a key in the env file, or when the shell
|
|
1729
|
+
exports a different value for the key. It never prints the key,
|
|
1730
|
+
the base URL's path, or the vendor's error message, because a vendor can echo part of
|
|
1731
|
+
the key in it. It refuses a redirect, so the key never reaches a host that the base URL
|
|
1732
|
+
does not name. A redirect is `undetermined` with the reason `base-url-redirect`: set the
|
|
1733
|
+
base URL to the final address.
|
|
1734
|
+
|
|
1735
|
+
A local server, such as Ollama or LM Studio, needs no key. A local server is an
|
|
1736
|
+
`OPENAI_BASE_URL` in an env file on `localhost`, `127.0.0.1` or `::1`. The OpenAI SDKs
|
|
1737
|
+
still refuse an empty key, so the app needs the stand-in value `not-needed`. When the key
|
|
1738
|
+
is empty or a placeholder, it is `missing` with the reason `local-endpoint-no-key`, and
|
|
1739
|
+
nothing is sent. `onboard credentials` then tells the agent to write `not-needed` to the
|
|
1740
|
+
key's own env file. When the key is `not-needed`, the command asks the server without a
|
|
1741
|
+
key. A model list answer is `undetermined` with the reason `keyless-local-endpoint`. With
|
|
1742
|
+
`COPILOTKIT_AGENT_MODEL` set, the one-token chat gives a `pass` or a `fail`. When the
|
|
1743
|
+
server answers 401 or 403, the key is `missing` with the reason `endpoint-refused-key`.
|
|
1744
|
+
For any other base URL, `not-needed` is an ordinary key value.
|
|
1612
1745
|
|
|
1613
1746
|
During an onboarding run, a `pass` also replaces a `missing` or `fail` that the
|
|
1614
1747
|
credentials step kept for the same key in the same env file. So after the
|
|
@@ -1630,6 +1763,92 @@ binds with a key. Otherwise it asks for the project name. With `--create` or
|
|
|
1630
1763
|
`--project`, it runs `project select`, retries once when no key was written, and
|
|
1631
1764
|
checks the record and the key. Then it reads the default Learning Container.
|
|
1632
1765
|
|
|
1766
|
+
When the run recorded the developer's project answer from the setup message, the
|
|
1767
|
+
project-name question carries it as `question.recorded`, and the run uses it
|
|
1768
|
+
without asking again. `onboard setup-answers` records that answer:
|
|
1769
|
+
|
|
1770
|
+
```bash
|
|
1771
|
+
copilotkit onboard setup-answers --create billing-portal --key-file ~/keys/openai.env
|
|
1772
|
+
copilotkit onboard setup-answers
|
|
1773
|
+
```
|
|
1774
|
+
|
|
1775
|
+
It records every answer from the setup message for the bound run, so a later
|
|
1776
|
+
step reads it even after the coding agent lost its context:
|
|
1777
|
+
|
|
1778
|
+
- `--purpose <text>`, `--framework <name>`, and `--frontend <name>`.
|
|
1779
|
+
`--framework` takes a framework slug or a name from the `setup/questions`
|
|
1780
|
+
table. Another framework's name is recorded as `frameworkName`, with
|
|
1781
|
+
`framework` set to `custom-ag-ui`, the route that builds it. A name close to
|
|
1782
|
+
a table row is refused with that row named. Add `--custom-framework` to
|
|
1783
|
+
record it as given.
|
|
1784
|
+
- `--vendor <openai|anthropic|google|openai-compatible|other>`, with
|
|
1785
|
+
`--vendor-choice <developer|default|existing>`. An OpenAI-compatible provider
|
|
1786
|
+
also needs `--base-url <url>`, an http or https URL with no user, password, or
|
|
1787
|
+
key in its query or path, and `--model-id <id>`.
|
|
1788
|
+
- The project answer: `--create <name>` or `--project <slug-or-id>`.
|
|
1789
|
+
- The key-file answer: `--key-file <path>` or `--key-later`.
|
|
1790
|
+
- On the local route, the Learning model answer (`--learning later`,
|
|
1791
|
+
`--learning guided`, or `--learning-file <path>`), the connection approval
|
|
1792
|
+
(`--connection approved|declined`), and the approval to write to an env file
|
|
1793
|
+
or `.copilotkit/project.json` with uncommitted changes
|
|
1794
|
+
(`--uncommitted-writes approved|declined`).
|
|
1795
|
+
|
|
1796
|
+
A later call replaces only the answers it names. The vendor flags replace the
|
|
1797
|
+
recorded vendor answer as a whole. With no flag, it prints what the run recorded
|
|
1798
|
+
as JSON. It never reads the key from the key file or the model file, but `--key-file`
|
|
1799
|
+
must name an existing file. When the key file sets `OPENAI_BASE_URL`, the JSON shows it as
|
|
1800
|
+
`keyFileBaseUrl`, and `--vendor openai-compatible` takes it in place of `--base-url`. Any other value is refused, and the message does not repeat it.
|
|
1801
|
+
A free-text answer shaped like a key, such as an `sk-`, `gsk_`, or `AIza` key or
|
|
1802
|
+
a long random token, is refused the same way.
|
|
1803
|
+
|
|
1804
|
+
Only the developer accepts the local evaluation agreement, in their own
|
|
1805
|
+
terminal, with `copilotkit local accept-terms`. The command refuses to run
|
|
1806
|
+
without a terminal or when a coding agent runs it. It shows the agreement, its
|
|
1807
|
+
version, the organization, and the signed-in email, and stores the acceptance in
|
|
1808
|
+
`local/eula-acceptance.json` in the CLI configuration directory (mode 600).
|
|
1809
|
+
New local setup and `init --local` use a stored acceptance while it matches the
|
|
1810
|
+
current agreement, organization, and user. Renewal asks every time: under a
|
|
1811
|
+
coding agent, the developer runs `local renew` in their own terminal. A coding
|
|
1812
|
+
agent cannot pass `--accept-eula-version`; scripts still can.
|
|
1813
|
+
|
|
1814
|
+
`onboard local-terms --json` reads the agreement and prints its URL, version,
|
|
1815
|
+
organization, and `accepted`. It creates nothing and requests no license. On the
|
|
1816
|
+
local route, the setup message says the developer accepts the agreement in their
|
|
1817
|
+
own terminal, and `starter/clone` and `deployment/local-evaluation` stop before
|
|
1818
|
+
the install until `accepted` is true.
|
|
1819
|
+
|
|
1820
|
+
When `init --local --install` stops after it cloned the starter, it still
|
|
1821
|
+
installs the starter's dependencies, and its error says so or names the install
|
|
1822
|
+
command.
|
|
1823
|
+
|
|
1824
|
+
#### Model vendors in this release
|
|
1825
|
+
|
|
1826
|
+
Onboarding offers a new agent only the vendors in this table. When onboarding
|
|
1827
|
+
chooses the vendor for a new agent, `onboard setup-answers` refuses another
|
|
1828
|
+
vendor for the framework, and `onboard credentials` and `onboard model-key`
|
|
1829
|
+
refuse another vendor's key before they read or send it. The message names the
|
|
1830
|
+
vendors the framework takes, and never a key value. Each refusal sends the
|
|
1831
|
+
`cli.onboarding.vendor_held_back` event with the framework and the vendor.
|
|
1832
|
+
|
|
1833
|
+
An existing agent keeps its own vendor and model. A vendor recorded with
|
|
1834
|
+
`--vendor-choice existing`, or a run that `onboard classify` placed on an
|
|
1835
|
+
existing agent, is never refused.
|
|
1836
|
+
|
|
1837
|
+
| Framework | Vendors |
|
|
1838
|
+
| -------------------------------------- | -------------------------------------------- |
|
|
1839
|
+
| Built-in CopilotKit agent | OpenAI, OpenAI-compatible, Anthropic, Google |
|
|
1840
|
+
| ADK | Google, OpenAI, OpenAI-compatible |
|
|
1841
|
+
| Claude Agent SDK (Python, TypeScript) | Anthropic |
|
|
1842
|
+
| Every other framework and Custom agent | OpenAI, OpenAI-compatible |
|
|
1843
|
+
|
|
1844
|
+
Anthropic and Google come to the other frameworks in a later release. Their
|
|
1845
|
+
CopilotKit middleware sends the page context as a second system message, after
|
|
1846
|
+
the user message. Anthropic and Google refuse that message order, so every chat
|
|
1847
|
+
fails. The built-in agent sends the context in one leading system message, and
|
|
1848
|
+
ADK puts it in its one system instruction. To use Anthropic or Google for a new
|
|
1849
|
+
agent now, choose the built-in CopilotKit agent. An existing agent on Anthropic
|
|
1850
|
+
or Google can see page context fail until a CopilotKit SDK release fixes it.
|
|
1851
|
+
|
|
1633
1852
|
Read `status`:
|
|
1634
1853
|
|
|
1635
1854
|
- `ready`: the project, key, and container are settled.
|
|
@@ -1738,6 +1957,26 @@ explicitly re-enabled. `copilotkit telemetry reset` restores the full
|
|
|
1738
1957
|
fresh-install state: the decision is forgotten and the one-time notice shows
|
|
1739
1958
|
again on the next interactive run.
|
|
1740
1959
|
|
|
1960
|
+
Every event carries `invocation_via`, which tells where the call came from. The
|
|
1961
|
+
CopilotKit skills append a hidden `--via` flag to each command they give, for
|
|
1962
|
+
example `--via skill:copilotkit-cli`. The CLI removes the flag before the
|
|
1963
|
+
command reads its arguments, so the flag never changes what the command does.
|
|
1964
|
+
The values are:
|
|
1965
|
+
|
|
1966
|
+
- `skill:copilotkit`, `skill:copilotkit-cli` or `skill:copilotkit-channels`:
|
|
1967
|
+
the caller passed that tag.
|
|
1968
|
+
- `other`: the caller passed `--via` with a value that is not on that list. The
|
|
1969
|
+
command still runs.
|
|
1970
|
+
- `onboarding`: an untagged call inside an onboarding run, or any `onboard`
|
|
1971
|
+
command. A tag wins over a run, because `onboarding_run_id` already records
|
|
1972
|
+
the run.
|
|
1973
|
+
- `direct`: any other call.
|
|
1974
|
+
|
|
1975
|
+
`cli.command.invoked` also carries `detected_coding_agent` and
|
|
1976
|
+
`detected_coding_agent_source`, read the same way as for onboarding. The CLI
|
|
1977
|
+
reads them once for each command. On Windows it does not read the parent
|
|
1978
|
+
processes for this event, because the PowerShell call can take three seconds.
|
|
1979
|
+
|
|
1741
1980
|
## Preview and release builds
|
|
1742
1981
|
|
|
1743
1982
|
Tester-facing prerelease builds are produced by CI via `workflow_dispatch` on
|
|
@@ -1917,6 +2156,10 @@ when the flag is off. A candidate file overrides release selection. The CLI down
|
|
|
1917
2156
|
its private Helm tool, checks chart support, and pins the chart checksum and runtime
|
|
1918
2157
|
image digests. Saved stacks resume with their saved release.
|
|
1919
2158
|
|
|
2159
|
+
The private chart overlay gives app-api the browser realtime address
|
|
2160
|
+
`ws://localhost:<selected-gateway-port>/client`. Trajectory live views use this
|
|
2161
|
+
address, including when setup selects a different port for a second local stack.
|
|
2162
|
+
|
|
1920
2163
|
The September 28 check found that release 0.13.8 lacks the local evaluation profile.
|
|
1921
2164
|
Automatic setup reports `release_unavailable` before license issuance or cluster creation for this release.
|
|
1922
2165
|
This is a release packaging blocker, not a request for user configuration.
|
|
@@ -1932,10 +2175,10 @@ or prove fresh-install acceptance.
|
|
|
1932
2175
|
Use `--candidate /path/to/candidate.json` only to override release selection during
|
|
1933
2176
|
development or release testing. Full fresh-install acceptance remains incomplete.
|
|
1934
2177
|
|
|
1935
|
-
Use Docker with at least 4 CPUs,
|
|
2178
|
+
Use Docker with at least 4 CPUs, 4 GiB of memory available to containers, and
|
|
1936
2179
|
40 GiB free storage for each stack. The CLI measures Docker resources after existing
|
|
1937
2180
|
workloads. Docker keeps part of its memory limit for itself, so set the limit to
|
|
1938
|
-
|
|
2181
|
+
6 GiB or more. If the check fails, the message shows the total and available memory
|
|
1939
2182
|
and how much to add.
|
|
1940
2183
|
The CLI downloads private, checksum-verified Helm and k3d tools.
|
|
1941
2184
|
|
|
@@ -1956,8 +2199,11 @@ browser. Review it, type `accept` exactly, and press Enter. The link stays visib
|
|
|
1956
2199
|
if the browser cannot open. Opening the page does not accept; there is no scroll requirement.
|
|
1957
2200
|
Esc/Ctrl-C/Ctrl-D cancels. The published agreement is usable once Ops enforcement is enabled.
|
|
1958
2201
|
Template acceptance uses the normal license request and audit write, marked `status: template`.
|
|
1959
|
-
Scripts must supply `--accept-eula-version <version>` to `local setup` or `local renew
|
|
1960
|
-
|
|
2202
|
+
Scripts must supply `--accept-eula-version <version>` to `local setup` or `local renew`,
|
|
2203
|
+
or, for setup, use an acceptance stored by `copilotkit local accept-terms`. `local start` also accepts
|
|
2204
|
+
this option when it performs first-time setup. When a coding agent runs the command, the
|
|
2205
|
+
option is refused and no license is requested: the developer runs `local accept-terms` in
|
|
2206
|
+
their own terminal.
|
|
1961
2207
|
Generic confirmation does not accept terms. Declining requests no license and preserves saved data.
|
|
1962
2208
|
|
|
1963
2209
|
Local `init` (including `--existing`) uses the same EULA review as `local setup`.
|
package/cli-build-info.json
CHANGED
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": {
|
|
4
4
|
"name": "copilotkit",
|
|
5
|
-
"version": "4.
|
|
5
|
+
"version": "4.27.0"
|
|
6
6
|
},
|
|
7
7
|
"intelligence": {
|
|
8
|
-
"commit": "
|
|
8
|
+
"commit": "85be7ded256d48363acf91081520e5492d5ec0bc"
|
|
9
9
|
},
|
|
10
10
|
"copilotKit": {
|
|
11
|
-
"submittedInput": "
|
|
12
|
-
"commit": "
|
|
11
|
+
"submittedInput": "3cddb360660503325b24564820c78a2ad7ee1843",
|
|
12
|
+
"commit": "3cddb360660503325b24564820c78a2ad7ee1843"
|
|
13
13
|
},
|
|
14
14
|
"channel": "production",
|
|
15
15
|
"triggeringActor": "BenTaylorDev",
|
|
16
16
|
"workflow": {
|
|
17
|
-
"runId": "
|
|
18
|
-
"runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/
|
|
17
|
+
"runId": "38068472728",
|
|
18
|
+
"runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/38068472728"
|
|
19
19
|
},
|
|
20
20
|
"validationResult": "passed",
|
|
21
21
|
"ag2": {
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"revision": "main",
|
|
25
25
|
"pinned": false
|
|
26
26
|
},
|
|
27
|
-
"builtAt": "2026-10-
|
|
27
|
+
"builtAt": "2026-10-10T16:40:00Z"
|
|
28
28
|
}
|