copilotkit 4.27.0 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +161 -26
  2. package/cli-build-info.json +7 -7
  3. package/index.js +8234 -5108
  4. package/onboarding/index.json +3 -2
  5. package/onboarding/prompts/authenticate/start.md +54 -55
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +28 -24
  8. package/onboarding/prompts/credentials/plan.md +31 -28
  9. package/onboarding/prompts/credentials/settle-credentials.md +7 -7
  10. package/onboarding/prompts/credentials/write-plan.md +77 -51
  11. package/onboarding/prompts/deployment/choose-local.md +9 -9
  12. package/onboarding/prompts/deployment/local-evaluation.md +12 -12
  13. package/onboarding/prompts/fallback/best-effort.md +9 -13
  14. package/onboarding/prompts/feature/a2ui/implement.md +4 -4
  15. package/onboarding/prompts/feature/a2ui/plan.md +3 -3
  16. package/onboarding/prompts/feature/a2ui/proof.md +5 -5
  17. package/onboarding/prompts/feature/a2ui/start.md +17 -8
  18. package/onboarding/prompts/feature/channels/implement.md +7 -7
  19. package/onboarding/prompts/feature/channels/plan.md +5 -5
  20. package/onboarding/prompts/feature/channels/proof.md +8 -7
  21. package/onboarding/prompts/feature/channels/start.md +18 -9
  22. package/onboarding/prompts/feature/chat-suggestions/implement.md +4 -4
  23. package/onboarding/prompts/feature/chat-suggestions/plan.md +3 -3
  24. package/onboarding/prompts/feature/chat-suggestions/proof.md +5 -5
  25. package/onboarding/prompts/feature/chat-suggestions/start.md +17 -8
  26. package/onboarding/prompts/feature/complete.md +2 -2
  27. package/onboarding/prompts/feature/learning/implement.md +12 -12
  28. package/onboarding/prompts/feature/learning/plan.md +4 -4
  29. package/onboarding/prompts/feature/learning/proof.md +13 -13
  30. package/onboarding/prompts/feature/learning/start.md +17 -8
  31. package/onboarding/prompts/feature/open-generative-ui/implement.md +4 -4
  32. package/onboarding/prompts/feature/open-generative-ui/plan.md +3 -3
  33. package/onboarding/prompts/feature/open-generative-ui/proof.md +5 -5
  34. package/onboarding/prompts/feature/open-generative-ui/start.md +17 -8
  35. package/onboarding/prompts/feature/realtime-sync/implement.md +5 -5
  36. package/onboarding/prompts/feature/realtime-sync/plan.md +3 -3
  37. package/onboarding/prompts/feature/realtime-sync/proof.md +5 -5
  38. package/onboarding/prompts/feature/realtime-sync/start.md +16 -7
  39. package/onboarding/prompts/feature/rich-threads/implement.md +6 -6
  40. package/onboarding/prompts/feature/rich-threads/plan.md +3 -3
  41. package/onboarding/prompts/feature/rich-threads/proof.md +5 -5
  42. package/onboarding/prompts/feature/rich-threads/start.md +16 -7
  43. package/onboarding/prompts/feature/stop.md +4 -4
  44. package/onboarding/prompts/feature/voice/implement.md +4 -4
  45. package/onboarding/prompts/feature/voice/plan.md +4 -4
  46. package/onboarding/prompts/feature/voice/proof.md +5 -5
  47. package/onboarding/prompts/feature/voice/start.md +17 -8
  48. package/onboarding/prompts/framework/ag2.md +3 -3
  49. package/onboarding/prompts/framework/agno.md +3 -3
  50. package/onboarding/prompts/framework/built-in.md +3 -3
  51. package/onboarding/prompts/framework/claude-sdk-python.md +3 -3
  52. package/onboarding/prompts/framework/claude-sdk-typescript.md +3 -3
  53. package/onboarding/prompts/framework/crewai-flows.md +6 -6
  54. package/onboarding/prompts/framework/custom-ag-ui.md +4 -4
  55. package/onboarding/prompts/framework/deep-agents.md +3 -3
  56. package/onboarding/prompts/framework/google-adk.md +3 -3
  57. package/onboarding/prompts/framework/langgraph-fastapi.md +3 -3
  58. package/onboarding/prompts/framework/langgraph-python.md +3 -3
  59. package/onboarding/prompts/framework/langgraph-typescript.md +3 -3
  60. package/onboarding/prompts/framework/llamaindex.md +3 -3
  61. package/onboarding/prompts/framework/mastra.md +3 -3
  62. package/onboarding/prompts/framework/ms-agent-dotnet.md +5 -5
  63. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +5 -5
  64. package/onboarding/prompts/framework/ms-agent-python.md +3 -3
  65. package/onboarding/prompts/framework/pydantic-ai.md +3 -3
  66. package/onboarding/prompts/framework/strands-python.md +3 -3
  67. package/onboarding/prompts/framework/strands-typescript.md +3 -3
  68. package/onboarding/prompts/frontend/angular.md +4 -4
  69. package/onboarding/prompts/frontend/nextjs.md +4 -4
  70. package/onboarding/prompts/frontend/plan.md +12 -12
  71. package/onboarding/prompts/frontend/react-native.md +3 -3
  72. package/onboarding/prompts/frontend/react-spa.md +3 -3
  73. package/onboarding/prompts/frontend/vue.md +3 -3
  74. package/onboarding/prompts/implementation/build-and-validate.md +32 -14
  75. package/onboarding/prompts/proof/complete.md +6 -7
  76. package/onboarding/prompts/proof/oss-baseline.md +24 -5
  77. package/onboarding/prompts/proof/round-trip.md +41 -21
  78. package/onboarding/prompts/research/gather.md +85 -40
  79. package/onboarding/prompts/research/merge.md +3 -3
  80. package/onboarding/prompts/research/preflight.md +2 -2
  81. package/onboarding/prompts/research/route.md +10 -4
  82. package/onboarding/prompts/setup/questions.md +53 -234
  83. package/onboarding/prompts/starter/clone.md +43 -34
  84. package/onboarding/prompts/stopped/run-failed.md +3 -3
  85. package/onboarding/prompts/subagent/create-plan.md +57 -34
  86. package/onboarding/prompts/subagent/implement-and-validate.md +40 -35
  87. package/onboarding/prompts/subagent/inspect-repository.md +17 -4
  88. package/onboarding/prompts/subagent/prove-oss-baseline.md +24 -1
  89. package/onboarding/prompts/subagent/prove-round-trip.md +55 -49
  90. package/onboarding/prompts/unsupported/no-validated-path.md +3 -3
  91. package/package.json +1 -1
  92. package/release/release-tool.js +8 -1
package/README.md CHANGED
@@ -422,9 +422,12 @@ where it found it in `detected_coding_agent_source`. `cli.onboarding.started` al
422
422
  no identify event. It also carries `audience`: `detected-agent` when the
423
423
  environment shows an agent, `human-terminal` for a terminal with no detected
424
424
  agent, and `non-tty` otherwise. A run sends `cli.onboarding.started` once. A
425
- later `onboard start` for the same run and intent prints the first prompt again
426
- but sends no second start, so the repeat shows only as `prompt_repeat` on
427
- `cli.onboarding.prompt_served`. A feature run that reads a node of another
425
+ later `onboard start` for the same run and intent sends no second start. Before
426
+ the run reads a second step, it prints the first prompt again, so the repeat
427
+ shows only as `prompt_repeat` on `cli.onboarding.prompt_served`. After that, it
428
+ prints no prompt: it names the step the run is at, skipping `subagent/` briefs.
429
+ It then sends `cli.onboarding.prompt_served` for that step with `reentry: start`,
430
+ so `prompt_repeat` still counts the repeat. A feature run that reads a node of another
428
431
  feature moves to that feature's intent. It sends `cli.onboarding.intent_switched`
429
432
  with `previous_intent` and the new `onboarding_intent`, and every later event
430
433
  carries the new intent. Before sign-in, the first prompt records where the
@@ -457,6 +460,10 @@ The fields:
457
460
  events do not have it. The total always has it when setup finished.
458
461
  - The total carries `duration_ms`, `outcome`, and `phase_count`. A failed setup adds
459
462
  `failed_setup_phase`.
463
+ - The total also carries `learning_model`: `configured` when the stack gets a Learning
464
+ model, or `deferred` when setup ran with `--defer-model` or "configure later". A resumed
465
+ setup reports the choice it saved. The total has no `learning_model` when setup stopped
466
+ before the choice was known, for example at the Docker check.
460
467
  - A failed setup also adds `failure_reason` to the total and to the failed phase. It is
461
468
  a fixed slug that comes from the error's type, never from its message. Examples:
462
469
  `docker_unavailable`, `authentication_required`, `memory_short`, `cpu_short`,
@@ -1101,8 +1108,9 @@ It prints one line on stderr that names the run whose backup it is.
1101
1108
  - `onboard credentials` reports the backup as `backup.status`: `ok`, `partial`
1102
1109
  with each path it left out and why, `pending` when the backup waits for
1103
1110
  `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.
1111
+ folder the backup holds does not count as left out. The onboarding plan lists
1112
+ a `partial` or `failed` backup under the changes that need your approval, and
1113
+ waits for your answer.
1106
1114
 
1107
1115
  Backups live in `~/.copilotkit/backups/<run-id>/`, or in
1108
1116
  `$COPILOTKIT_CONFIG_DIR/backups/` when that is set. Besides the current run, the
@@ -1197,10 +1205,11 @@ Outside a repository, `copilotkit init` runs `git init` in the new app and makes
1197
1205
  an initial commit when a git identity is configured, so you have a restore point
1198
1206
  before you start editing.
1199
1207
 
1200
- Inside a repository you already have, it does neither. A second `git init` would
1201
- make the new app a nested repository: commits made in it would go to the inner
1202
- repository, while the outer one saw only an untracked directory. The CLI names
1203
- the repository it found and leaves the new app for you to commit. A repository
1208
+ Inside a repository you already have, it does neither. This includes a target
1209
+ folder that is a repository itself. A second `git init` would make the new app a
1210
+ nested repository: commits made in it would go to the inner repository, while the
1211
+ outer one saw only an untracked directory. The CLI names the repository it found,
1212
+ commits nothing, and leaves the new app for you to review with `git status`. A repository
1204
1213
  at your home directory, or above it, does not count here, so an app created below
1205
1214
  it gets its own `git init`.
1206
1215
 
@@ -1347,6 +1356,12 @@ wired app returns too. The report shows it as `WARN`, `--json` names it in
1347
1356
  warns when the agent answers without the context value, because a correctly
1348
1357
  wired agent that keeps to its own task answers that way too.
1349
1358
 
1359
+ `page_context_reaches_agent` runs after every passing round trip, also for a
1360
+ frontend whose files call no context hook. CopilotKit's frontend sends context
1361
+ entries of its own, such as the A2UI catalog, and an agent that breaks on
1362
+ context fails every browser chat while a plain request still answers. For such a
1363
+ frontend, any answer passes, and a run with no answer fails.
1364
+
1350
1365
  With `--json` the payload is the only thing on stdout and every diagnostic goes
1351
1366
  to stderr, so piping is safe.
1352
1367
 
@@ -1382,7 +1397,10 @@ checks.
1382
1397
  2. `"runtimeUrl"` in `.copilotkit/project.json` — an absolute URL for a
1383
1398
  project whose runtime is somewhere none of the below can find it. Add it by
1384
1399
  hand, or let `project select --runtime-url <url>` or
1385
- `onboard runtime-url --url <url>` write it. The CLI never removes one.
1400
+ `onboard runtime-url --url <url>` write it. The CLI never removes one, but
1401
+ in an onboarding run it can replace one that refuses connections:
1402
+ `verify --round-trip --runtime-url <url>` and `onboard proof-check` can
1403
+ write the new URL. See [`verify` probes port 3000 while the app runs on another port](#verify-probes-port-3000-while-the-app-runs-on-another-port).
1386
1404
  3. `COPILOTKIT_RUNTIME_URL` in the project's `.env` / `.env.local`, when it is
1387
1405
  absolute.
1388
1406
  4. The port the app's own dev configuration declares: `PORT` in its env files,
@@ -1460,10 +1478,33 @@ request in hand is a `resource/request`, and an `info` call never is. A runtime
1460
1478
  below `@copilotkit/runtime` 1.70.2 reports no `singleRoute` block and therefore
1461
1479
  cannot say, so the check is `UNKNOWN` there and names the upgrade.
1462
1480
 
1481
+ ### Sending one run body and reading its events
1482
+
1483
+ `--send-run <file>` sends the AG-UI run body in `<file>` to the agent that
1484
+ `--agent` names, and writes the events the run streams to
1485
+ `<file name>.events.jsonl` beside it. It runs no check. It prints the answer
1486
+ text, the tool calls, and the events path, and exits non-zero when the run did
1487
+ not finish or ended in a `RUN_ERROR`.
1488
+
1489
+ ```bash
1490
+ copilotkit verify --send-run .copilotkit/proof/context-run.json --agent incident_triage --json
1491
+ ```
1492
+
1493
+ A runtime wired to Intelligence answers the run with a join token instead of an
1494
+ event stream, and the events travel over the realtime gateway. The token is
1495
+ single-use and expires 30 seconds after the run starts. The command joins the
1496
+ gateway channel as soon as the run answers. If the gateway still refuses the
1497
+ token, the command asks the runtime's `/connect` route for a fresh one, once,
1498
+ and reads only this run from the channel's replay. Every send gets a new
1499
+ `runId`, and a body without `threadId` gets one. A runtime mounted
1500
+ `mode: "single-route"` gets the run inside its envelope. A second send of the
1501
+ same file replaces its events file. `--timeout` bounds the whole capture
1502
+ (default: 90 seconds).
1503
+
1463
1504
  ### Proving the agent runs, not just that it is configured
1464
1505
 
1465
1506
  Every check above describes the project. `--round-trip` makes it work: it sends
1466
- one real request through the runtime and reads the answer back from the thread.
1507
+ one real request through the runtime and reads the agent's answer.
1467
1508
 
1468
1509
  ```bash
1469
1510
  copilotkit verify --round-trip
@@ -1471,14 +1512,23 @@ copilotkit verify --round-trip --agent incident_triage # several declared
1471
1512
  copilotkit verify --round-trip --header "Cookie: session=…" # auth-gated app
1472
1513
  ```
1473
1514
 
1474
- It reads the answer back from `GET /threads/:id/messages` rather than from the
1475
- run's response, because those responses differ by mode. In Intelligence mode the
1476
- run returns a thread lock and a gateway URL, and the agent's events travel to the
1477
- browser over the realtime gateway — so a 200 there proves a run started, which is
1478
- precisely the outcome a runtime that dies mid-turn also produces. Reading the
1479
- thread is one assertion for both modes, and it proves the stronger fact: the
1480
- answer was recorded, not merely emitted. The thread the run reports wins over the
1481
- one the CLI sent, because Intelligence rewrites both ids when it takes the lock.
1515
+ In Intelligence mode, the run returns a thread lock, a join token and a gateway
1516
+ URL. The agent's events travel over the realtime gateway, on the stream that the
1517
+ app's chat shows. `verify` joins that stream as soon as the run answers, and
1518
+ reads the answer from it. A 200 on the run proves only that a run started. A
1519
+ runtime that stops mid-turn also returns that 200, so the answer itself must
1520
+ arrive. The platform saves the thread from the same events later. Under load,
1521
+ the saved thread can lag the run by minutes, so it does not decide the verdict.
1522
+
1523
+ In four cases, `verify` reads the answer back from `GET /threads/:id/messages`:
1524
+
1525
+ - The runtime streams SSE.
1526
+ - This Node.js has no `WebSocket`.
1527
+ - The gateway refuses the join.
1528
+ - The stream ends with no text.
1529
+
1530
+ The thread that the run reports wins over the thread that the CLI sent, because
1531
+ Intelligence rewrites both ids when it takes the lock.
1482
1532
 
1483
1533
  The assertion is that a non-empty answer came back, never what it said, so the
1484
1534
  verdict does not depend on the model behind the agent. It costs a model call and
@@ -1510,7 +1560,10 @@ no thread. It reads the thread from app-api with the project key, so it needs no
1510
1560
  `--expect-learning-container` checks that same thread. A pass proves that the
1511
1561
  agent's answer was recorded on that thread. It does not prove which end user the
1512
1562
  thread belongs to. A thread app-api does not hold for this project is a `FAIL`.
1513
- Only an answer after the thread's newest user message counts. Inside an
1563
+ Only an answer after the thread's newest user message counts. App-api can save
1564
+ that answer minutes after the run under load. If the newest user message has no
1565
+ answer yet, `--thread` reads the thread again once a second. It waits up to 60
1566
+ seconds before it reports a `FAIL`. Inside an
1514
1567
  onboarding run, a thread that did not change after the run started is a `FAIL`,
1515
1568
  because its answer can predate the app as it is now. With `--agent`, a thread
1516
1569
  of another agent is a `FAIL`, and the evidence names the thread's own agent.
@@ -1529,6 +1582,15 @@ the coding agent, decides three things about it:
1529
1582
  to the run's code. `developer` means an answer or an action only the developer
1530
1583
  can give. Where the check started a server, the step carries the last lines of
1531
1584
  its log.
1585
+ - A failing `runtime-answers` or `round-trip:agent_answers` check names why in
1586
+ `failureKind`, such as `runtime-timeout`, `run-error`, `run-refused`,
1587
+ `read-refused`, `agent-missing` or `agent-ambiguous`. `run-refused` is a run
1588
+ the runtime refused with 401, 402, 403 or 429. That status usually comes from
1589
+ the Intelligence platform key or the app's own auth, so it names no provider.
1590
+ A failed run whose error carried the provider's own code also names it in
1591
+ `providerError`: `auth`, `quota`, `model-not-found`, `rate-limit` or `other`.
1592
+ It is read from that code, never from a status or a message.
1593
+ `verify --round-trip --json` reports both on `roundTrip` too.
1532
1594
  - When the same check fails three proof checks in a row, the command prints
1533
1595
  `Status: stopped`. A later `onboard proof-check` in the same attempt starts no
1534
1596
  server and prints the same stop. Recording the attempt with `onboard proof`
@@ -1628,10 +1690,30 @@ project record, it writes nothing and exits non-zero.
1628
1690
  Inside an onboarding run, a `verify --round-trip --runtime-url <url>` that
1629
1691
  passes on a runtime other than the recorded one does not count for the run.
1630
1692
  `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
1693
+ names this command.
1694
+
1695
+ There is one exception. The pass counts, and `verify` writes `<url>` into the
1696
+ record, when all of these are true:
1697
+
1698
+ - the recorded URL refuses the connection. A timeout, a TLS error, or any
1699
+ answer, even an error, keeps the record;
1700
+ - `<url>` is on this machine;
1701
+ - a process whose working directory is inside this project listens on the
1702
+ port of `<url>`.
1703
+
1704
+ `verify` asks the recorded URL without the `--header` values. In the same
1705
+ run, `onboard proof-check` replaces a recorded URL where nothing answers when
1706
+ the app's server was already running. It writes the port that server holds. `onboard proof` then names that runtime too. The CLI reads
1632
1707
  `localhost`, `127.0.0.1`, `0.0.0.0`, and `[::1]` on the same port and path as
1633
1708
  one runtime.
1634
1709
 
1710
+ `onboard proof-check` restarts a server of the app that started before an env file it reads
1711
+ was written, and names the old pids under `servers[].restarted`. After it starts a server, it
1712
+ waits up to 90 seconds for the runtime's `/info`. It waits only while nothing answers or the
1713
+ server answers with an error, as a dev server does while it compiles. A runtime still not up
1714
+ after the wait fails `runtime-answers` with `runtime-not-found`. Any other answer, such as a
1715
+ 401, goes on to `verify`. `serverWaitMs` says how long the wait took.
1716
+
1635
1717
  ### A model key has no credits or is rejected
1636
1718
 
1637
1719
  A key with no credits passes every static check. The first model call then
@@ -1674,8 +1756,10 @@ the Responses API, which the AI SDK uses. The JSON reports the model as `model`,
1674
1756
  it was set as `modelSource`, and the env file that holds it as `modelFile`. The fix for a
1675
1757
  refused model names that file. The key and the model can live in different files, as in
1676
1758
  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
1759
+ the cause `model_unavailable`. When the probe passed, the message names the model that the
1760
+ app's `.env.example` sets in `COPILOTKIT_AGENT_MODEL`, if it is a different model for the same
1761
+ vendor. It never names the probe model: the probe sends a plain request, and the app sends
1762
+ system messages and page context, so a model that answers the probe can still fail every chat. After the probe passed, a 403 or a spent quota on the app's
1679
1763
  model is `model_unavailable` too: the key works, and Google gives some models no free-tier
1680
1764
  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
1765
  the key goes to, or else from the first service that sets it (see below). The JSON names
@@ -1776,11 +1860,17 @@ It records every answer from the setup message for the bound run, so a later
1776
1860
  step reads it even after the coding agent lost its context:
1777
1861
 
1778
1862
  - `--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
1863
+ `--framework` takes a framework slug or a name from the framework table that
1864
+ `onboard setup-message --options` lists. Another framework's name is recorded as `frameworkName`, with
1781
1865
  `framework` set to `custom-ag-ui`, the route that builds it. A name close to
1782
1866
  a table row is refused with that row named. Add `--custom-framework` to
1783
- record it as given.
1867
+ record it as given. A framework recorded before any setup message, for a
1868
+ project with no agent of its own, is kept as a default
1869
+ (`frameworkChoice: default`), because research only inferred it. A provider
1870
+ the developer names later can then replace it with one that takes that
1871
+ provider. Add `--framework-choice developer` for a framework the developer
1872
+ named. A framework recorded with `--vendor-choice existing`, or after the
1873
+ message, is the developer's.
1784
1874
  - `--vendor <openai|anthropic|google|openai-compatible|other>`, with
1785
1875
  `--vendor-choice <developer|default|existing>`. An OpenAI-compatible provider
1786
1876
  also needs `--base-url <url>`, an http or https URL with no user, password, or
@@ -1792,6 +1882,9 @@ step reads it even after the coding agent lost its context:
1792
1882
  (`--connection approved|declined`), and the approval to write to an env file
1793
1883
  or `.copilotkit/project.json` with uncommitted changes
1794
1884
  (`--uncommitted-writes approved|declined`).
1885
+ - The env-file answer, when git tracks the env file the key goes into or does
1886
+ not ignore it: `--env-line approved|alternative|declined`.
1887
+ `credentials/finalize-plan` reads it, so the developer is not asked twice.
1795
1888
 
1796
1889
  A later call replaces only the answers it names. The vendor flags replace the
1797
1890
  recorded vendor answer as a whole. With no flag, it prints what the run recorded
@@ -1801,6 +1894,48 @@ must name an existing file. When the key file sets `OPENAI_BASE_URL`, the JSON s
1801
1894
  A free-text answer shaped like a key, such as an `sk-`, `gsk_`, or `AIza` key or
1802
1895
  a long random token, is refused the same way.
1803
1896
 
1897
+ `onboard setup-message` writes the setup message the coding agent shows the
1898
+ developer. The agent first records what the repository already settles with
1899
+ `setup-answers`, then runs it from the target app directory:
1900
+
1901
+ ```bash
1902
+ copilotkit onboard setup-message --target empty --json
1903
+ copilotkit onboard setup-message --target empty --options --json
1904
+ copilotkit onboard setup-message --target empty --options framework --json
1905
+ copilotkit onboard setup-message --target empty --accept-defaults --json
1906
+ ```
1907
+
1908
+ It prints `status`, the `message` to show word for word, the `open` lines, and
1909
+ `next`, what the agent does after it:
1910
+
1911
+ - `ask`: show `message`, wait, and record the reply. The message puts every
1912
+ default on one line that **go** accepts. The model key is the one question
1913
+ **go** never answers: the developer names the file that holds it, or says
1914
+ "later". The message also holds every line that needs the developer's own
1915
+ answer, such as an env file to untrack or files with uncommitted changes.
1916
+ - `settled`: every line is answered. The run goes on to `credentials/plan`.
1917
+ - `needs-credentials`: an existing app on the managed route has no project
1918
+ finding yet. The command runs the read-only `onboard credentials` check
1919
+ itself first, so the env-file and project lines go into the one message with
1920
+ the key. Only a check that settles neither line leaves this status, and the
1921
+ agent then runs `onboard credentials --json` itself.
1922
+ - `stopped`: that check stopped onboarding. It already filed the stop report,
1923
+ and `stopReason` says why.
1924
+ - `needs-toolchain`: the developer chose a framework this machine cannot run
1925
+ yet. The message names what to install, and the run resumes after a restart.
1926
+
1927
+ The summary line names every line, the recorded ones too, while one of them
1928
+ still holds a default. `--options` shows every line with its recommendation
1929
+ first and its likeliest two or three alternatives. `--options <line>`, such as
1930
+ `--options framework` or `--options frontend`, lists every choice on that one
1931
+ line. `--accept-defaults`
1932
+ records the defaults the reply did not change, then prints what is still open.
1933
+ `--language <typescript|python|dotnet>` picks the framework for a project with
1934
+ no agent, and `--vendor` names a model vendor the developer asked for. A vendor
1935
+ the framework does not take becomes a line of its own. On the local route,
1936
+ which `onboard deployment` now records, the message holds the Learning model,
1937
+ the agreement and the connection lines instead of a project.
1938
+
1804
1939
  Only the developer accepts the local evaluation agreement, in their own
1805
1940
  terminal, with `copilotkit local accept-terms`. The command refuses to run
1806
1941
  without a terminal or when a coding agent runs it. It shows the agreement, its
@@ -2,20 +2,20 @@
2
2
  "schemaVersion": 1,
3
3
  "package": {
4
4
  "name": "copilotkit",
5
- "version": "4.27.0"
5
+ "version": "4.29.0"
6
6
  },
7
7
  "intelligence": {
8
- "commit": "85be7ded256d48363acf91081520e5492d5ec0bc"
8
+ "commit": "c2941f81dd4028b36bcc8d09cead7a5cf9381519"
9
9
  },
10
10
  "copilotKit": {
11
- "submittedInput": "3cddb360660503325b24564820c78a2ad7ee1843",
12
- "commit": "3cddb360660503325b24564820c78a2ad7ee1843"
11
+ "submittedInput": "c616389550105d5a96d74501f77c6921aa79ecee",
12
+ "commit": "c616389550105d5a96d74501f77c6921aa79ecee"
13
13
  },
14
14
  "channel": "production",
15
15
  "triggeringActor": "BenTaylorDev",
16
16
  "workflow": {
17
- "runId": "38068472728",
18
- "runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/38068472728"
17
+ "runId": "38603793405",
18
+ "runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/38603793405"
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-10T16:40:00Z"
27
+ "builtAt": "2026-10-14T17:08:34Z"
28
28
  }