copilotkit 4.8.4 → 4.9.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 (44) hide show
  1. package/README.md +22 -5
  2. package/cli-build-info.json +7 -7
  3. package/index.js +109 -33
  4. package/onboarding/index.json +140 -1
  5. package/onboarding/prompts/authenticate/start.md +21 -4
  6. package/onboarding/prompts/credentials/finalize-plan.md +39 -14
  7. package/onboarding/prompts/credentials/plan.md +48 -16
  8. package/onboarding/prompts/fallback/best-effort.md +29 -0
  9. package/onboarding/prompts/framework/ag2.md +48 -0
  10. package/onboarding/prompts/framework/agno.md +48 -0
  11. package/onboarding/prompts/framework/built-in.md +43 -0
  12. package/onboarding/prompts/framework/claude-sdk-python.md +49 -0
  13. package/onboarding/prompts/framework/claude-sdk-typescript.md +53 -0
  14. package/onboarding/prompts/framework/crewai-flows.md +56 -0
  15. package/onboarding/prompts/framework/deep-agents.md +45 -0
  16. package/onboarding/prompts/framework/google-adk.md +8 -3
  17. package/onboarding/prompts/framework/langgraph-fastapi.md +42 -0
  18. package/onboarding/prompts/framework/langgraph-python.md +8 -3
  19. package/onboarding/prompts/framework/langgraph-typescript.md +8 -3
  20. package/onboarding/prompts/framework/llamaindex.md +51 -0
  21. package/onboarding/prompts/framework/mastra.md +8 -3
  22. package/onboarding/prompts/framework/ms-agent-dotnet.md +8 -3
  23. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +62 -0
  24. package/onboarding/prompts/framework/ms-agent-python.md +8 -3
  25. package/onboarding/prompts/framework/pydantic-ai.md +48 -0
  26. package/onboarding/prompts/framework/strands-python.md +42 -0
  27. package/onboarding/prompts/framework/strands-typescript.md +42 -0
  28. package/onboarding/prompts/frontend/angular.md +9 -3
  29. package/onboarding/prompts/frontend/nextjs.md +8 -3
  30. package/onboarding/prompts/frontend/plan.md +16 -10
  31. package/onboarding/prompts/frontend/react-native.md +9 -3
  32. package/onboarding/prompts/frontend/react-spa.md +20 -5
  33. package/onboarding/prompts/frontend/vue.md +9 -3
  34. package/onboarding/prompts/implementation/build-and-validate.md +12 -2
  35. package/onboarding/prompts/proof/complete.md +18 -9
  36. package/onboarding/prompts/proof/oss-baseline.md +59 -0
  37. package/onboarding/prompts/proof/round-trip.md +26 -11
  38. package/onboarding/prompts/subagent/create-plan.md +14 -2
  39. package/onboarding/prompts/subagent/implement-and-validate.md +10 -0
  40. package/onboarding/prompts/subagent/prove-oss-baseline.md +35 -0
  41. package/onboarding/prompts/subagent/prove-round-trip.md +21 -8
  42. package/onboarding/prompts/unsupported/no-validated-path.md +22 -9
  43. package/package.json +1 -1
  44. package/release/release-tool.js +1 -1
package/README.md CHANGED
@@ -44,6 +44,7 @@ answer up front and run anywhere:
44
44
 
45
45
  ```bash
46
46
  copilotkit project list --json # see the choices
47
+ copilotkit project list --search support --json # search name, slug, or id
47
48
  copilotkit project select --project <slug-or-id> # pick an existing one
48
49
  copilotkit project select --create "My App" --json # create one and select it
49
50
  ```
@@ -57,12 +58,19 @@ slugs instead of recording a selection that points at nothing.
57
58
  ```json
58
59
  {
59
60
  "type": "completed",
61
+ "selected_project_slug": "my-app",
60
62
  "project": { "id": "220", "slug": "my-app", "organizationId": "org_123" },
61
63
  "config_path": "/work/my-repo/.copilotkit/project.json",
62
- "api_key_provisioned": true
64
+ "project_file_written": true,
65
+ "api_key_provisioned": true,
66
+ "environment_file_written": true
63
67
  }
64
68
  ```
65
69
 
70
+ The four top-level summary fields let a coding agent read the result without
71
+ searching the nested object or reading either file. The payload never contains
72
+ the API key.
73
+
66
74
  `config_path` is absolute, and it is not always under the directory you ran in.
67
75
  The project record is repository-scoped: it goes into an existing `.copilotkit/`
68
76
  at or above the current directory when there is one, and otherwise into the
@@ -75,11 +83,12 @@ directory you ran in, because that is the file the app process loads — so in a
75
83
  repository with a `web/` and an `agent/` half, run `project select` in the half
76
84
  that needs the key.
77
85
 
78
- **Check `api_key_provisioned`, not just the exit code.** Key provisioning is
86
+ **Check all four summary fields, not just the exit code.** Key provisioning is
79
87
  deliberately non-fatal: if it fails, the selection is still persisted, a warning
80
88
  goes to stderr, and the command still exits 0 — leaving a scaffold with no
81
89
  `INTELLIGENCE_API_KEY`, whose first run fails with an opaque "Failed to
82
- initialize thread". That field is the only machine-readable signal of it.
90
+ initialize thread". `api_key_provisioned` and `environment_file_written` are
91
+ false in this state.
83
92
  Re-running `project select` is a valid recovery.
84
93
 
85
94
  Failures use the `login --json` shape, `{"error": "...", "type": "failed"}`, and
@@ -454,6 +463,7 @@ copilotkit verify
454
463
  copilotkit verify --json # machine-readable output
455
464
  copilotkit verify --runtime-url http://localhost:8080/copilotkit
456
465
  copilotkit verify --round-trip # also run the agent
466
+ copilotkit verify --expect-runtime oss --round-trip --agent incident_triage
457
467
  ```
458
468
 
459
469
  It checks that a hosted project is selected, that a project API key is present
@@ -485,6 +495,12 @@ a caller can branch on the command instead of parsing it. With `--json` the
485
495
  payload is the only thing on stdout and every diagnostic goes to stderr, so
486
496
  piping is safe.
487
497
 
498
+ Use `--expect-runtime oss` to prove an open-source runtime instead. In this
499
+ mode, hosted project, key, and thread-route checks do not apply. The command
500
+ exits zero only when `/info` is valid, declares the agent named by `--agent`,
501
+ omits `licenseStatus`, and `--round-trip` passes. Both `--round-trip` and
502
+ `--agent` are required for an OSS pass.
503
+
488
504
  The runtime URL defaults to `http://localhost:3000/api/copilotkit` and the
489
505
  report always states which URL it probed, because a wrong default is the most
490
506
  likely reason for a runtime failure. Pass `--runtime-url` when the frontend
@@ -634,8 +650,9 @@ report `<version>-pre.<shortsha>` from `copilotkit --version`, so a tester's
634
650
  build is always identifiable. `copilotkit version` also reports the canonical
635
651
  Intelligence and first-party CopilotKit commits embedded in the artifact.
636
652
 
637
- Pushes and PRs continue to publish `CLI_ENV=local` builds automatically, as
638
- before.
653
+ Pushes publish `CLI_ENV=local` builds automatically. Pull requests publish
654
+ `CLI_ENV=production` builds under the separate `copilotkit-pr` package name so
655
+ testers can use hosted login without confusing the artifact with a release.
639
656
 
640
657
  Note: `workflow_dispatch` only works against refs that contain the dispatch
641
658
  trigger — branches cut before this workflow landed need a merge from `main`
@@ -2,20 +2,20 @@
2
2
  "schemaVersion": 1,
3
3
  "package": {
4
4
  "name": "copilotkit",
5
- "version": "4.8.4"
5
+ "version": "4.9.0"
6
6
  },
7
7
  "intelligence": {
8
- "commit": "6483664ecea767ad39fe52106d85b94731740150"
8
+ "commit": "fab380427c6324aaf090b195af0f51eaf4a1a407"
9
9
  },
10
10
  "copilotKit": {
11
- "submittedInput": "47c5510b4909f6728288ecf28d7b14cd14922d33",
12
- "commit": "47c5510b4909f6728288ecf28d7b14cd14922d33"
11
+ "submittedInput": "bf2068734bcc42b9dc9999b183d0fd07a673f713",
12
+ "commit": "bf2068734bcc42b9dc9999b183d0fd07a673f713"
13
13
  },
14
14
  "channel": "production",
15
15
  "triggeringActor": "MikeRyanDev",
16
16
  "workflow": {
17
- "runId": "32806721876",
18
- "runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/32806721876"
17
+ "runId": "32886074334",
18
+ "runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/32886074334"
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-08-25T03:52:56Z"
27
+ "builtAt": "2026-08-25T18:51:51Z"
28
28
  }
package/index.js CHANGED
@@ -96,14 +96,14 @@ function getTelemetryEndpointUrl() {
96
96
  }
97
97
  function getBuildInfo() {
98
98
  return {
99
- version: true ? "4.8.4" : "dev",
100
- buildNumber: true ? "32806721876" : "dev",
101
- commitSha: true ? "6483664ecea767ad39fe52106d85b94731740150" : "dev",
99
+ version: true ? "4.9.0" : "dev",
100
+ buildNumber: true ? "32886074334" : "dev",
101
+ commitSha: true ? "fab380427c6324aaf090b195af0f51eaf4a1a407" : "dev",
102
102
  copilotKitCommit: getTemplateRef()
103
103
  };
104
104
  }
105
105
  function getTemplateRef() {
106
- return true ? "47c5510b4909f6728288ecf28d7b14cd14922d33" : "main";
106
+ return true ? "bf2068734bcc42b9dc9999b183d0fd07a673f713" : "main";
107
107
  }
108
108
  function getC15tBackendUrl() {
109
109
  return true ? "https://calm-hazelnut-joy-copilotkit.inth.app" : "";
@@ -94890,8 +94890,12 @@ var project_list_exports = {};
94890
94890
  __export(project_list_exports, {
94891
94891
  runProjectList: () => runProjectList
94892
94892
  });
94893
- function renderTable(projects, selectedId, organizationId) {
94893
+ function renderTable(projects, selectedId, organizationId, search) {
94894
94894
  if (projects.length === 0) {
94895
+ if (search !== void 0) {
94896
+ return `No hosted Intelligence projects match "${search}" in ${organizationId}.
94897
+ `;
94898
+ }
94895
94899
  return `No hosted Intelligence projects exist in ${organizationId} yet.
94896
94900
  Run \`copilotkit project select --create <name>\` to create one.
94897
94901
  `;
@@ -94933,8 +94937,16 @@ async function driveProjectList(options) {
94933
94937
  return { kind: "api-error", error: error98 };
94934
94938
  }
94935
94939
  const selectedId = findProjectConfig(process.cwd())?.projectId;
94940
+ const trimmedSearch = options.search?.trim();
94941
+ const search = trimmedSearch === "" ? void 0 : trimmedSearch;
94942
+ const matchedProjects = search === void 0 || search.length === 0 ? projects : projects.filter((project) => {
94943
+ const query = search.toLocaleLowerCase();
94944
+ return [project.id, project.slug, project.name].some(
94945
+ (value) => value.toLocaleLowerCase().includes(query)
94946
+ );
94947
+ });
94936
94948
  if (options.json) {
94937
- const rows = projects.map((project) => ({
94949
+ const rows = matchedProjects.map((project) => ({
94938
94950
  id: project.id,
94939
94951
  slug: project.slug,
94940
94952
  name: project.name,
@@ -94947,6 +94959,7 @@ async function driveProjectList(options) {
94947
94959
  {
94948
94960
  organizationId: auth2.clerkOrgId,
94949
94961
  selectedProjectId: selectedId ?? null,
94962
+ search: search ?? null,
94950
94963
  projects: rows
94951
94964
  },
94952
94965
  null,
@@ -94956,7 +94969,9 @@ async function driveProjectList(options) {
94956
94969
  );
94957
94970
  return { kind: "success" };
94958
94971
  }
94959
- process.stdout.write(renderTable(projects, selectedId, auth2.clerkOrgId));
94972
+ process.stdout.write(
94973
+ renderTable(matchedProjects, selectedId, auth2.clerkOrgId, search)
94974
+ );
94960
94975
  return { kind: "success" };
94961
94976
  }
94962
94977
  async function runProjectList(options) {
@@ -95691,13 +95706,16 @@ Run \`copilotkit project list --json\` to see ids alongside slugs.
95691
95706
  function buildProjectSelectJson(selection, apiKeyProvisioned, configPath) {
95692
95707
  return {
95693
95708
  type: "completed",
95709
+ selected_project_slug: selection.projectSlug,
95694
95710
  project: {
95695
95711
  id: selection.projectId,
95696
95712
  slug: selection.projectSlug,
95697
95713
  organizationId: selection.organizationId
95698
95714
  },
95699
95715
  config_path: configPath,
95700
- api_key_provisioned: apiKeyProvisioned
95716
+ project_file_written: true,
95717
+ api_key_provisioned: apiKeyProvisioned,
95718
+ environment_file_written: apiKeyProvisioned
95701
95719
  };
95702
95720
  }
95703
95721
  var init_project_select_flags = __esm({
@@ -373441,7 +373459,7 @@ function intelligenceConsumedCheck(credential, runtime) {
373441
373459
  }
373442
373460
  if (runtime.info.licenseStatus === void 0) {
373443
373461
  return {
373444
- detail: `The key authenticates, but the runtime reports no license, which means it was built without an Intelligence client and is running in SSE mode. The key is never read: threads are not durable and nothing reaches the platform. Pass \`intelligence: new CopilotKitIntelligence({ apiKey })\` where the runtime is constructed \u2014 https://docs.copilotkit.ai/premium/connect-your-runtime`,
373462
+ detail: `The key authenticates, but the runtime reports no license, which means it was built without an Intelligence client and is running in OSS/SSE mode. The key is never read and nothing reaches the platform. The default in-memory OSS runner is ephemeral. SQLite, custom, or framework persistence can be durable. Pass \`intelligence: new CopilotKitIntelligence({ apiKey })\` where the runtime is constructed \u2014 https://docs.copilotkit.ai/premium/connect-your-runtime`,
373445
373463
  id: "intelligence_consumed",
373446
373464
  status: "fail",
373447
373465
  title
@@ -373454,6 +373472,31 @@ function intelligenceConsumedCheck(credential, runtime) {
373454
373472
  title
373455
373473
  };
373456
373474
  }
373475
+ function ossRuntimeModeCheck(runtime) {
373476
+ const title = "The runtime uses the expected OSS mode";
373477
+ if (runtime.kind !== "ok") {
373478
+ return {
373479
+ detail: "Not attempted: the runtime did not return valid /info data. Fix the runtime check above first.",
373480
+ id: "runtime_mode",
373481
+ status: "undetermined",
373482
+ title
373483
+ };
373484
+ }
373485
+ if (runtime.info.licenseStatus !== void 0) {
373486
+ return {
373487
+ detail: `The runtime reports license ${runtime.info.licenseStatus}, so it uses Intelligence rather than OSS mode.`,
373488
+ id: "runtime_mode",
373489
+ status: "fail",
373490
+ title
373491
+ };
373492
+ }
373493
+ return {
373494
+ detail: "The runtime returned valid /info data without licenseStatus, as expected for OSS mode.",
373495
+ id: "runtime_mode",
373496
+ status: "pass",
373497
+ title
373498
+ };
373499
+ }
373457
373500
  function intelligenceThreadRoutesCheck(runtime) {
373458
373501
  const title = "The runtime serves the Intelligence thread routes";
373459
373502
  if (runtime.kind !== "ok") {
@@ -373515,8 +373558,12 @@ function collectFacts(input) {
373515
373558
  runtimeVersion: info?.version
373516
373559
  };
373517
373560
  }
373518
- function runVerifyChecks(input) {
373519
- const checks = [
373561
+ function runVerifyChecks(input, expectedRuntime = "intelligence") {
373562
+ const checks = expectedRuntime === "oss" ? [
373563
+ runtimeReachableCheck(input.runtime),
373564
+ runtimeAgentsCheck(input.runtime),
373565
+ ossRuntimeModeCheck(input.runtime)
373566
+ ] : [
373520
373567
  projectSelectedCheck(input.projectConfig),
373521
373568
  apiKeyPresentCheck(
373522
373569
  input.apiKeyVariableName,
@@ -373861,18 +373908,24 @@ async function runVerify(options, overrides = {}) {
373861
373908
  probeRuntimeInfo(runtimeUrl, deps.fetchImpl)
373862
373909
  ]);
373863
373910
  const apiKeySource = apiKey === void 0 || deps.env[apiKey.variableName] !== void 0 ? void 0 : projectEnv.origins[apiKey.variableName];
373864
- const result = runVerifyChecks({
373865
- apiKeySource,
373866
- apiKeyVariableName: apiKey?.variableName,
373867
- credential,
373868
- envSearch: {
373869
- ceiling: projectEnv.ceiling,
373870
- searchedFrom: projectEnv.searchedFrom
373911
+ const expectedRuntime = options.expectRuntime ?? "intelligence";
373912
+ const result = runVerifyChecks(
373913
+ {
373914
+ apiKeySource,
373915
+ apiKeyVariableName: apiKey?.variableName,
373916
+ credential,
373917
+ envSearch: {
373918
+ ceiling: projectEnv.ceiling,
373919
+ searchedFrom: projectEnv.searchedFrom
373920
+ },
373921
+ projectConfig,
373922
+ runtime
373871
373923
  },
373872
- projectConfig,
373873
- runtime
373874
- });
373875
- const roundTrip = options.roundTrip === true ? await runLiveRoundTrip(options, deps, runtimeUrl, runtime) : void 0;
373924
+ expectedRuntime
373925
+ );
373926
+ const roundTrip = expectedRuntime === "oss" && (options.roundTrip !== true || options.agent === void 0) ? notAttempted(
373927
+ "Not attempted: --expect-runtime oss requires --round-trip --agent <id> so the named agent must answer before this command can pass."
373928
+ ) : options.roundTrip === true ? await runLiveRoundTrip(options, deps, runtimeUrl, runtime) : void 0;
373876
373929
  const context3 = { runtimeUrl, runtimeUrlSource };
373877
373930
  deps.stdout(
373878
373931
  options.json ? renderVerifyJson(result, context3, roundTrip) : renderVerifyReport(result, context3, roundTrip)
@@ -384402,6 +384455,7 @@ refused before anything is sent, and the reason is printed. Both commands print
384402
384455
  what they sent. Every refusal exits zero and leaves onboarding unaffected.
384403
384456
  `,
384404
384457
  verify: `Usage: copilotkit verify [--json] [--runtime-url <url>] [--round-trip]
384458
+ [--expect-runtime <mode>]
384405
384459
 
384406
384460
  Check that this project's CopilotKit wiring works, and report what it found.
384407
384461
 
@@ -384418,10 +384472,15 @@ the answer back from the thread, which is the only check here that proves the
384418
384472
  agent runs rather than that it is configured. That costs a model call and
384419
384473
  records a thread, so it is opt-in.
384420
384474
 
384475
+ With --expect-runtime oss, hosted project and credential checks do not apply.
384476
+ The command exits zero only when valid /info data declares the named agent,
384477
+ licenseStatus is absent, and --round-trip --agent <id> passes.
384478
+
384421
384479
  Options:
384422
384480
  --json Emit a machine-readable payload alone on stdout
384423
384481
  --runtime-url <url> The CopilotKit runtime endpoint to probe
384424
384482
  (default: http://localhost:3000/api/copilotkit)
384483
+ --expect-runtime <mode> Require intelligence (default) or oss runtime mode
384425
384484
  --round-trip Also run the agent and read its answer back
384426
384485
  --agent <id> Which declared agent to run, when there are several
384427
384486
  --timeout <seconds> How long to wait for the answer (default: 90)
@@ -384612,6 +384671,7 @@ one currently selected in .copilotkit/project.json.
384612
384671
 
384613
384672
  Options:
384614
384673
  --json Emit a machine-readable payload instead of a table
384674
+ --search <query> Match a project name, slug, or id
384615
384675
  -h, --help Show help for project list
384616
384676
 
384617
384677
  Runs with no TTY, so a coding agent can read the choices before selecting one.
@@ -384641,9 +384701,10 @@ organization's real projects, so a typo fails with the available slugs rather
384641
384701
  than recording a selection that points at nothing. Run
384642
384702
  \`copilotkit project list --json\` first to see them.
384643
384703
 
384644
- --json reports api_key_provisioned. Key provisioning is deliberately non-fatal,
384645
- so a run can persist the selection, warn on stderr, and still exit 0 with no key
384646
- written; that field is how a caller detects it without reading stderr.
384704
+ --json reports selected_project_slug, project_file_written,
384705
+ api_key_provisioned, and environment_file_written. Key provisioning is
384706
+ deliberately non-fatal, so the key fields can be false after exit 0. The payload
384707
+ never contains the API key.
384647
384708
 
384648
384709
  With --json the payload is the ONLY thing on stdout: warnings, errors, and the
384649
384710
  interactive picker itself all render to stderr, so piping stdout into a parser
@@ -385196,15 +385257,22 @@ async function runProjectCommand(argv) {
385196
385257
  const parsed2 = parseArgs4({
385197
385258
  args: [...argv.slice(1)],
385198
385259
  options: {
385199
- json: { type: "boolean" }
385260
+ json: { type: "boolean" },
385261
+ search: { type: "string" }
385200
385262
  },
385201
385263
  strict: true,
385202
385264
  allowPositionals: false
385203
385265
  });
385204
- await withTelemetry({ command: "project", subcommand: "list" }, async () => {
385205
- const { runProjectList: runProjectList2 } = await Promise.resolve().then(() => (init_project_list(), project_list_exports));
385206
- await runProjectList2({ json: parsed2.values["json"] === true });
385207
- });
385266
+ await withTelemetry(
385267
+ { command: "project", subcommand: "list" },
385268
+ async () => {
385269
+ const { runProjectList: runProjectList2 } = await Promise.resolve().then(() => (init_project_list(), project_list_exports));
385270
+ await runProjectList2({
385271
+ json: parsed2.values["json"] === true,
385272
+ search: parsed2.values["search"]
385273
+ });
385274
+ }
385275
+ );
385208
385276
  return;
385209
385277
  }
385210
385278
  if (subcommand !== "select") {
@@ -385558,6 +385626,7 @@ async function runVerifyCommand(argv) {
385558
385626
  args: [...argv],
385559
385627
  options: {
385560
385628
  agent: { type: "string" },
385629
+ "expect-runtime": { type: "string" },
385561
385630
  header: { multiple: true, type: "string" },
385562
385631
  json: { type: "boolean" },
385563
385632
  "round-trip": { type: "boolean" },
@@ -385581,6 +385650,14 @@ async function runVerifyCommand(argv) {
385581
385650
  if (timeoutSeconds !== void 0 && !/^\d+$/.test(timeoutSeconds)) {
385582
385651
  process.stderr.write(
385583
385652
  `Error: --timeout must be a whole number of seconds (received "${timeoutSeconds}").
385653
+ `
385654
+ );
385655
+ await exitWithFlush(1);
385656
+ }
385657
+ const expectedRuntime = parsed.values["expect-runtime"];
385658
+ if (expectedRuntime !== void 0 && expectedRuntime !== "intelligence" && expectedRuntime !== "oss") {
385659
+ process.stderr.write(
385660
+ `Error: --expect-runtime must be intelligence or oss (received "${expectedRuntime}").
385584
385661
  `
385585
385662
  );
385586
385663
  await exitWithFlush(1);
@@ -385589,9 +385666,7 @@ async function runVerifyCommand(argv) {
385589
385666
  parsed.values["header"] ?? []
385590
385667
  );
385591
385668
  if (headers === void 0) {
385592
- process.stderr.write(
385593
- 'Error: --header expects "Name: value".\n'
385594
- );
385669
+ process.stderr.write('Error: --header expects "Name: value".\n');
385595
385670
  await exitWithFlush(1);
385596
385671
  }
385597
385672
  const agent = parsed.values["agent"];
@@ -385599,6 +385674,7 @@ async function runVerifyCommand(argv) {
385599
385674
  await runVerify2({
385600
385675
  json: parsed.values["json"] === true,
385601
385676
  ...agent === void 0 ? {} : { agent },
385677
+ ...expectedRuntime === void 0 ? {} : { expectRuntime: expectedRuntime },
385602
385678
  ...headers === void 0 || Object.keys(headers).length === 0 ? {} : { headers },
385603
385679
  ...parsed.values["round-trip"] === true ? { roundTrip: true } : {},
385604
385680
  ...runtimeUrl === void 0 ? {} : { runtimeUrl },
@@ -3,6 +3,7 @@
3
3
  "prompts": [
4
4
  {
5
5
  "edges": [
6
+ "proof/oss-baseline",
6
7
  "credentials/plan",
7
8
  "unsupported/no-validated-path"
8
9
  ],
@@ -19,17 +20,91 @@
19
20
  },
20
21
  {
21
22
  "edges": [
23
+ "framework/ag2",
24
+ "framework/agno",
25
+ "framework/built-in",
26
+ "framework/claude-sdk-python",
27
+ "framework/claude-sdk-typescript",
28
+ "framework/crewai-flows",
29
+ "framework/deep-agents",
22
30
  "framework/langgraph-python",
31
+ "framework/langgraph-fastapi",
23
32
  "framework/langgraph-typescript",
33
+ "framework/llamaindex",
24
34
  "framework/google-adk",
25
35
  "framework/ms-agent-python",
26
36
  "framework/ms-agent-dotnet",
27
37
  "framework/mastra",
38
+ "framework/ms-agent-harness-dotnet",
39
+ "framework/pydantic-ai",
40
+ "framework/strands-python",
41
+ "framework/strands-typescript",
28
42
  "unsupported/no-validated-path"
29
43
  ],
30
44
  "milestone": "credentials",
31
45
  "name": "credentials/plan"
32
46
  },
47
+ {
48
+ "edges": [],
49
+ "milestone": "fallback",
50
+ "name": "fallback/best-effort"
51
+ },
52
+ {
53
+ "edges": [
54
+ "frontend/plan",
55
+ "unsupported/no-validated-path"
56
+ ],
57
+ "milestone": "framework",
58
+ "name": "framework/ag2"
59
+ },
60
+ {
61
+ "edges": [
62
+ "frontend/plan",
63
+ "unsupported/no-validated-path"
64
+ ],
65
+ "milestone": "framework",
66
+ "name": "framework/agno"
67
+ },
68
+ {
69
+ "edges": [
70
+ "frontend/plan",
71
+ "unsupported/no-validated-path"
72
+ ],
73
+ "milestone": "framework",
74
+ "name": "framework/built-in"
75
+ },
76
+ {
77
+ "edges": [
78
+ "frontend/plan",
79
+ "unsupported/no-validated-path"
80
+ ],
81
+ "milestone": "framework",
82
+ "name": "framework/claude-sdk-python"
83
+ },
84
+ {
85
+ "edges": [
86
+ "frontend/plan",
87
+ "unsupported/no-validated-path"
88
+ ],
89
+ "milestone": "framework",
90
+ "name": "framework/claude-sdk-typescript"
91
+ },
92
+ {
93
+ "edges": [
94
+ "frontend/plan",
95
+ "unsupported/no-validated-path"
96
+ ],
97
+ "milestone": "framework",
98
+ "name": "framework/crewai-flows"
99
+ },
100
+ {
101
+ "edges": [
102
+ "frontend/plan",
103
+ "unsupported/no-validated-path"
104
+ ],
105
+ "milestone": "framework",
106
+ "name": "framework/deep-agents"
107
+ },
33
108
  {
34
109
  "edges": [
35
110
  "frontend/plan",
@@ -38,6 +113,14 @@
38
113
  "milestone": "framework",
39
114
  "name": "framework/google-adk"
40
115
  },
116
+ {
117
+ "edges": [
118
+ "frontend/plan",
119
+ "unsupported/no-validated-path"
120
+ ],
121
+ "milestone": "framework",
122
+ "name": "framework/langgraph-fastapi"
123
+ },
41
124
  {
42
125
  "edges": [
43
126
  "frontend/plan",
@@ -54,6 +137,14 @@
54
137
  "milestone": "framework",
55
138
  "name": "framework/langgraph-typescript"
56
139
  },
140
+ {
141
+ "edges": [
142
+ "frontend/plan",
143
+ "unsupported/no-validated-path"
144
+ ],
145
+ "milestone": "framework",
146
+ "name": "framework/llamaindex"
147
+ },
57
148
  {
58
149
  "edges": [
59
150
  "frontend/plan",
@@ -70,6 +161,14 @@
70
161
  "milestone": "framework",
71
162
  "name": "framework/ms-agent-dotnet"
72
163
  },
164
+ {
165
+ "edges": [
166
+ "frontend/plan",
167
+ "unsupported/no-validated-path"
168
+ ],
169
+ "milestone": "framework",
170
+ "name": "framework/ms-agent-harness-dotnet"
171
+ },
73
172
  {
74
173
  "edges": [
75
174
  "frontend/plan",
@@ -78,6 +177,30 @@
78
177
  "milestone": "framework",
79
178
  "name": "framework/ms-agent-python"
80
179
  },
180
+ {
181
+ "edges": [
182
+ "frontend/plan",
183
+ "unsupported/no-validated-path"
184
+ ],
185
+ "milestone": "framework",
186
+ "name": "framework/pydantic-ai"
187
+ },
188
+ {
189
+ "edges": [
190
+ "frontend/plan",
191
+ "unsupported/no-validated-path"
192
+ ],
193
+ "milestone": "framework",
194
+ "name": "framework/strands-python"
195
+ },
196
+ {
197
+ "edges": [
198
+ "frontend/plan",
199
+ "unsupported/no-validated-path"
200
+ ],
201
+ "milestone": "framework",
202
+ "name": "framework/strands-typescript"
203
+ },
81
204
  {
82
205
  "edges": [
83
206
  "credentials/finalize-plan",
@@ -116,6 +239,7 @@
116
239
  },
117
240
  {
118
241
  "edges": [
242
+ "credentials/finalize-plan",
119
243
  "unsupported/no-validated-path"
120
244
  ],
121
245
  "milestone": "frontend",
@@ -142,6 +266,14 @@
142
266
  "milestone": "proof",
143
267
  "name": "proof/complete"
144
268
  },
269
+ {
270
+ "edges": [
271
+ "credentials/plan",
272
+ "unsupported/no-validated-path"
273
+ ],
274
+ "milestone": "proof",
275
+ "name": "proof/oss-baseline"
276
+ },
145
277
  {
146
278
  "edges": [
147
279
  "proof/complete",
@@ -168,10 +300,17 @@
168
300
  {
169
301
  "edges": [],
170
302
  "milestone": "subagent",
171
- "name": "subagent/prove-round-trip"
303
+ "name": "subagent/prove-oss-baseline"
172
304
  },
173
305
  {
174
306
  "edges": [],
307
+ "milestone": "subagent",
308
+ "name": "subagent/prove-round-trip"
309
+ },
310
+ {
311
+ "edges": [
312
+ "fallback/best-effort"
313
+ ],
175
314
  "milestone": "unsupported",
176
315
  "name": "unsupported/no-validated-path"
177
316
  }
@@ -14,7 +14,12 @@ question from the documentation this graph gives you. Another checkout on this m
14
14
  not a source. The developer running this has none, so an answer taken from one is an
15
15
  answer they cannot get, and it hides the documentation gap that blocks them.
16
16
 
17
- Run `npx copilotkit@4.8.4 login --json` before any project work. This command checks the
17
+ Tell the developer that onboarding can send feedback outside this machine. Explain that
18
+ the reports contain short descriptions of CLI or documentation problems. Ask whether the
19
+ developer permits these reports before project work starts. Record the answer. Do not send
20
+ feedback unless the developer permits it.
21
+
22
+ Run `npx --yes copilotkit@4.9.0 login --json` before any project work. This command checks the
18
23
  current session. It starts sign-in only as needed.
19
24
 
20
25
  Read its JSON Lines output in order:
@@ -34,10 +39,17 @@ prompt and tell it to follow that brief and return only its findings. Add these
34
39
  - Check whether `.copilotkit/project.json` has `projectId`, `projectSlug`, and `clerkOrgId`.
35
40
  - Check whether `.env` has a non-empty `INTELLIGENCE_API_KEY` entry.
36
41
  - Record the `.env` file modification time without returning it.
42
+ - Report whether an agent, frontend, and CopilotKit integration are present.
43
+ - Report whether the runtime constructor uses a `runner` option, an `intelligence`
44
+ option, or neither can be proved from project files.
37
45
 
38
46
  Do not print either file or any secret value. Return only paths, presence checks, and missing
39
47
  field names. Wait for the subagent to finish.
40
48
 
49
+ If the findings show an empty project and do not prove its purpose, ask what the developer
50
+ wants to build before you select a framework. Ask this question immediately. Record the
51
+ answer and give it to each later subagent.
52
+
41
53
  If a repository file exists, each finding must cite it. For an empty project, the subagent
42
54
  must cite its directory check and report absent parts.
43
55
 
@@ -45,11 +57,16 @@ The findings must cover what the project is for, the agent, frontend, CopilotKit
45
57
  authentication, credential names, and validation path. Do not ask the developer for facts
46
58
  that the repository answers.
47
59
 
48
- When the evidence is complete, run
49
- `npx copilotkit@4.8.4 onboard read credentials/plan`.
60
+ Do not infer a working OSS path from packages, imports, project files, or keys. If an
61
+ agent, frontend, and CopilotKit integration are present, prove the live starting state
62
+ before any project file changes. Run
63
+ `npx --yes copilotkit@4.9.0 onboard read proof/oss-baseline`.
64
+
65
+ For every other inspected state, run
66
+ `npx --yes copilotkit@4.9.0 onboard read credentials/plan`.
50
67
 
51
68
  If authentication or inspection stops onboarding, run
52
- `npx copilotkit@4.8.4 onboard read unsupported/no-validated-path`.
69
+ `npx --yes copilotkit@4.9.0 onboard read unsupported/no-validated-path`.
53
70
 
54
71
  ## Research subagent brief
55
72