copilotkit 4.27.0 → 4.28.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 +155 -23
  2. package/cli-build-info.json +7 -7
  3. package/index.js +7748 -4981
  4. package/onboarding/index.json +3 -2
  5. package/onboarding/prompts/authenticate/start.md +42 -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 +54 -36
  11. package/onboarding/prompts/deployment/choose-local.md +9 -9
  12. package/onboarding/prompts/deployment/local-evaluation.md +11 -11
  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 +8 -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 +9 -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 +8 -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 +8 -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 +8 -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 +7 -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 +7 -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 +8 -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 +16 -14
  75. package/onboarding/prompts/proof/complete.md +6 -7
  76. package/onboarding/prompts/proof/oss-baseline.md +8 -5
  77. package/onboarding/prompts/proof/round-trip.md +18 -20
  78. package/onboarding/prompts/research/gather.md +38 -10
  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 +42 -33
  84. package/onboarding/prompts/stopped/run-failed.md +3 -3
  85. package/onboarding/prompts/subagent/create-plan.md +32 -34
  86. package/onboarding/prompts/subagent/implement-and-validate.md +12 -35
  87. package/onboarding/prompts/subagent/inspect-repository.md +1 -1
  88. package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
  89. package/onboarding/prompts/subagent/prove-round-trip.md +35 -52
  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
@@ -457,6 +457,10 @@ The fields:
457
457
  events do not have it. The total always has it when setup finished.
458
458
  - The total carries `duration_ms`, `outcome`, and `phase_count`. A failed setup adds
459
459
  `failed_setup_phase`.
460
+ - The total also carries `learning_model`: `configured` when the stack gets a Learning
461
+ model, or `deferred` when setup ran with `--defer-model` or "configure later". A resumed
462
+ setup reports the choice it saved. The total has no `learning_model` when setup stopped
463
+ before the choice was known, for example at the Docker check.
460
464
  - A failed setup also adds `failure_reason` to the total and to the failed phase. It is
461
465
  a fixed slug that comes from the error's type, never from its message. Examples:
462
466
  `docker_unavailable`, `authentication_required`, `memory_short`, `cpu_short`,
@@ -1101,8 +1105,9 @@ It prints one line on stderr that names the run whose backup it is.
1101
1105
  - `onboard credentials` reports the backup as `backup.status`: `ok`, `partial`
1102
1106
  with each path it left out and why, `pending` when the backup waits for
1103
1107
  `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.
1108
+ folder the backup holds does not count as left out. The onboarding plan lists
1109
+ a `partial` or `failed` backup under the changes that need your approval, and
1110
+ waits for your answer.
1106
1111
 
1107
1112
  Backups live in `~/.copilotkit/backups/<run-id>/`, or in
1108
1113
  `$COPILOTKIT_CONFIG_DIR/backups/` when that is set. Besides the current run, the
@@ -1197,10 +1202,11 @@ Outside a repository, `copilotkit init` runs `git init` in the new app and makes
1197
1202
  an initial commit when a git identity is configured, so you have a restore point
1198
1203
  before you start editing.
1199
1204
 
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
1205
+ Inside a repository you already have, it does neither. This includes a target
1206
+ folder that is a repository itself. A second `git init` would make the new app a
1207
+ nested repository: commits made in it would go to the inner repository, while the
1208
+ outer one saw only an untracked directory. The CLI names the repository it found,
1209
+ commits nothing, and leaves the new app for you to review with `git status`. A repository
1204
1210
  at your home directory, or above it, does not count here, so an app created below
1205
1211
  it gets its own `git init`.
1206
1212
 
@@ -1347,6 +1353,12 @@ wired app returns too. The report shows it as `WARN`, `--json` names it in
1347
1353
  warns when the agent answers without the context value, because a correctly
1348
1354
  wired agent that keeps to its own task answers that way too.
1349
1355
 
1356
+ `page_context_reaches_agent` runs after every passing round trip, also for a
1357
+ frontend whose files call no context hook. CopilotKit's frontend sends context
1358
+ entries of its own, such as the A2UI catalog, and an agent that breaks on
1359
+ context fails every browser chat while a plain request still answers. For such a
1360
+ frontend, any answer passes, and a run with no answer fails.
1361
+
1350
1362
  With `--json` the payload is the only thing on stdout and every diagnostic goes
1351
1363
  to stderr, so piping is safe.
1352
1364
 
@@ -1382,7 +1394,10 @@ checks.
1382
1394
  2. `"runtimeUrl"` in `.copilotkit/project.json` — an absolute URL for a
1383
1395
  project whose runtime is somewhere none of the below can find it. Add it by
1384
1396
  hand, or let `project select --runtime-url <url>` or
1385
- `onboard runtime-url --url <url>` write it. The CLI never removes one.
1397
+ `onboard runtime-url --url <url>` write it. The CLI never removes one, but
1398
+ in an onboarding run it can replace one that refuses connections:
1399
+ `verify --round-trip --runtime-url <url>` and `onboard proof-check` can
1400
+ 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
1401
  3. `COPILOTKIT_RUNTIME_URL` in the project's `.env` / `.env.local`, when it is
1387
1402
  absolute.
1388
1403
  4. The port the app's own dev configuration declares: `PORT` in its env files,
@@ -1460,10 +1475,33 @@ request in hand is a `resource/request`, and an `info` call never is. A runtime
1460
1475
  below `@copilotkit/runtime` 1.70.2 reports no `singleRoute` block and therefore
1461
1476
  cannot say, so the check is `UNKNOWN` there and names the upgrade.
1462
1477
 
1478
+ ### Sending one run body and reading its events
1479
+
1480
+ `--send-run <file>` sends the AG-UI run body in `<file>` to the agent that
1481
+ `--agent` names, and writes the events the run streams to
1482
+ `<file name>.events.jsonl` beside it. It runs no check. It prints the answer
1483
+ text, the tool calls, and the events path, and exits non-zero when the run did
1484
+ not finish or ended in a `RUN_ERROR`.
1485
+
1486
+ ```bash
1487
+ copilotkit verify --send-run .copilotkit/proof/context-run.json --agent incident_triage --json
1488
+ ```
1489
+
1490
+ A runtime wired to Intelligence answers the run with a join token instead of an
1491
+ event stream, and the events travel over the realtime gateway. The token is
1492
+ single-use and expires 30 seconds after the run starts. The command joins the
1493
+ gateway channel as soon as the run answers. If the gateway still refuses the
1494
+ token, the command asks the runtime's `/connect` route for a fresh one, once,
1495
+ and reads only this run from the channel's replay. Every send gets a new
1496
+ `runId`, and a body without `threadId` gets one. A runtime mounted
1497
+ `mode: "single-route"` gets the run inside its envelope. A second send of the
1498
+ same file replaces its events file. `--timeout` bounds the whole capture
1499
+ (default: 90 seconds).
1500
+
1463
1501
  ### Proving the agent runs, not just that it is configured
1464
1502
 
1465
1503
  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.
1504
+ one real request through the runtime and reads the agent's answer.
1467
1505
 
1468
1506
  ```bash
1469
1507
  copilotkit verify --round-trip
@@ -1471,14 +1509,23 @@ copilotkit verify --round-trip --agent incident_triage # several declared
1471
1509
  copilotkit verify --round-trip --header "Cookie: session=…" # auth-gated app
1472
1510
  ```
1473
1511
 
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.
1512
+ In Intelligence mode, the run returns a thread lock, a join token and a gateway
1513
+ URL. The agent's events travel over the realtime gateway, on the stream that the
1514
+ app's chat shows. `verify` joins that stream as soon as the run answers, and
1515
+ reads the answer from it. A 200 on the run proves only that a run started. A
1516
+ runtime that stops mid-turn also returns that 200, so the answer itself must
1517
+ arrive. The platform saves the thread from the same events later. Under load,
1518
+ the saved thread can lag the run by minutes, so it does not decide the verdict.
1519
+
1520
+ In four cases, `verify` reads the answer back from `GET /threads/:id/messages`:
1521
+
1522
+ - The runtime streams SSE.
1523
+ - This Node.js has no `WebSocket`.
1524
+ - The gateway refuses the join.
1525
+ - The stream ends with no text.
1526
+
1527
+ The thread that the run reports wins over the thread that the CLI sent, because
1528
+ Intelligence rewrites both ids when it takes the lock.
1482
1529
 
1483
1530
  The assertion is that a non-empty answer came back, never what it said, so the
1484
1531
  verdict does not depend on the model behind the agent. It costs a model call and
@@ -1510,7 +1557,10 @@ no thread. It reads the thread from app-api with the project key, so it needs no
1510
1557
  `--expect-learning-container` checks that same thread. A pass proves that the
1511
1558
  agent's answer was recorded on that thread. It does not prove which end user the
1512
1559
  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
1560
+ Only an answer after the thread's newest user message counts. App-api can save
1561
+ that answer minutes after the run under load. If the newest user message has no
1562
+ answer yet, `--thread` reads the thread again once a second. It waits up to 60
1563
+ seconds before it reports a `FAIL`. Inside an
1514
1564
  onboarding run, a thread that did not change after the run started is a `FAIL`,
1515
1565
  because its answer can predate the app as it is now. With `--agent`, a thread
1516
1566
  of another agent is a `FAIL`, and the evidence names the thread's own agent.
@@ -1529,6 +1579,15 @@ the coding agent, decides three things about it:
1529
1579
  to the run's code. `developer` means an answer or an action only the developer
1530
1580
  can give. Where the check started a server, the step carries the last lines of
1531
1581
  its log.
1582
+ - A failing `runtime-answers` or `round-trip:agent_answers` check names why in
1583
+ `failureKind`, such as `runtime-timeout`, `run-error`, `run-refused`,
1584
+ `read-refused`, `agent-missing` or `agent-ambiguous`. `run-refused` is a run
1585
+ the runtime refused with 401, 402, 403 or 429. That status usually comes from
1586
+ the Intelligence platform key or the app's own auth, so it names no provider.
1587
+ A failed run whose error carried the provider's own code also names it in
1588
+ `providerError`: `auth`, `quota`, `model-not-found`, `rate-limit` or `other`.
1589
+ It is read from that code, never from a status or a message.
1590
+ `verify --round-trip --json` reports both on `roundTrip` too.
1532
1591
  - When the same check fails three proof checks in a row, the command prints
1533
1592
  `Status: stopped`. A later `onboard proof-check` in the same attempt starts no
1534
1593
  server and prints the same stop. Recording the attempt with `onboard proof`
@@ -1628,10 +1687,30 @@ project record, it writes nothing and exits non-zero.
1628
1687
  Inside an onboarding run, a `verify --round-trip --runtime-url <url>` that
1629
1688
  passes on a runtime other than the recorded one does not count for the run.
1630
1689
  `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
1690
+ names this command.
1691
+
1692
+ There is one exception. The pass counts, and `verify` writes `<url>` into the
1693
+ record, when all of these are true:
1694
+
1695
+ - the recorded URL refuses the connection. A timeout, a TLS error, or any
1696
+ answer, even an error, keeps the record;
1697
+ - `<url>` is on this machine;
1698
+ - a process whose working directory is inside this project listens on the
1699
+ port of `<url>`.
1700
+
1701
+ `verify` asks the recorded URL without the `--header` values. In the same
1702
+ run, `onboard proof-check` replaces a recorded URL where nothing answers when
1703
+ 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
1704
  `localhost`, `127.0.0.1`, `0.0.0.0`, and `[::1]` on the same port and path as
1633
1705
  one runtime.
1634
1706
 
1707
+ `onboard proof-check` restarts a server of the app that started before an env file it reads
1708
+ was written, and names the old pids under `servers[].restarted`. After it starts a server, it
1709
+ waits up to 90 seconds for the runtime's `/info`. It waits only while nothing answers or the
1710
+ server answers with an error, as a dev server does while it compiles. A runtime still not up
1711
+ after the wait fails `runtime-answers` with `runtime-not-found`. Any other answer, such as a
1712
+ 401, goes on to `verify`. `serverWaitMs` says how long the wait took.
1713
+
1635
1714
  ### A model key has no credits or is rejected
1636
1715
 
1637
1716
  A key with no credits passes every static check. The first model call then
@@ -1674,8 +1753,10 @@ the Responses API, which the AI SDK uses. The JSON reports the model as `model`,
1674
1753
  it was set as `modelSource`, and the env file that holds it as `modelFile`. The fix for a
1675
1754
  refused model names that file. The key and the model can live in different files, as in
1676
1755
  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
1756
+ the cause `model_unavailable`. When the probe passed, the message names the model that the
1757
+ app's `.env.example` sets in `COPILOTKIT_AGENT_MODEL`, if it is a different model for the same
1758
+ vendor. It never names the probe model: the probe sends a plain request, and the app sends
1759
+ 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
1760
  model is `model_unavailable` too: the key works, and Google gives some models no free-tier
1680
1761
  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
1762
  the key goes to, or else from the first service that sets it (see below). The JSON names
@@ -1776,11 +1857,17 @@ It records every answer from the setup message for the bound run, so a later
1776
1857
  step reads it even after the coding agent lost its context:
1777
1858
 
1778
1859
  - `--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
1860
+ `--framework` takes a framework slug or a name from the framework table that
1861
+ `onboard setup-message --options` lists. Another framework's name is recorded as `frameworkName`, with
1781
1862
  `framework` set to `custom-ag-ui`, the route that builds it. A name close to
1782
1863
  a table row is refused with that row named. Add `--custom-framework` to
1783
- record it as given.
1864
+ record it as given. A framework recorded before any setup message, for a
1865
+ project with no agent of its own, is kept as a default
1866
+ (`frameworkChoice: default`), because research only inferred it. A provider
1867
+ the developer names later can then replace it with one that takes that
1868
+ provider. Add `--framework-choice developer` for a framework the developer
1869
+ named. A framework recorded with `--vendor-choice existing`, or after the
1870
+ message, is the developer's.
1784
1871
  - `--vendor <openai|anthropic|google|openai-compatible|other>`, with
1785
1872
  `--vendor-choice <developer|default|existing>`. An OpenAI-compatible provider
1786
1873
  also needs `--base-url <url>`, an http or https URL with no user, password, or
@@ -1792,6 +1879,9 @@ step reads it even after the coding agent lost its context:
1792
1879
  (`--connection approved|declined`), and the approval to write to an env file
1793
1880
  or `.copilotkit/project.json` with uncommitted changes
1794
1881
  (`--uncommitted-writes approved|declined`).
1882
+ - The env-file answer, when git tracks the env file the key goes into or does
1883
+ not ignore it: `--env-line approved|alternative|declined`.
1884
+ `credentials/finalize-plan` reads it, so the developer is not asked twice.
1795
1885
 
1796
1886
  A later call replaces only the answers it names. The vendor flags replace the
1797
1887
  recorded vendor answer as a whole. With no flag, it prints what the run recorded
@@ -1801,6 +1891,48 @@ must name an existing file. When the key file sets `OPENAI_BASE_URL`, the JSON s
1801
1891
  A free-text answer shaped like a key, such as an `sk-`, `gsk_`, or `AIza` key or
1802
1892
  a long random token, is refused the same way.
1803
1893
 
1894
+ `onboard setup-message` writes the setup message the coding agent shows the
1895
+ developer. The agent first records what the repository already settles with
1896
+ `setup-answers`, then runs it from the target app directory:
1897
+
1898
+ ```bash
1899
+ copilotkit onboard setup-message --target empty --json
1900
+ copilotkit onboard setup-message --target empty --options --json
1901
+ copilotkit onboard setup-message --target empty --options framework --json
1902
+ copilotkit onboard setup-message --target empty --accept-defaults --json
1903
+ ```
1904
+
1905
+ It prints `status`, the `message` to show word for word, the `open` lines, and
1906
+ `next`, what the agent does after it:
1907
+
1908
+ - `ask`: show `message`, wait, and record the reply. The message puts every
1909
+ default on one line that **go** accepts. The model key is the one question
1910
+ **go** never answers: the developer names the file that holds it, or says
1911
+ "later". The message also holds every line that needs the developer's own
1912
+ answer, such as an env file to untrack or files with uncommitted changes.
1913
+ - `settled`: every line is answered. The run goes on to `credentials/plan`.
1914
+ - `needs-credentials`: an existing app on the managed route has no project
1915
+ finding yet. The command runs the read-only `onboard credentials` check
1916
+ itself first, so the env-file and project lines go into the one message with
1917
+ the key. Only a check that settles neither line leaves this status, and the
1918
+ agent then runs `onboard credentials --json` itself.
1919
+ - `stopped`: that check stopped onboarding. It already filed the stop report,
1920
+ and `stopReason` says why.
1921
+ - `needs-toolchain`: the developer chose a framework this machine cannot run
1922
+ yet. The message names what to install, and the run resumes after a restart.
1923
+
1924
+ The summary line names every line, the recorded ones too, while one of them
1925
+ still holds a default. `--options` shows every line with its recommendation
1926
+ first and its likeliest two or three alternatives. `--options <line>`, such as
1927
+ `--options framework` or `--options frontend`, lists every choice on that one
1928
+ line. `--accept-defaults`
1929
+ records the defaults the reply did not change, then prints what is still open.
1930
+ `--language <typescript|python|dotnet>` picks the framework for a project with
1931
+ no agent, and `--vendor` names a model vendor the developer asked for. A vendor
1932
+ the framework does not take becomes a line of its own. On the local route,
1933
+ which `onboard deployment` now records, the message holds the Learning model,
1934
+ the agreement and the connection lines instead of a project.
1935
+
1804
1936
  Only the developer accepts the local evaluation agreement, in their own
1805
1937
  terminal, with `copilotkit local accept-terms`. The command refuses to run
1806
1938
  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.28.0"
6
6
  },
7
7
  "intelligence": {
8
- "commit": "85be7ded256d48363acf91081520e5492d5ec0bc"
8
+ "commit": "a033e00c2995392ce8ace961b4aba1acdf4705f5"
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": "38464768008",
18
+ "runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/38464768008"
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-13T20:42:43Z"
28
28
  }