copilotkit 4.9.1 → 4.9.4
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/cli-build-info.json +8 -8
- package/index.js +151 -21
- package/onboarding/index.json +11 -0
- package/onboarding/prompts/authenticate/start.md +83 -32
- package/onboarding/prompts/credentials/finalize-plan.md +51 -33
- package/onboarding/prompts/credentials/plan.md +37 -25
- package/onboarding/prompts/fallback/best-effort.md +22 -11
- package/onboarding/prompts/framework/ag2.md +4 -15
- package/onboarding/prompts/framework/agno.md +4 -15
- package/onboarding/prompts/framework/built-in.md +4 -14
- package/onboarding/prompts/framework/claude-sdk-python.md +4 -14
- package/onboarding/prompts/framework/claude-sdk-typescript.md +4 -14
- package/onboarding/prompts/framework/crewai-flows.md +11 -23
- package/onboarding/prompts/framework/deep-agents.md +4 -15
- package/onboarding/prompts/framework/google-adk.md +3 -15
- package/onboarding/prompts/framework/langgraph-fastapi.md +3 -15
- package/onboarding/prompts/framework/langgraph-python.md +3 -15
- package/onboarding/prompts/framework/langgraph-typescript.md +3 -15
- package/onboarding/prompts/framework/llamaindex.md +4 -15
- package/onboarding/prompts/framework/mastra.md +3 -15
- package/onboarding/prompts/framework/ms-agent-dotnet.md +18 -49
- package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +20 -30
- package/onboarding/prompts/framework/ms-agent-python.md +3 -15
- package/onboarding/prompts/framework/pydantic-ai.md +4 -14
- package/onboarding/prompts/framework/strands-python.md +4 -14
- package/onboarding/prompts/framework/strands-typescript.md +4 -14
- package/onboarding/prompts/frontend/angular.md +13 -18
- package/onboarding/prompts/frontend/nextjs.md +20 -15
- package/onboarding/prompts/frontend/plan.md +9 -14
- package/onboarding/prompts/frontend/react-native.md +7 -15
- package/onboarding/prompts/frontend/react-spa.md +5 -15
- package/onboarding/prompts/frontend/vue.md +8 -15
- package/onboarding/prompts/implementation/build-and-validate.md +22 -13
- package/onboarding/prompts/proof/complete.md +32 -5
- package/onboarding/prompts/proof/oss-baseline.md +3 -3
- package/onboarding/prompts/proof/round-trip.md +197 -72
- package/onboarding/prompts/starter/clone.md +67 -0
- package/onboarding/prompts/subagent/create-plan.md +26 -15
- package/onboarding/prompts/subagent/implement-and-validate.md +19 -10
- package/onboarding/prompts/subagent/inspect-repository.md +19 -7
- package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
- package/onboarding/prompts/subagent/prove-round-trip.md +176 -68
- package/onboarding/prompts/unsupported/no-validated-path.md +2 -2
- package/package.json +1 -1
- package/release/release-tool.js +15 -1
package/cli-build-info.json
CHANGED
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": {
|
|
4
4
|
"name": "copilotkit",
|
|
5
|
-
"version": "4.9.
|
|
5
|
+
"version": "4.9.4"
|
|
6
6
|
},
|
|
7
7
|
"intelligence": {
|
|
8
|
-
"commit": "
|
|
8
|
+
"commit": "db031f9bc6f6c3918774aa8e375b6938ad66bb5e"
|
|
9
9
|
},
|
|
10
10
|
"copilotKit": {
|
|
11
|
-
"submittedInput": "
|
|
12
|
-
"commit": "
|
|
11
|
+
"submittedInput": "f6f2dc4bb62b50d2f09384619f5b9e8fe7edde02",
|
|
12
|
+
"commit": "f6f2dc4bb62b50d2f09384619f5b9e8fe7edde02"
|
|
13
13
|
},
|
|
14
14
|
"channel": "production",
|
|
15
|
-
"triggeringActor": "
|
|
15
|
+
"triggeringActor": "copilotkit-qa-bot[bot]",
|
|
16
16
|
"workflow": {
|
|
17
|
-
"runId": "
|
|
18
|
-
"runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/
|
|
17
|
+
"runId": "33113403059",
|
|
18
|
+
"runUrl": "https://github.com/CopilotKit/Intelligence/actions/runs/33113403059"
|
|
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-
|
|
27
|
+
"builtAt": "2026-08-27T20:28:56Z"
|
|
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.9.
|
|
100
|
-
buildNumber: true ? "
|
|
101
|
-
commitSha: true ? "
|
|
99
|
+
version: true ? "4.9.4" : "dev",
|
|
100
|
+
buildNumber: true ? "33113403059" : "dev",
|
|
101
|
+
commitSha: true ? "db031f9bc6f6c3918774aa8e375b6938ad66bb5e" : "dev",
|
|
102
102
|
copilotKitCommit: getTemplateRef()
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
105
|
function getTemplateRef() {
|
|
106
|
-
return true ? "
|
|
106
|
+
return true ? "f6f2dc4bb62b50d2f09384619f5b9e8fe7edde02" : "main";
|
|
107
107
|
}
|
|
108
108
|
function getC15tBackendUrl() {
|
|
109
109
|
return true ? "https://calm-hazelnut-joy-copilotkit.inth.app" : "";
|
|
@@ -192,6 +192,9 @@ var init_starter_source_catalog = __esm({
|
|
|
192
192
|
STARTER_SOURCE_CATALOG = {
|
|
193
193
|
"langgraph-py": langGraphPython,
|
|
194
194
|
"langgraph-js": copilotKitStarter("examples/integrations/langgraph-js"),
|
|
195
|
+
"langgraph-fastapi": copilotKitStarter(
|
|
196
|
+
"examples/integrations/langgraph-fastapi"
|
|
197
|
+
),
|
|
195
198
|
"claude-sdk-typescript": copilotKitStarter(
|
|
196
199
|
"examples/integrations/claude-sdk-typescript"
|
|
197
200
|
),
|
|
@@ -412,6 +415,7 @@ function formatInvalidFrameworkError(value) {
|
|
|
412
415
|
function standardTemplate(framework, template, successEmoji) {
|
|
413
416
|
const pythonUvTemplates = /* @__PURE__ */ new Set([
|
|
414
417
|
"langgraph-py",
|
|
418
|
+
"langgraph-fastapi",
|
|
415
419
|
"claude-sdk-python",
|
|
416
420
|
"flows",
|
|
417
421
|
"llamaindex",
|
|
@@ -493,6 +497,7 @@ var init_types = __esm({
|
|
|
493
497
|
FRAMEWORK_EMOJI = {
|
|
494
498
|
"langgraph-py": "\u{1F99C}",
|
|
495
499
|
"langgraph-js": "\u{1F99C}",
|
|
500
|
+
"langgraph-fastapi": "\u{1F99C}",
|
|
496
501
|
"claude-sdk-typescript": "\u{1F506}",
|
|
497
502
|
"claude-sdk-python": "\u{1F506}",
|
|
498
503
|
flows: "\u{1F465}",
|
|
@@ -523,6 +528,10 @@ var init_types = __esm({
|
|
|
523
528
|
label: `${FRAMEWORK_EMOJI["langgraph-js"]} LangGraph (JavaScript)`,
|
|
524
529
|
value: "langgraph-js"
|
|
525
530
|
},
|
|
531
|
+
{
|
|
532
|
+
label: `${FRAMEWORK_EMOJI["langgraph-fastapi"]} LangGraph (Python, FastAPI)`,
|
|
533
|
+
value: "langgraph-fastapi"
|
|
534
|
+
},
|
|
526
535
|
{
|
|
527
536
|
label: `${FRAMEWORK_EMOJI["claude-sdk-typescript"]} Claude Agent SDK (TypeScript)`,
|
|
528
537
|
value: "claude-sdk-typescript"
|
|
@@ -636,6 +645,11 @@ var init_types = __esm({
|
|
|
636
645
|
TEMPLATE_REPOS["langgraph-js"],
|
|
637
646
|
`\u{1FA81}\u{1F91D}${FRAMEWORK_EMOJI["langgraph-js"]}`
|
|
638
647
|
),
|
|
648
|
+
"langgraph-fastapi": standardTemplate(
|
|
649
|
+
"langgraph-fastapi",
|
|
650
|
+
TEMPLATE_REPOS["langgraph-fastapi"],
|
|
651
|
+
`\u{1FA81}\u{1F91D}${FRAMEWORK_EMOJI["langgraph-fastapi"]}`
|
|
652
|
+
),
|
|
639
653
|
"claude-sdk-typescript": {
|
|
640
654
|
...standardTemplate(
|
|
641
655
|
"claude-sdk-typescript",
|
|
@@ -810,6 +824,7 @@ var init_types = __esm({
|
|
|
810
824
|
THREADS_FRAMEWORKS = /* @__PURE__ */ new Set([
|
|
811
825
|
"langgraph-py",
|
|
812
826
|
"langgraph-js",
|
|
827
|
+
"langgraph-fastapi",
|
|
813
828
|
"claude-sdk-typescript",
|
|
814
829
|
"claude-sdk-python",
|
|
815
830
|
"mastra",
|
|
@@ -833,6 +848,7 @@ var init_types = __esm({
|
|
|
833
848
|
FRAMEWORK_LANGUAGE = {
|
|
834
849
|
"langgraph-py": "python",
|
|
835
850
|
"langgraph-js": "typescript",
|
|
851
|
+
"langgraph-fastapi": "python",
|
|
836
852
|
"claude-sdk-typescript": "typescript",
|
|
837
853
|
"claude-sdk-python": "python",
|
|
838
854
|
flows: "python",
|
|
@@ -93356,7 +93372,7 @@ var init_cli_tips = __esm({
|
|
|
93356
93372
|
},
|
|
93357
93373
|
{
|
|
93358
93374
|
id: "server-debug-for-missing-events",
|
|
93359
|
-
text: "Enable server `debug: true` when events, state, or tool calls disappear, then
|
|
93375
|
+
text: "Enable server `debug: true` when events, state, or tool calls disappear, then read live AG-UI details from the Inspector in a browser, or from the runtime's `/cpk-debug-events` route on any frontend.",
|
|
93360
93376
|
relevancy: 82,
|
|
93361
93377
|
insight: 90
|
|
93362
93378
|
},
|
|
@@ -380822,18 +380838,15 @@ function isOnboardingGraphIndex(value) {
|
|
|
380822
380838
|
if (typeof value !== "object" || value === null)
|
|
380823
380839
|
return false;
|
|
380824
380840
|
const candidate = value;
|
|
380825
|
-
return
|
|
380826
|
-
|
|
380841
|
+
return (
|
|
380842
|
+
// Checked first: a bundle that cannot name the graph it serves is corrupt,
|
|
380843
|
+
// and nothing else about it is worth inspecting.
|
|
380844
|
+
typeof candidate.graphTree === "string" && GRAPH_TREE_PATTERN.test(candidate.graphTree) && typeof candidate.root === "string" && Array.isArray(candidate.prompts) && candidate.prompts.every(
|
|
380845
|
+
(prompt) => typeof prompt === "object" && prompt !== null && Array.isArray(prompt.edges) && prompt.edges.every((edge) => typeof edge === "string") && typeof prompt.milestone === "string" && typeof prompt.name === "string"
|
|
380846
|
+
)
|
|
380827
380847
|
);
|
|
380828
380848
|
}
|
|
380829
|
-
async function
|
|
380830
|
-
if (!PROMPT_NAME_PATTERN.test(name)) {
|
|
380831
|
-
throw new OnboardingPromptError(
|
|
380832
|
-
"ONBOARDING_PROMPT_NOT_FOUND",
|
|
380833
|
-
`Onboarding prompt "${name}" was not found. Copy an exact prompt name from the prior Markdown.`
|
|
380834
|
-
);
|
|
380835
|
-
}
|
|
380836
|
-
let index2;
|
|
380849
|
+
async function readGraphIndex(graphDirectory) {
|
|
380837
380850
|
try {
|
|
380838
380851
|
const parsed = JSON.parse(
|
|
380839
380852
|
await readFile(join23(graphDirectory, "index.json"), "utf8")
|
|
@@ -380841,7 +380854,7 @@ async function loadOnboardingPrompt(name, graphDirectory = join23(dirname9(fileU
|
|
|
380841
380854
|
if (!isOnboardingGraphIndex(parsed)) {
|
|
380842
380855
|
throw new Error("Bundled onboarding graph index has an invalid shape");
|
|
380843
380856
|
}
|
|
380844
|
-
|
|
380857
|
+
return parsed;
|
|
380845
380858
|
} catch (error98) {
|
|
380846
380859
|
throw new OnboardingPromptError(
|
|
380847
380860
|
"ONBOARDING_PROMPT_UNREADABLE",
|
|
@@ -380849,6 +380862,18 @@ async function loadOnboardingPrompt(name, graphDirectory = join23(dirname9(fileU
|
|
|
380849
380862
|
{ cause: error98 }
|
|
380850
380863
|
);
|
|
380851
380864
|
}
|
|
380865
|
+
}
|
|
380866
|
+
async function loadOnboardingGraphTree(graphDirectory = join23(dirname9(fileURLToPath2(import.meta.url)), "onboarding")) {
|
|
380867
|
+
return (await readGraphIndex(graphDirectory)).graphTree;
|
|
380868
|
+
}
|
|
380869
|
+
async function loadOnboardingPrompt(name, graphDirectory = join23(dirname9(fileURLToPath2(import.meta.url)), "onboarding")) {
|
|
380870
|
+
if (!PROMPT_NAME_PATTERN.test(name)) {
|
|
380871
|
+
throw new OnboardingPromptError(
|
|
380872
|
+
"ONBOARDING_PROMPT_NOT_FOUND",
|
|
380873
|
+
`Onboarding prompt "${name}" was not found. Copy an exact prompt name from the prior Markdown.`
|
|
380874
|
+
);
|
|
380875
|
+
}
|
|
380876
|
+
const index2 = await readGraphIndex(graphDirectory);
|
|
380852
380877
|
const indexedPrompt = index2.prompts.find((prompt) => prompt.name === name);
|
|
380853
380878
|
if (indexedPrompt === void 0) {
|
|
380854
380879
|
throw new OnboardingPromptError(
|
|
@@ -380874,11 +380899,12 @@ async function loadOnboardingPrompt(name, graphDirectory = join23(dirname9(fileU
|
|
|
380874
380899
|
);
|
|
380875
380900
|
}
|
|
380876
380901
|
}
|
|
380877
|
-
var PROMPT_NAME_PATTERN, OnboardingPromptError;
|
|
380902
|
+
var PROMPT_NAME_PATTERN, GRAPH_TREE_PATTERN, OnboardingPromptError;
|
|
380878
380903
|
var init_onboarding_graph = __esm({
|
|
380879
380904
|
"apps/cli/src/services/onboarding-graph.ts"() {
|
|
380880
380905
|
"use strict";
|
|
380881
380906
|
PROMPT_NAME_PATTERN = /^[a-z0-9][a-z0-9._-]*(?:\/[a-z0-9][a-z0-9._-]*)*$/;
|
|
380907
|
+
GRAPH_TREE_PATTERN = /^[0-9a-f]{40}$/u;
|
|
380882
380908
|
OnboardingPromptError = class extends Error {
|
|
380883
380909
|
code;
|
|
380884
380910
|
constructor(code, message, options) {
|
|
@@ -381255,6 +381281,7 @@ async function runOnboard(argv, dependencies) {
|
|
|
381255
381281
|
cliVersion: getBuildInfo().version,
|
|
381256
381282
|
randomRunId: () => randomBytes2(9).toString("base64url"),
|
|
381257
381283
|
loadPrompt: loadOnboardingPrompt,
|
|
381284
|
+
loadGraphTree: loadOnboardingGraphTree,
|
|
381258
381285
|
recordEvent: recordTelemetryEvent,
|
|
381259
381286
|
submitFeedbackEvent: submitTelemetryEvent
|
|
381260
381287
|
};
|
|
@@ -381278,6 +381305,8 @@ async function runOnboard(argv, dependencies) {
|
|
|
381278
381305
|
parsed.values.run
|
|
381279
381306
|
);
|
|
381280
381307
|
recordStarted(deps, binding2.runId, parsed.values["coding-agent"]);
|
|
381308
|
+
printRunId(deps, binding2.runId);
|
|
381309
|
+
await printGraphTree(deps);
|
|
381281
381310
|
await printPrompt(deps, binding2.runId, "authenticate/start");
|
|
381282
381311
|
return;
|
|
381283
381312
|
}
|
|
@@ -381297,7 +381326,10 @@ async function runOnboard(argv, dependencies) {
|
|
|
381297
381326
|
return;
|
|
381298
381327
|
}
|
|
381299
381328
|
if (subcommand === "complete") {
|
|
381300
|
-
const
|
|
381329
|
+
const blocked2 = parseBlocker(argv.slice(1));
|
|
381330
|
+
if (blocked2 === void 0)
|
|
381331
|
+
throw new Error(BLOCKER_USAGE);
|
|
381332
|
+
const check4 = parseSurfaceCheck(blocked2.rest);
|
|
381301
381333
|
if (check4 === void 0)
|
|
381302
381334
|
throw new Error(SURFACE_CHECK_USAGE);
|
|
381303
381335
|
recordBestEffort(deps, {
|
|
@@ -381306,11 +381338,12 @@ async function runOnboard(argv, dependencies) {
|
|
|
381306
381338
|
command: "onboard",
|
|
381307
381339
|
onboarding_run_id: binding.runId,
|
|
381308
381340
|
cli_version: deps.cliVersion,
|
|
381309
|
-
...check4.kind === "visual" ? { visual_check: check4.outcome } : { device_check: check4.outcome }
|
|
381341
|
+
...check4.kind === "visual" ? { visual_check: check4.outcome } : { device_check: check4.outcome },
|
|
381342
|
+
...blocked2.blocker === void 0 ? {} : { blocked_by: blocked2.blocker }
|
|
381310
381343
|
}
|
|
381311
381344
|
});
|
|
381312
381345
|
deps.stdout.write(
|
|
381313
|
-
|
|
381346
|
+
completionReport({ blocker: blocked2.blocker, check: check4 })
|
|
381314
381347
|
);
|
|
381315
381348
|
return;
|
|
381316
381349
|
}
|
|
@@ -381369,6 +381402,17 @@ async function runOnboard(argv, dependencies) {
|
|
|
381369
381402
|
"Usage: copilotkit onboard <start|read|classify|complete|feedback|friction>"
|
|
381370
381403
|
);
|
|
381371
381404
|
}
|
|
381405
|
+
function parseBlocker(rest) {
|
|
381406
|
+
const flagIndex = rest.indexOf("--blocked-by");
|
|
381407
|
+
if (flagIndex === -1)
|
|
381408
|
+
return { rest };
|
|
381409
|
+
if (flagIndex !== rest.length - 2)
|
|
381410
|
+
return void 0;
|
|
381411
|
+
const cause = BLOCKER_CAUSES.find((known) => known === rest[flagIndex + 1]);
|
|
381412
|
+
if (cause === void 0)
|
|
381413
|
+
return void 0;
|
|
381414
|
+
return { blocker: cause, rest: rest.slice(0, flagIndex) };
|
|
381415
|
+
}
|
|
381372
381416
|
function parseSurfaceCheck(rest) {
|
|
381373
381417
|
if (rest.length !== 2)
|
|
381374
381418
|
return void 0;
|
|
@@ -381429,6 +381473,37 @@ function blockedWithoutSurfaceProof(check4) {
|
|
|
381429
381473
|
""
|
|
381430
381474
|
].join("\n");
|
|
381431
381475
|
}
|
|
381476
|
+
function blockedAfterProof(blocker) {
|
|
381477
|
+
const report = BLOCKER_REPORTS[blocker];
|
|
381478
|
+
return [
|
|
381479
|
+
"",
|
|
381480
|
+
"! Onboarding is NOT complete.",
|
|
381481
|
+
" The round trip was proved, and this run was then blocked by something else:",
|
|
381482
|
+
` ${report.cause}`,
|
|
381483
|
+
" Still unverified:",
|
|
381484
|
+
...report.uncovered.map((line) => ` - ${line}`),
|
|
381485
|
+
"",
|
|
381486
|
+
" This is a supported path that this run could not finish.",
|
|
381487
|
+
" It is NOT an unsupported path: do not read unsupported/no-validated-path,",
|
|
381488
|
+
" and do not tell the developer that their framework or frontend is",
|
|
381489
|
+
" unsupported. The journey proved; one thing after it did not.",
|
|
381490
|
+
"",
|
|
381491
|
+
" Report this run as blocked, and name the unverified lines above as the",
|
|
381492
|
+
" evidence it is missing. Hand over the working application anyway: the URL,",
|
|
381493
|
+
" the command that starts it again, and the process IDs.",
|
|
381494
|
+
` To close it, ${report.close}.`,
|
|
381495
|
+
""
|
|
381496
|
+
].join("\n");
|
|
381497
|
+
}
|
|
381498
|
+
function completionReport(input) {
|
|
381499
|
+
if (input.check.outcome !== "performed") {
|
|
381500
|
+
const surface = blockedWithoutSurfaceProof(input.check);
|
|
381501
|
+
if (input.blocker === void 0)
|
|
381502
|
+
return surface;
|
|
381503
|
+
return `${surface}${blockedAfterProof(input.blocker)}`;
|
|
381504
|
+
}
|
|
381505
|
+
return input.blocker === void 0 ? "CopilotKit onboarding marked complete.\n" : blockedAfterProof(input.blocker);
|
|
381506
|
+
}
|
|
381432
381507
|
async function reportFeedback(dependencies, runId) {
|
|
381433
381508
|
const input = await readFeedbackInput(dependencies.stdin);
|
|
381434
381509
|
if (!input.ok)
|
|
@@ -381539,6 +381614,16 @@ report: ${report.text}
|
|
|
381539
381614
|
`
|
|
381540
381615
|
);
|
|
381541
381616
|
}
|
|
381617
|
+
function printRunId(dependencies, runId) {
|
|
381618
|
+
dependencies.stdout.write(`onboarding_run_id: ${runId}
|
|
381619
|
+
`);
|
|
381620
|
+
}
|
|
381621
|
+
async function printGraphTree(dependencies) {
|
|
381622
|
+
dependencies.stdout.write(
|
|
381623
|
+
`onboarding_graph_tree: ${await dependencies.loadGraphTree()}
|
|
381624
|
+
`
|
|
381625
|
+
);
|
|
381626
|
+
}
|
|
381542
381627
|
function recordStarted(dependencies, runId, codingAgent) {
|
|
381543
381628
|
recordBestEffort(dependencies, {
|
|
381544
381629
|
event: "cli.onboarding.started",
|
|
@@ -381579,7 +381664,7 @@ function recordBestEffort(dependencies, event) {
|
|
|
381579
381664
|
} catch {
|
|
381580
381665
|
}
|
|
381581
381666
|
}
|
|
381582
|
-
var VISUAL_CHECK_OUTCOMES, DEVICE_CHECK_OUTCOMES, SURFACE_CHECK_USAGE;
|
|
381667
|
+
var VISUAL_CHECK_OUTCOMES, DEVICE_CHECK_OUTCOMES, BLOCKER_CAUSES, BLOCKER_USAGE, SURFACE_CHECK_USAGE, BLOCKER_REPORTS;
|
|
381583
381668
|
var init_onboard = __esm({
|
|
381584
381669
|
async "apps/cli/src/commands/onboard.ts"() {
|
|
381585
381670
|
"use strict";
|
|
@@ -381601,7 +381686,52 @@ var init_onboard = __esm({
|
|
|
381601
381686
|
"skipped-no-device",
|
|
381602
381687
|
"failed"
|
|
381603
381688
|
];
|
|
381689
|
+
BLOCKER_CAUSES = [
|
|
381690
|
+
"hosted-dashboard",
|
|
381691
|
+
"inspector",
|
|
381692
|
+
"plan-excluded-capability",
|
|
381693
|
+
"other"
|
|
381694
|
+
];
|
|
381695
|
+
BLOCKER_USAGE = `Usage: copilotkit onboard complete <surface-check> --blocked-by <${BLOCKER_CAUSES.join("|")}>
|
|
381696
|
+
Pass it alongside --visual-check or --device-check, never instead of one: which
|
|
381697
|
+
surface this run proved and what blocked it afterwards are separate facts.
|
|
381698
|
+
Use \`other\` rather than leaving the flag off. A run with no way to say it was
|
|
381699
|
+
blocked reads the unsupported terminal instead, and reports a path that works
|
|
381700
|
+
as one this release does not carry.`;
|
|
381604
381701
|
SURFACE_CHECK_USAGE = "Usage: copilotkit onboard complete --visual-check <performed|skipped-no-browser-tool|failed>\n or: copilotkit onboard complete --device-check <performed|skipped-no-device|failed>\nPass exactly one. A web journey is proven in a browser and a mobile one on a device;\nwhich flag you pass is how this run states which surface it proved.";
|
|
381702
|
+
BLOCKER_REPORTS = {
|
|
381703
|
+
"hosted-dashboard": {
|
|
381704
|
+
cause: "the managed Intelligence dashboard did not load, or refused a sign-in.",
|
|
381705
|
+
close: "sign in at https://intelligence.copilotkit.ai, confirm this project is\n listed, then run this command again without `--blocked-by`",
|
|
381706
|
+
uncovered: [
|
|
381707
|
+
"managing this installation from the dashboard, which is where its keys and projects live",
|
|
381708
|
+
"the thread view, which is how a managed run is read back after it ends"
|
|
381709
|
+
]
|
|
381710
|
+
},
|
|
381711
|
+
inspector: {
|
|
381712
|
+
cause: "the debugging surface for this frontend did not open.",
|
|
381713
|
+
close: "open the debugging surface named in the handoff, confirm it lists this\n run, then run this command again without `--blocked-by`",
|
|
381714
|
+
uncovered: [
|
|
381715
|
+
"the AG-UI event stream this frontend actually received",
|
|
381716
|
+
"a wiring fault that shows up only as an event that never arrives"
|
|
381717
|
+
]
|
|
381718
|
+
},
|
|
381719
|
+
"plan-excluded-capability": {
|
|
381720
|
+
cause: "the proof asked for a capability the approved plan had already excluded\n for this framework.",
|
|
381721
|
+
close: "settle the exclusion against the framework's own documentation before the\n next run, and give the developer the exclusion as a named limitation",
|
|
381722
|
+
uncovered: [
|
|
381723
|
+
"that capability on this framework, which the plan excluded rather than disproved",
|
|
381724
|
+
"whether the exclusion in the plan is correct, which nothing in this run tested"
|
|
381725
|
+
]
|
|
381726
|
+
},
|
|
381727
|
+
other: {
|
|
381728
|
+
cause: "a blocker outside the set this command can name.",
|
|
381729
|
+
close: "name the blocker in the summary in the developer's own terms, and say what\n it leaves unverified",
|
|
381730
|
+
uncovered: [
|
|
381731
|
+
"whatever the blocker covers, which this command cannot name for you"
|
|
381732
|
+
]
|
|
381733
|
+
}
|
|
381734
|
+
};
|
|
381605
381735
|
}
|
|
381606
381736
|
});
|
|
381607
381737
|
|
package/onboarding/index.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"graphTree": "1c6963da1f044e99a35706e1f6ba533c2ad835c2",
|
|
2
3
|
"root": "authenticate/start",
|
|
3
4
|
"prompts": [
|
|
4
5
|
{
|
|
@@ -203,6 +204,7 @@
|
|
|
203
204
|
},
|
|
204
205
|
{
|
|
205
206
|
"edges": [
|
|
207
|
+
"starter/clone",
|
|
206
208
|
"credentials/finalize-plan",
|
|
207
209
|
"unsupported/no-validated-path"
|
|
208
210
|
],
|
|
@@ -211,6 +213,7 @@
|
|
|
211
213
|
},
|
|
212
214
|
{
|
|
213
215
|
"edges": [
|
|
216
|
+
"starter/clone",
|
|
214
217
|
"credentials/finalize-plan",
|
|
215
218
|
"unsupported/no-validated-path"
|
|
216
219
|
],
|
|
@@ -282,6 +285,14 @@
|
|
|
282
285
|
"milestone": "proof",
|
|
283
286
|
"name": "proof/round-trip"
|
|
284
287
|
},
|
|
288
|
+
{
|
|
289
|
+
"edges": [
|
|
290
|
+
"proof/round-trip",
|
|
291
|
+
"unsupported/no-validated-path"
|
|
292
|
+
],
|
|
293
|
+
"milestone": "starter",
|
|
294
|
+
"name": "starter/clone"
|
|
295
|
+
},
|
|
285
296
|
{
|
|
286
297
|
"edges": [],
|
|
287
298
|
"milestone": "subagent",
|
|
@@ -14,16 +14,21 @@ 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
|
-
|
|
17
|
+
Send this exact message once, as your first message in this onboarding run, before
|
|
18
|
+
anything else:
|
|
18
19
|
|
|
19
20
|
Welcome to CopilotKit. I will check sign-in, inspect your project, recommend a setup, and
|
|
20
21
|
show you a plan before I change files. After you approve the plan, I will build the
|
|
21
22
|
integration, prove the full round trip, and leave the app running with its URLs.
|
|
22
23
|
|
|
24
|
+
That message belongs to the run, not to this prompt. If you already sent it in this run, do
|
|
25
|
+
not send it again, including on a second read of this prompt. It has no value after the
|
|
26
|
+
first send, and a developer who reads it repeatedly learns to skim the region it sits in.
|
|
27
|
+
|
|
23
28
|
Do not ask for separate feedback consent. The feedback commands enforce the developer's
|
|
24
29
|
CLI telemetry setting when a later step tries to send a report.
|
|
25
30
|
|
|
26
|
-
Run `npx --yes copilotkit@4.9.
|
|
31
|
+
Run `npx --yes copilotkit@4.9.4 login --json` before any project work. This command
|
|
27
32
|
checks the current session. It starts sign-in only as needed. Treat this as a long-lived
|
|
28
33
|
streaming process. Do not wait for the command to exit before you read its standard output.
|
|
29
34
|
|
|
@@ -41,29 +46,63 @@ Do not use `whoami` for this check. It has no JSON output and some failures exit
|
|
|
41
46
|
zero. Do not put account tokens or credentials in the conversation.
|
|
42
47
|
|
|
43
48
|
Before you ask the developer any setup question, finish every read-only investigation and
|
|
44
|
-
preflight check in this section.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
preflight check in this section.
|
|
50
|
+
|
|
51
|
+
Prove whether your coding-agent environment has browser or device control. Do not assume it
|
|
52
|
+
either way, and do not report what you expect to be true: a run that guesses here records a
|
|
53
|
+
capability the rest of the graph then trusts. Use a browser or device tool already
|
|
54
|
+
configured for the coding agent you are running as, the same way a later step uses the
|
|
55
|
+
CopilotKit documentation server. With a browser tool, open one inert page such as
|
|
56
|
+
`about:blank` and read its title. With a device tool and no browser, list the booted devices
|
|
57
|
+
in one command: `adb devices -l`. Record the outcome of that attempt: `available` when the
|
|
58
|
+
tool answered, `unavailable` when there was none to call or the page did not open. Use
|
|
59
|
+
the control that matches the selected surface later.
|
|
60
|
+
|
|
61
|
+
Where the browser probe answered, register nothing. The harness came equipped and the run
|
|
62
|
+
owes it no setup.
|
|
63
|
+
|
|
64
|
+
Where no browser tool answered, register one for the coding agent you are running as, then
|
|
65
|
+
run the same probe again and record what the second attempt did. Register this server:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
npx --yes @playwright/mcp@latest --browser chrome --isolated --output-dir <project>/.copilotkit/proof/browser
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Replace `<project>` with the absolute path of the target project directory. The server is
|
|
72
|
+
registered against the coding agent rather than against a directory, so a relative path here
|
|
73
|
+
resolves wherever that server happens to start.
|
|
74
|
+
|
|
75
|
+
`--browser chrome` drives the Google Chrome the developer already has, so this downloads no
|
|
76
|
+
browser. `--isolated` keeps the profile in memory, so it never touches their own Chrome
|
|
77
|
+
profile. `--output-dir` is what keeps the snapshots and screenshots out of the developer's
|
|
78
|
+
repository root: without it this server writes them to `.playwright-mcp/` beside their code,
|
|
79
|
+
which a project that never asked for a browser has no reason to carry, and which the graph's
|
|
80
|
+
own evidence rule already has a place for. Register it the way your own harness registers a
|
|
81
|
+
server, which is the mechanism a later step uses for the CopilotKit documentation server.
|
|
82
|
+
|
|
83
|
+
Tell the developer in one line what you registered, that it drives their installed Chrome,
|
|
84
|
+
and that it lives in this coding agent's configuration rather than in their repository. Do
|
|
85
|
+
not ask them to approve it, and do not ask a second question about it.
|
|
86
|
+
|
|
87
|
+
Do not add a browser or device driver to the project. A driver added there is a
|
|
88
|
+
devDependency and a browser download in the diff of a repository that never asked for one,
|
|
89
|
+
which is a different thing from a server registered against the coding agent.
|
|
90
|
+
|
|
91
|
+
Where the second probe still does not answer -- no Chrome to drive, no network, or a
|
|
92
|
+
harness that cannot register a server -- record `unavailable` and carry it. Do not keep
|
|
93
|
+
trying, and do not ask the developer about this tool limit.
|
|
94
|
+
|
|
95
|
+
Registering a server does not boot a device. Where the device probe found none, that is the
|
|
96
|
+
whole finding, and a browser is not a substitute for a device.
|
|
48
97
|
|
|
49
98
|
Spawn one research subagent. Give it the full text of the research brief at the end of this
|
|
50
|
-
prompt and tell it to follow that brief and return only its findings.
|
|
51
|
-
|
|
52
|
-
- Find the target app or runtime directory that owns `.env` and CopilotKit setup.
|
|
53
|
-
- Check whether `.copilotkit/project.json` has `projectId`, `projectSlug`, and `clerkOrgId`.
|
|
54
|
-
- Check whether `.env` has a non-empty `INTELLIGENCE_API_KEY` entry.
|
|
55
|
-
- Record the `.env` file modification time without returning it.
|
|
56
|
-
- Report whether an agent, frontend, and CopilotKit integration are present.
|
|
57
|
-
- Report whether the runtime constructor uses a `runner` option, an `intelligence`
|
|
58
|
-
option, or neither can be proved from project files.
|
|
99
|
+
prompt and tell it to follow that brief and return only its findings. Wait for the
|
|
100
|
+
subagent to finish.
|
|
59
101
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
about the user outcome. This asks what the developer wants to build before you select a
|
|
65
|
-
framework. Give two or three short examples and offer a minimal starter. Record the answer
|
|
66
|
-
and give it to each later subagent.
|
|
102
|
+
If neither the developer nor the repository findings prove what the project is for, ask
|
|
103
|
+
one guided question about the user outcome. This asks what the developer wants to build
|
|
104
|
+
before you select a framework. Give two or three short examples and offer a minimal
|
|
105
|
+
starter. Record the answer and give it to each later subagent.
|
|
67
106
|
|
|
68
107
|
If a repository file exists, each finding must cite it. For an empty project, the subagent
|
|
69
108
|
must cite its directory check and report absent parts.
|
|
@@ -75,13 +114,13 @@ that the repository answers.
|
|
|
75
114
|
Do not infer a working OSS path from packages, imports, project files, or keys. If an
|
|
76
115
|
agent, frontend, and CopilotKit integration are present, prove the live starting state
|
|
77
116
|
before any project file changes. Run
|
|
78
|
-
`npx --yes copilotkit@4.9.
|
|
117
|
+
`npx --yes copilotkit@4.9.4 onboard read proof/oss-baseline`.
|
|
79
118
|
|
|
80
119
|
For every other inspected state, run
|
|
81
|
-
`npx --yes copilotkit@4.9.
|
|
120
|
+
`npx --yes copilotkit@4.9.4 onboard read credentials/plan`.
|
|
82
121
|
|
|
83
122
|
If authentication or inspection stops onboarding, run
|
|
84
|
-
`npx --yes copilotkit@4.9.
|
|
123
|
+
`npx --yes copilotkit@4.9.4 onboard read unsupported/no-validated-path`.
|
|
85
124
|
|
|
86
125
|
## Research subagent brief
|
|
87
126
|
|
|
@@ -94,16 +133,27 @@ Everything below the rule is the subagent's prompt. Give it verbatim.
|
|
|
94
133
|
Inspect the repository without changing it. Find evidence for:
|
|
95
134
|
|
|
96
135
|
- what the project is for, in the project's own words
|
|
97
|
-
-
|
|
98
|
-
- any
|
|
99
|
-
-
|
|
136
|
+
- the target app or runtime directory that owns `.env` and the CopilotKit setup
|
|
137
|
+
- whether the target project directory contains any entries
|
|
138
|
+
- any existing agent framework and frontend
|
|
139
|
+
- current CopilotKit integration and configuration, including whether
|
|
140
|
+
`.copilotkit/project.json` has `projectId`, `projectSlug`, and `clerkOrgId`
|
|
100
141
|
- authentication boundaries
|
|
101
|
-
- names of required credential variables
|
|
142
|
+
- names of required credential variables and whether `.env` has a non-empty
|
|
143
|
+
`INTELLIGENCE_API_KEY`
|
|
144
|
+
- retain the `.env` modification time for a later comparison without returning it
|
|
102
145
|
- package manager and lockfile
|
|
103
146
|
- required toolchains and their installed versions
|
|
104
147
|
- declared ports and whether each port is available
|
|
148
|
+
- whether the runtime constructor uses a `runner` option, an `intelligence` option, or
|
|
149
|
+
neither can be proved from project files
|
|
105
150
|
- CopilotKit package versions and package compatibility risks
|
|
106
151
|
|
|
152
|
+
For the CopilotKit versions, report the exact installed version of every `@copilotkit/*`
|
|
153
|
+
dependency, read from the lockfile rather than a manifest range, and state whether any of
|
|
154
|
+
them is below 1.64.0. The conversion decides its upgrade from exactly that, and a caret
|
|
155
|
+
range does not answer it.
|
|
156
|
+
|
|
107
157
|
A project states what it is for in its `README.md`, in its package description, or in
|
|
108
158
|
the prompt of an agent it already has. Quote that statement rather than rewriting it. An
|
|
109
159
|
empty project carries it in the README alone, and that makes the README the whole of the
|
|
@@ -115,6 +165,7 @@ what you run next. Keep this preflight read-only. Do not install packages, stop
|
|
|
115
165
|
or change a port. Check only the toolchains and ports that repository files require.
|
|
116
166
|
|
|
117
167
|
Return the file paths and a short finding for each item. State each absent or unproved item.
|
|
118
|
-
Do not read, print, or return secret values.
|
|
119
|
-
|
|
120
|
-
|
|
168
|
+
Do not read, print, or return secret values. For `.env` and `.copilotkit/project.json`
|
|
169
|
+
checks, return only paths, presence checks, and missing field names. Do not read a file
|
|
170
|
+
outside the project directory. Do not run or return another onboarding command. Stop after
|
|
171
|
+
returning the findings to the main coding agent.
|