copilotkit 1.54.0 → 2.0.1

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 (150) hide show
  1. package/index.js +90052 -0
  2. package/package.json +4 -114
  3. package/src/commands/docs.d.ts +17 -0
  4. package/src/commands/docs.d.ts.map +1 -0
  5. package/src/commands/init.d.ts +103 -0
  6. package/src/commands/init.d.ts.map +1 -0
  7. package/src/commands/kite.d.ts +8 -0
  8. package/src/commands/kite.d.ts.map +1 -0
  9. package/src/commands/license.d.ts +17 -0
  10. package/src/commands/license.d.ts.map +1 -0
  11. package/src/commands/login.d.ts +13 -0
  12. package/src/commands/login.d.ts.map +1 -0
  13. package/src/commands/logs.d.ts +32 -0
  14. package/src/commands/logs.d.ts.map +1 -0
  15. package/src/commands/version.d.ts +8 -0
  16. package/src/commands/version.d.ts.map +1 -0
  17. package/src/config.d.ts +31 -0
  18. package/src/config.d.ts.map +1 -0
  19. package/src/index.d.ts +21 -0
  20. package/src/index.d.ts.map +1 -0
  21. package/src/services/agentcore-config.d.ts +34 -0
  22. package/src/services/agentcore-config.d.ts.map +1 -0
  23. package/src/services/api-client.d.ts +106 -0
  24. package/src/services/api-client.d.ts.map +1 -0
  25. package/src/services/auth.service.d.ts +107 -0
  26. package/src/services/auth.service.d.ts.map +1 -0
  27. package/src/services/cli-auth-diagnostics.d.ts +71 -0
  28. package/src/services/cli-auth-diagnostics.d.ts.map +1 -0
  29. package/src/services/cli-logs.d.ts +45 -0
  30. package/src/services/cli-logs.d.ts.map +1 -0
  31. package/src/services/config.service.d.ts +53 -0
  32. package/src/services/config.service.d.ts.map +1 -0
  33. package/src/services/feature-flags.d.ts +14 -0
  34. package/src/services/feature-flags.d.ts.map +1 -0
  35. package/src/services/kite-game-engine.d.ts +99 -0
  36. package/src/services/kite-game-engine.d.ts.map +1 -0
  37. package/src/services/kite-game-score.d.ts +33 -0
  38. package/src/services/kite-game-score.d.ts.map +1 -0
  39. package/src/services/project-scaffold.d.ts +49 -0
  40. package/src/services/project-scaffold.d.ts.map +1 -0
  41. package/src/services/showcase-config.d.ts +19 -0
  42. package/src/services/showcase-config.d.ts.map +1 -0
  43. package/src/types.d.ts +227 -0
  44. package/src/types.d.ts.map +1 -0
  45. package/src/ui/banner.d.ts +3 -0
  46. package/src/ui/banner.d.ts.map +1 -0
  47. package/src/ui/browser-login.d.ts +71 -0
  48. package/src/ui/browser-login.d.ts.map +1 -0
  49. package/src/ui/init-flow.d.ts +35 -0
  50. package/src/ui/init-flow.d.ts.map +1 -0
  51. package/src/ui/kite-game.d.ts +26 -0
  52. package/src/ui/kite-game.d.ts.map +1 -0
  53. package/src/ui/login-flow.d.ts +22 -0
  54. package/src/ui/login-flow.d.ts.map +1 -0
  55. package/src/ui/spinner.d.ts +9 -0
  56. package/src/ui/spinner.d.ts.map +1 -0
  57. package/LICENSE +0 -21
  58. package/README.md +0 -83
  59. package/bin/dev.cmd +0 -3
  60. package/bin/dev.js +0 -8
  61. package/bin/run.cmd +0 -3
  62. package/bin/run.js +0 -17
  63. package/dist/commands/base-command.d.ts +0 -12
  64. package/dist/commands/base-command.js +0 -65
  65. package/dist/commands/base-command.js.map +0 -1
  66. package/dist/commands/create.d.ts +0 -24
  67. package/dist/commands/create.js +0 -507
  68. package/dist/commands/create.js.map +0 -1
  69. package/dist/commands/dev.d.ts +0 -25
  70. package/dist/commands/dev.js +0 -776
  71. package/dist/commands/dev.js.map +0 -1
  72. package/dist/commands/init.d.ts +0 -11
  73. package/dist/commands/init.js +0 -523
  74. package/dist/commands/init.js.map +0 -1
  75. package/dist/commands/login.d.ts +0 -13
  76. package/dist/commands/login.js +0 -374
  77. package/dist/commands/login.js.map +0 -1
  78. package/dist/commands/logout.d.ts +0 -13
  79. package/dist/commands/logout.js +0 -375
  80. package/dist/commands/logout.js.map +0 -1
  81. package/dist/index.d.ts +0 -1
  82. package/dist/index.js +0 -6
  83. package/dist/index.js.map +0 -1
  84. package/dist/lib/init/ide-docs.d.ts +0 -25
  85. package/dist/lib/init/ide-docs.js +0 -170
  86. package/dist/lib/init/ide-docs.js.map +0 -1
  87. package/dist/lib/init/index.d.ts +0 -14
  88. package/dist/lib/init/index.js +0 -1104
  89. package/dist/lib/init/index.js.map +0 -1
  90. package/dist/lib/init/questions.d.ts +0 -9
  91. package/dist/lib/init/questions.js +0 -508
  92. package/dist/lib/init/questions.js.map +0 -1
  93. package/dist/lib/init/scaffold/agent.d.ts +0 -20
  94. package/dist/lib/init/scaffold/agent.js +0 -173
  95. package/dist/lib/init/scaffold/agent.js.map +0 -1
  96. package/dist/lib/init/scaffold/crew-inputs.d.ts +0 -3
  97. package/dist/lib/init/scaffold/crew-inputs.js +0 -59
  98. package/dist/lib/init/scaffold/crew-inputs.js.map +0 -1
  99. package/dist/lib/init/scaffold/env.d.ts +0 -7
  100. package/dist/lib/init/scaffold/env.js +0 -124
  101. package/dist/lib/init/scaffold/env.js.map +0 -1
  102. package/dist/lib/init/scaffold/github.d.ts +0 -17
  103. package/dist/lib/init/scaffold/github.js +0 -114
  104. package/dist/lib/init/scaffold/github.js.map +0 -1
  105. package/dist/lib/init/scaffold/index.d.ts +0 -10
  106. package/dist/lib/init/scaffold/index.js +0 -690
  107. package/dist/lib/init/scaffold/index.js.map +0 -1
  108. package/dist/lib/init/scaffold/langgraph-assistants.d.ts +0 -18
  109. package/dist/lib/init/scaffold/langgraph-assistants.js +0 -26
  110. package/dist/lib/init/scaffold/langgraph-assistants.js.map +0 -1
  111. package/dist/lib/init/scaffold/packages.d.ts +0 -7
  112. package/dist/lib/init/scaffold/packages.js +0 -62
  113. package/dist/lib/init/scaffold/packages.js.map +0 -1
  114. package/dist/lib/init/scaffold/shadcn.d.ts +0 -7
  115. package/dist/lib/init/scaffold/shadcn.js +0 -279
  116. package/dist/lib/init/scaffold/shadcn.js.map +0 -1
  117. package/dist/lib/init/types/index.d.ts +0 -4
  118. package/dist/lib/init/types/index.js +0 -238
  119. package/dist/lib/init/types/index.js.map +0 -1
  120. package/dist/lib/init/types/questions.d.ts +0 -209
  121. package/dist/lib/init/types/questions.js +0 -214
  122. package/dist/lib/init/types/questions.js.map +0 -1
  123. package/dist/lib/init/types/templates.d.ts +0 -17
  124. package/dist/lib/init/types/templates.js +0 -26
  125. package/dist/lib/init/types/templates.js.map +0 -1
  126. package/dist/lib/init/utils.d.ts +0 -3
  127. package/dist/lib/init/utils.js +0 -8
  128. package/dist/lib/init/utils.js.map +0 -1
  129. package/dist/services/analytics.service.d.ts +0 -38
  130. package/dist/services/analytics.service.js +0 -134
  131. package/dist/services/analytics.service.js.map +0 -1
  132. package/dist/services/auth.service.d.ts +0 -26
  133. package/dist/services/auth.service.js +0 -299
  134. package/dist/services/auth.service.js.map +0 -1
  135. package/dist/services/events.d.ts +0 -119
  136. package/dist/services/events.js +0 -1
  137. package/dist/services/events.js.map +0 -1
  138. package/dist/services/tunnel.service.d.ts +0 -15
  139. package/dist/services/tunnel.service.js +0 -21
  140. package/dist/services/tunnel.service.js.map +0 -1
  141. package/dist/utils/detect-endpoint-type.utils.d.ts +0 -15
  142. package/dist/utils/detect-endpoint-type.utils.js +0 -157
  143. package/dist/utils/detect-endpoint-type.utils.js.map +0 -1
  144. package/dist/utils/trpc.d.ts +0 -4
  145. package/dist/utils/trpc.js +0 -25
  146. package/dist/utils/trpc.js.map +0 -1
  147. package/dist/utils/version.d.ts +0 -3
  148. package/dist/utils/version.js +0 -6
  149. package/dist/utils/version.js.map +0 -1
  150. package/oclif.manifest.json +0 -208
@@ -1,299 +0,0 @@
1
- // src/services/auth.service.ts
2
- import Conf2 from "conf";
3
- import cors from "cors";
4
- import express from "express";
5
- import crypto2 from "crypto";
6
- import open from "open";
7
- import getPort from "get-port";
8
- import ora from "ora";
9
- import chalk from "chalk";
10
- import inquirer from "inquirer";
11
-
12
- // src/utils/trpc.ts
13
- import { createTRPCClient as trpcClient, httpBatchLink } from "@trpc/client";
14
- import superjson from "superjson";
15
- var COPILOT_CLOUD_BASE_URL = process.env.COPILOT_CLOUD_BASE_URL || "https://cloud.copilotkit.ai";
16
- function createTRPCClient(cliToken) {
17
- return trpcClient({
18
- links: [
19
- httpBatchLink({
20
- url: `${COPILOT_CLOUD_BASE_URL}/api/trpc-cli`,
21
- transformer: superjson,
22
- headers: () => {
23
- return {
24
- "x-trpc-source": "cli",
25
- "x-cli-token": cliToken
26
- };
27
- }
28
- })
29
- ]
30
- });
31
- }
32
-
33
- // src/services/analytics.service.ts
34
- import { Analytics } from "@segment/analytics-node";
35
- import { PostHog } from "posthog-node";
36
- import Conf from "conf";
37
- var AnalyticsService = class {
38
- constructor(authData) {
39
- this.authData = authData;
40
- if (process.env.SEGMENT_DISABLED === "true") {
41
- return;
42
- }
43
- const segmentWriteKey = process.env.SEGMENT_WRITE_KEY || "9Pv6QyExYef2P4hPz4gks6QAvNMi2AOf";
44
- this.globalProperties = {
45
- service: "cli"
46
- };
47
- if (this.authData?.userId) {
48
- this.userId = this.authData.userId;
49
- }
50
- if (this.authData?.email) {
51
- this.email = this.authData.email;
52
- this.globalProperties.email = this.authData.email;
53
- }
54
- if (this.authData?.organizationId) {
55
- this.organizationId = this.authData.organizationId;
56
- }
57
- this.segment = new Analytics({
58
- writeKey: segmentWriteKey,
59
- disable: process.env.SEGMENT_DISABLE === "true"
60
- });
61
- if (process.env.POSTHOG_DISABLED !== "true") {
62
- const posthogKey = process.env.POSTHOG_KEY || "phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q";
63
- const posthogHost = process.env.POSTHOG_HOST || "https://eu.i.posthog.com";
64
- this.posthog = new PostHog(posthogKey, {
65
- host: posthogHost
66
- });
67
- }
68
- const config = new Conf({ projectName: "CopilotKitCLI" });
69
- if (!config.get("anonymousId")) {
70
- config.set("anonymousId", crypto.randomUUID());
71
- }
72
- }
73
- segment;
74
- posthog;
75
- globalProperties = {};
76
- userId;
77
- email;
78
- organizationId;
79
- config = new Conf({ projectName: "CopilotKitCLI" });
80
- getAnonymousId() {
81
- const anonymousId = this.config.get("anonymousId");
82
- if (!anonymousId) {
83
- const anonymousId2 = crypto.randomUUID();
84
- this.config.set("anonymousId", anonymousId2);
85
- return anonymousId2;
86
- }
87
- return anonymousId;
88
- }
89
- track(event) {
90
- if (!this.segment) {
91
- return Promise.resolve();
92
- }
93
- const payload = {
94
- userId: this.userId ? this.userId : void 0,
95
- email: this.email ? this.email : void 0,
96
- anonymousId: this.getAnonymousId(),
97
- event: event.event,
98
- properties: {
99
- ...this.globalProperties,
100
- ...event.properties,
101
- $groups: this.organizationId ? {
102
- segment_group: this.organizationId
103
- } : void 0,
104
- eventProperties: {
105
- ...event.properties,
106
- ...this.globalProperties
107
- }
108
- }
109
- };
110
- return new Promise((resolve, reject) => {
111
- this.segment.track(payload, (err) => {
112
- if (err) {
113
- resolve();
114
- }
115
- resolve();
116
- });
117
- });
118
- }
119
- /**
120
- * Check if a feature flag is enabled
121
- */
122
- async isFeatureEnabled(flagKey) {
123
- if (!this.posthog) {
124
- return false;
125
- }
126
- try {
127
- const distinctId = this.userId || this.getAnonymousId();
128
- const flag = await this.posthog.isFeatureEnabled(flagKey, distinctId);
129
- return Boolean(flag);
130
- } catch (error) {
131
- console.warn(`Failed to check feature flag ${flagKey}:`, error);
132
- return false;
133
- }
134
- }
135
- /**
136
- * Get feature flag payload
137
- */
138
- async getFeatureFlagPayload(flagKey) {
139
- if (!this.posthog) {
140
- return null;
141
- }
142
- try {
143
- const distinctId = this.userId || this.getAnonymousId();
144
- const payload = await this.posthog.getFeatureFlagPayload(
145
- flagKey,
146
- distinctId
147
- );
148
- return payload;
149
- } catch (error) {
150
- console.warn(`Failed to get feature flag payload ${flagKey}:`, error);
151
- return null;
152
- }
153
- }
154
- /**
155
- * Shutdown analytics services
156
- */
157
- async shutdown() {
158
- if (this.posthog) {
159
- await this.posthog.shutdown();
160
- }
161
- }
162
- };
163
-
164
- // src/services/auth.service.ts
165
- var AuthService = class {
166
- config = new Conf2({ projectName: "CopilotKitCLI" });
167
- COPILOT_CLOUD_BASE_URL = process.env.COPILOT_CLOUD_BASE_URL || "https://cloud.copilotkit.ai";
168
- getToken() {
169
- return this.config.get("cliToken");
170
- }
171
- getCLIToken() {
172
- const cliToken = this.config.get("cliToken");
173
- return cliToken;
174
- }
175
- async logout(cmd) {
176
- this.config.delete("cliToken");
177
- }
178
- async requireLogin(cmd, context) {
179
- let cliToken = this.getCLIToken();
180
- if (!cliToken) {
181
- try {
182
- let shouldLogin = true;
183
- if (context !== "cloud-features") {
184
- const response = await inquirer.prompt([
185
- {
186
- name: "shouldLogin",
187
- type: "confirm",
188
- message: "\u{1FA81} You are not yet authenticated. Authenticate with Copilot Cloud? (press Enter to confirm)",
189
- default: true
190
- }
191
- ]);
192
- shouldLogin = response.shouldLogin;
193
- }
194
- if (shouldLogin) {
195
- if (context === "cloud-features") {
196
- cmd.log(
197
- chalk.cyan("\n\u{1F680} Setting up Copilot Cloud authentication...\n")
198
- );
199
- }
200
- const loginResult = await this.login({ exitAfterLogin: false });
201
- cliToken = loginResult.cliToken;
202
- return loginResult;
203
- } else {
204
- cmd.error("Authentication required to proceed.");
205
- }
206
- } catch (error) {
207
- if (error instanceof Error && error.name === "ExitPromptError") {
208
- cmd.error(chalk.yellow("\nAuthentication cancelled"));
209
- }
210
- throw error;
211
- }
212
- }
213
- let me;
214
- const trpcClient2 = createTRPCClient(cliToken);
215
- try {
216
- me = await trpcClient2.me.query();
217
- } catch (error) {
218
- cmd.log(
219
- chalk.yellow("Your authentication has expired. Re-authenticating...")
220
- );
221
- try {
222
- const loginResult = await this.login({ exitAfterLogin: false });
223
- return loginResult;
224
- } catch (loginError) {
225
- cmd.log(
226
- chalk.red(
227
- "Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login"
228
- )
229
- );
230
- process.exit(1);
231
- }
232
- }
233
- if (!me.organization || !me.user) {
234
- cmd.error("Authentication required to proceed.");
235
- }
236
- return { cliToken, user: me.user, organization: me.organization };
237
- }
238
- async login({ exitAfterLogin } = { exitAfterLogin: true }) {
239
- const spinner = ora("\u{1FA81} Opening browser for authentication...").start();
240
- let analytics;
241
- analytics = new AnalyticsService();
242
- const app = express();
243
- app.use(cors());
244
- app.use(express.urlencoded({ extended: true }));
245
- app.use(express.json());
246
- const port = await getPort();
247
- const state = crypto2.randomBytes(16).toString("hex");
248
- return new Promise(async (resolve, reject) => {
249
- const server = app.listen(port, () => {
250
- });
251
- await analytics.track({
252
- event: "cli.login.initiated",
253
- properties: {}
254
- });
255
- spinner.text = "\u{1FA81} Waiting for browser authentication to complete...";
256
- app.post("/callback", async (req, res) => {
257
- const { cliToken, user, organization } = req.body;
258
- if (state !== req.query.state) {
259
- res.status(401).json({ message: "Invalid state" });
260
- spinner.fail("Invalid state");
261
- server.close();
262
- reject(new Error("OAuth state mismatch"));
263
- return;
264
- }
265
- analytics = new AnalyticsService({
266
- userId: user.id,
267
- organizationId: organization.id,
268
- email: user.email
269
- });
270
- await analytics.track({
271
- event: "cli.login.success",
272
- properties: {
273
- organizationId: organization.id,
274
- userId: user.id,
275
- email: user.email
276
- }
277
- });
278
- this.config.set("cliToken", cliToken);
279
- res.status(200).json({ message: "Callback called" });
280
- spinner.succeed(
281
- `\u{1FA81} Successfully logged in as ${chalk.hex("#7553fc")(user.email)}`
282
- );
283
- if (exitAfterLogin) {
284
- process.exit(0);
285
- } else {
286
- server.close();
287
- resolve({ cliToken, user, organization });
288
- }
289
- });
290
- open(
291
- `${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`
292
- );
293
- });
294
- }
295
- };
296
- export {
297
- AuthService
298
- };
299
- //# sourceMappingURL=auth.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/auth.service.ts","../../src/utils/trpc.ts","../../src/services/analytics.service.ts"],"sourcesContent":["// @ts-ignore\nimport Conf from \"conf\";\nimport cors from \"cors\";\nimport express from \"express\";\nimport crypto from \"node:crypto\";\nimport open from \"open\";\nimport getPort from \"get-port\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport inquirer from \"inquirer\";\nimport { Command } from \"@oclif/core\";\nimport { createTRPCClient } from \"../utils/trpc.js\";\nimport { AnalyticsService } from \"../services/analytics.service.js\";\nimport { BaseCommand } from \"../commands/base-command.js\";\n\ninterface LoginResponse {\n cliToken: string;\n user: {\n email: string;\n id: string;\n };\n organization: {\n id: string;\n };\n}\n\nexport class AuthService {\n private readonly config = new Conf({ projectName: \"CopilotKitCLI\" });\n private readonly COPILOT_CLOUD_BASE_URL =\n process.env.COPILOT_CLOUD_BASE_URL || \"https://cloud.copilotkit.ai\";\n\n getToken(): string | undefined {\n return this.config.get(\"cliToken\") as string | undefined;\n }\n\n getCLIToken(): string | undefined {\n const cliToken = this.config.get(\"cliToken\") as string | undefined;\n return cliToken;\n }\n\n async logout(cmd: BaseCommand): Promise<void> {\n this.config.delete(\"cliToken\");\n }\n\n async requireLogin(\n cmd: Command,\n context?: \"cloud-features\" | \"general\",\n ): Promise<LoginResponse> {\n let cliToken = this.getCLIToken();\n // Check authentication\n if (!cliToken) {\n try {\n let shouldLogin = true;\n\n // For cloud features, automatically proceed with login\n // For general usage, ask for confirmation\n if (context !== \"cloud-features\") {\n const response = await inquirer.prompt([\n {\n name: \"shouldLogin\",\n type: \"confirm\",\n message:\n \"🪁 You are not yet authenticated. Authenticate with Copilot Cloud? (press Enter to confirm)\",\n default: true,\n },\n ]);\n shouldLogin = response.shouldLogin;\n }\n\n if (shouldLogin) {\n // Show different message for cloud features vs general usage\n if (context === \"cloud-features\") {\n cmd.log(\n chalk.cyan(\"\\n🚀 Setting up Copilot Cloud authentication...\\n\"),\n );\n }\n const loginResult = await this.login({ exitAfterLogin: false });\n cliToken = loginResult.cliToken;\n return loginResult;\n } else {\n cmd.error(\"Authentication required to proceed.\");\n }\n } catch (error) {\n if (error instanceof Error && error.name === \"ExitPromptError\") {\n cmd.error(chalk.yellow(\"\\nAuthentication cancelled\"));\n }\n\n throw error;\n }\n }\n\n let me;\n\n const trpcClient = createTRPCClient(cliToken);\n try {\n me = await trpcClient.me.query();\n } catch (error) {\n // Token is invalid/expired, trigger new login\n cmd.log(\n chalk.yellow(\"Your authentication has expired. Re-authenticating...\"),\n );\n try {\n const loginResult = await this.login({ exitAfterLogin: false });\n return loginResult;\n } catch (loginError) {\n cmd.log(\n chalk.red(\n \"Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login\",\n ),\n );\n process.exit(1);\n }\n }\n\n if (!me.organization || !me.user) {\n cmd.error(\"Authentication required to proceed.\");\n }\n\n return { cliToken, user: me.user, organization: me.organization };\n }\n\n async login(\n { exitAfterLogin }: { exitAfterLogin?: boolean } = { exitAfterLogin: true },\n ): Promise<LoginResponse> {\n const spinner = ora(\"🪁 Opening browser for authentication...\").start();\n let analytics: AnalyticsService;\n analytics = new AnalyticsService();\n\n const app = express();\n app.use(cors());\n app.use(express.urlencoded({ extended: true }));\n app.use(express.json());\n\n const port = await getPort();\n const state = crypto.randomBytes(16).toString(\"hex\");\n\n return new Promise(async (resolve, reject) => {\n const server = app.listen(port, () => {});\n\n await analytics.track({\n event: \"cli.login.initiated\",\n properties: {},\n });\n\n spinner.text = \"🪁 Waiting for browser authentication to complete...\";\n\n app.post(\"/callback\", async (req, res) => {\n const { cliToken, user, organization } = req.body;\n\n if (state !== req.query.state) {\n res.status(401).json({ message: \"Invalid state\" });\n spinner.fail(\"Invalid state\");\n server.close();\n reject(new Error(\"OAuth state mismatch\"));\n return;\n }\n\n analytics = new AnalyticsService({\n userId: user.id,\n organizationId: organization.id,\n email: user.email,\n });\n await analytics.track({\n event: \"cli.login.success\",\n properties: {\n organizationId: organization.id,\n userId: user.id,\n email: user.email,\n },\n });\n\n this.config.set(\"cliToken\", cliToken);\n res.status(200).json({ message: \"Callback called\" });\n spinner.succeed(\n `🪁 Successfully logged in as ${chalk.hex(\"#7553fc\")(user.email)}`,\n );\n if (exitAfterLogin) {\n process.exit(0);\n } else {\n server.close();\n resolve({ cliToken, user, organization });\n }\n });\n\n open(\n `${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`,\n );\n });\n }\n}\n","import { createTRPCClient as trpcClient, httpBatchLink } from \"@trpc/client\";\nimport superjson from \"superjson\";\n\nexport const COPILOT_CLOUD_BASE_URL =\n process.env.COPILOT_CLOUD_BASE_URL || \"https://cloud.copilotkit.ai\";\n\nexport function createTRPCClient(cliToken: string): any {\n return trpcClient({\n links: [\n httpBatchLink({\n url: `${COPILOT_CLOUD_BASE_URL}/api/trpc-cli`,\n transformer: superjson,\n headers: () => {\n return {\n \"x-trpc-source\": \"cli\",\n \"x-cli-token\": cliToken,\n };\n },\n }),\n ],\n });\n}\n","import { Analytics } from \"@segment/analytics-node\";\nimport { PostHog } from \"posthog-node\";\nimport { AnalyticsEvents } from \"./events.js\";\nimport Conf from \"conf\";\n\nexport class AnalyticsService {\n private segment: Analytics | undefined;\n private posthog: PostHog | undefined;\n private globalProperties: Record<string, any> = {};\n private userId: string | undefined;\n private email: string | undefined;\n private organizationId: string | undefined;\n private config = new Conf({ projectName: \"CopilotKitCLI\" });\n\n constructor(\n private readonly authData?: {\n userId: string;\n email: string;\n organizationId: string;\n },\n ) {\n if (process.env.SEGMENT_DISABLED === \"true\") {\n return;\n }\n\n const segmentWriteKey =\n process.env.SEGMENT_WRITE_KEY || \"9Pv6QyExYef2P4hPz4gks6QAvNMi2AOf\";\n\n this.globalProperties = {\n service: \"cli\",\n };\n\n if (this.authData?.userId) {\n this.userId = this.authData.userId;\n }\n\n if (this.authData?.email) {\n this.email = this.authData.email;\n this.globalProperties.email = this.authData.email;\n }\n\n if (this.authData?.organizationId) {\n this.organizationId = this.authData.organizationId;\n }\n\n this.segment = new Analytics({\n writeKey: segmentWriteKey,\n disable: process.env.SEGMENT_DISABLE === \"true\",\n });\n\n // Initialize PostHog for feature flags\n if (process.env.POSTHOG_DISABLED !== \"true\") {\n const posthogKey =\n process.env.POSTHOG_KEY ||\n \"phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q\"; // Default key\n const posthogHost =\n process.env.POSTHOG_HOST || \"https://eu.i.posthog.com\";\n\n this.posthog = new PostHog(posthogKey, {\n host: posthogHost,\n });\n }\n\n const config = new Conf({ projectName: \"CopilotKitCLI\" });\n if (!config.get(\"anonymousId\")) {\n config.set(\"anonymousId\", crypto.randomUUID());\n }\n }\n\n private getAnonymousId(): string {\n const anonymousId = this.config.get(\"anonymousId\");\n if (!anonymousId) {\n const anonymousId = crypto.randomUUID();\n this.config.set(\"anonymousId\", anonymousId);\n return anonymousId;\n }\n\n return anonymousId as string;\n }\n\n public track<K extends keyof AnalyticsEvents>(\n event: Omit<Parameters<Analytics[\"track\"]>[0], \"userId\"> & {\n event: K;\n properties: AnalyticsEvents[K];\n },\n ): Promise<void> {\n if (!this.segment) {\n return Promise.resolve();\n }\n\n const payload = {\n userId: this.userId ? this.userId : undefined,\n email: this.email ? this.email : undefined,\n anonymousId: this.getAnonymousId(),\n event: event.event,\n properties: {\n ...this.globalProperties,\n ...event.properties,\n $groups: this.organizationId\n ? {\n segment_group: this.organizationId,\n }\n : undefined,\n eventProperties: {\n ...event.properties,\n ...this.globalProperties,\n },\n },\n };\n\n return new Promise((resolve, reject) => {\n this.segment!.track(payload, (err) => {\n if (err) {\n // Resolve anyway\n resolve();\n }\n\n resolve();\n });\n });\n }\n\n /**\n * Check if a feature flag is enabled\n */\n public async isFeatureEnabled(flagKey: string): Promise<boolean> {\n if (!this.posthog) {\n return false;\n }\n\n try {\n // Use authenticated user ID if available, otherwise use anonymous ID\n const distinctId = this.userId || this.getAnonymousId();\n const flag = await this.posthog.isFeatureEnabled(flagKey, distinctId);\n return Boolean(flag);\n } catch (error) {\n // If there's an error checking the flag, return false (flag disabled)\n console.warn(`Failed to check feature flag ${flagKey}:`, error);\n return false;\n }\n }\n\n /**\n * Get feature flag payload\n */\n public async getFeatureFlagPayload(flagKey: string): Promise<any> {\n if (!this.posthog) {\n return null;\n }\n\n try {\n // Use authenticated user ID if available, otherwise use anonymous ID\n const distinctId = this.userId || this.getAnonymousId();\n const payload = await this.posthog.getFeatureFlagPayload(\n flagKey,\n distinctId,\n );\n return payload;\n } catch (error) {\n // If there's an error getting the payload, return null\n console.warn(`Failed to get feature flag payload ${flagKey}:`, error);\n return null;\n }\n }\n\n /**\n * Shutdown analytics services\n */\n public async shutdown(): Promise<void> {\n if (this.posthog) {\n await this.posthog.shutdown();\n }\n }\n}\n"],"mappings":"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","names":["Conf","crypto","anonymousId","Conf","trpcClient","crypto"]}
@@ -1,119 +0,0 @@
1
- import { RemoteEndpointType } from '../utils/detect-endpoint-type.utils.js';
2
-
3
- type AnalyticsEvents = {
4
- "cli.login.initiated": {};
5
- "cli.login.success": {
6
- organizationId: string;
7
- userId: string;
8
- email: string;
9
- };
10
- "cli.logout": {
11
- organizationId: string;
12
- userId: string;
13
- email: string;
14
- };
15
- "cli.dev.initiatied": {
16
- port: string;
17
- projectId: string;
18
- endpointType: RemoteEndpointType.LangGraphPlatform | RemoteEndpointType.CopilotKit | RemoteEndpointType.CrewAI | RemoteEndpointType.MCP;
19
- };
20
- "cli.dev.tunnel.created": {
21
- tunnelId: string;
22
- port: string;
23
- projectId: string;
24
- endpointType: RemoteEndpointType.LangGraphPlatform | RemoteEndpointType.CopilotKit | RemoteEndpointType.CrewAI | RemoteEndpointType.MCP;
25
- };
26
- "cli.dev.tunnel.closed": {
27
- tunnelId: string;
28
- };
29
- "cli.init.started": {
30
- nextjs_detected: boolean;
31
- flags_used?: string[];
32
- };
33
- "cli.init.abc_branch_selected": {
34
- branch: "A" | "B" | "C";
35
- };
36
- "cli.init.branch_a_cloud_setup_completed": {
37
- branch: "A";
38
- projectId: string;
39
- api_key_retrieved: boolean;
40
- };
41
- "cli.init.branch_a_cloud_setup_failed": {
42
- branch: "A";
43
- error: string;
44
- };
45
- "cli.init.branch_b_api_key_setup_completed": {
46
- branch: "B";
47
- projectId: string;
48
- api_key_retrieved: boolean;
49
- };
50
- "cli.init.branch_b_api_key_setup_failed": {
51
- branch: "B";
52
- error: string;
53
- };
54
- "cli.init.mode_selected": {
55
- mode: "LangGraph" | "CrewAI" | "Standard" | "MCP" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
56
- cloud_setup_completed?: boolean;
57
- deployment_choice?: "Copilot Cloud" | "Self-hosted";
58
- };
59
- "cli.init.cloud_deployment_selected": {
60
- deployment_choice?: "Copilot Cloud" | "Self-hosted";
61
- use_copilot_cloud?: "Yes" | "No";
62
- needs_cloud_deployment: boolean;
63
- mode: string;
64
- };
65
- "cli.init.completed": {
66
- mode: string;
67
- cloud_setup_completed: boolean;
68
- cloud_deployment: boolean;
69
- deployment_choice?: "Copilot Cloud" | "Self-hosted";
70
- agent_scaffolded: boolean;
71
- api_key_in_env: boolean;
72
- duration_ms: number;
73
- };
74
- "cli.init.failed": {
75
- error: string;
76
- step: string;
77
- mode?: string;
78
- cloud_setup_completed?: boolean;
79
- };
80
- "cli.init.cloud_used": {
81
- userId: string;
82
- };
83
- "cli.create.started": {
84
- framework_selected?: string;
85
- project_name?: string;
86
- flags_used?: string[];
87
- };
88
- "cli.create.cloud_setup_completed": {
89
- framework: string;
90
- project_id: string;
91
- api_key_retrieved: boolean;
92
- };
93
- "cli.create.cloud_setup_failed": {
94
- framework: string;
95
- error: string;
96
- };
97
- "cli.create.project_created": {
98
- framework: string;
99
- project_name: string;
100
- has_api_key: boolean;
101
- duration_ms: number;
102
- };
103
- "cli.create.completed": {
104
- framework: string;
105
- project_name: string;
106
- cloud_setup_completed: boolean;
107
- api_key_configured: boolean;
108
- duration_ms: number;
109
- };
110
- "cli.create.failed": {
111
- framework?: string;
112
- project_name?: string;
113
- error: string;
114
- step: string;
115
- duration_ms: number;
116
- };
117
- };
118
-
119
- export type { AnalyticsEvents };
@@ -1 +0,0 @@
1
- //# sourceMappingURL=events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,15 +0,0 @@
1
- import { Tunnel } from 'localtunnel';
2
-
3
- interface TunnelOptions {
4
- port: number;
5
- subdomain?: string;
6
- }
7
- declare class TunnelService {
8
- private readonly META_DATA_URL;
9
- create(options: TunnelOptions): Promise<Tunnel>;
10
- getMetaData(): Promise<{
11
- tunnelHost: string;
12
- }>;
13
- }
14
-
15
- export { type TunnelOptions, TunnelService };
@@ -1,21 +0,0 @@
1
- // src/services/tunnel.service.ts
2
- import axios from "axios";
3
- import localtunnel from "localtunnel";
4
- var TunnelService = class {
5
- META_DATA_URL = "https://metadata-cdn.copilotkit.ai/cloud.config.json";
6
- async create(options) {
7
- const metadata = await this.getMetaData();
8
- return localtunnel({
9
- ...options,
10
- host: metadata.tunnelHost
11
- });
12
- }
13
- async getMetaData() {
14
- const response = await axios.get(this.META_DATA_URL);
15
- return response.data;
16
- }
17
- };
18
- export {
19
- TunnelService
20
- };
21
- //# sourceMappingURL=tunnel.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/tunnel.service.ts"],"sourcesContent":["import type { Tunnel } from \"localtunnel\";\n\nimport axios from \"axios\";\nimport localtunnel from \"localtunnel\";\n\nexport interface TunnelOptions {\n port: number;\n subdomain?: string;\n}\n\nexport class TunnelService {\n private readonly META_DATA_URL =\n \"https://metadata-cdn.copilotkit.ai/cloud.config.json\";\n\n async create(options: TunnelOptions): Promise<Tunnel> {\n const metadata = await this.getMetaData();\n\n return localtunnel({\n ...options,\n host: metadata.tunnelHost,\n });\n }\n\n async getMetaData() {\n const response = await axios.get<{\n tunnelHost: string;\n }>(this.META_DATA_URL);\n return response.data;\n }\n}\n"],"mappings":";AAEA,OAAO,WAAW;AAClB,OAAO,iBAAiB;AAOjB,IAAM,gBAAN,MAAoB;AAAA,EACR,gBACf;AAAA,EAEF,MAAM,OAAO,SAAyC;AACpD,UAAM,WAAW,MAAM,KAAK,YAAY;AAExC,WAAO,YAAY;AAAA,MACjB,GAAG;AAAA,MACH,MAAM,SAAS;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc;AAClB,UAAM,WAAW,MAAM,MAAM,IAE1B,KAAK,aAAa;AACrB,WAAO,SAAS;AAAA,EAClB;AACF;","names":[]}
@@ -1,15 +0,0 @@
1
- declare enum RemoteEndpointType {
2
- LangGraphPlatform = "LangGraphPlatform",
3
- CopilotKit = "CopilotKit",
4
- CrewAI = "CrewAI",
5
- MCP = "MCP",
6
- Invalid = "Invalid"
7
- }
8
- declare const getHumanReadableEndpointType: (type: RemoteEndpointType) => "CrewAI" | "MCP" | "CopilotKit" | "Invalid" | "LangGraph Platform";
9
- declare function detectRemoteEndpointType(url: string): Promise<{
10
- url: string;
11
- type: RemoteEndpointType;
12
- humanReadableType: string;
13
- }>;
14
-
15
- export { RemoteEndpointType, detectRemoteEndpointType, getHumanReadableEndpointType };
@@ -1,157 +0,0 @@
1
- // src/utils/detect-endpoint-type.utils.ts
2
- var RemoteEndpointType = /* @__PURE__ */ ((RemoteEndpointType2) => {
3
- RemoteEndpointType2["LangGraphPlatform"] = "LangGraphPlatform";
4
- RemoteEndpointType2["CopilotKit"] = "CopilotKit";
5
- RemoteEndpointType2["CrewAI"] = "CrewAI";
6
- RemoteEndpointType2["MCP"] = "MCP";
7
- RemoteEndpointType2["Invalid"] = "Invalid";
8
- return RemoteEndpointType2;
9
- })(RemoteEndpointType || {});
10
- var removeTrailingSlash = (url) => url.replace(/\/$/, "");
11
- var getHumanReadableEndpointType = (type) => {
12
- switch (type) {
13
- case "LangGraphPlatform" /* LangGraphPlatform */:
14
- return "LangGraph Platform";
15
- case "CopilotKit" /* CopilotKit */:
16
- return "CopilotKit";
17
- case "CrewAI" /* CrewAI */:
18
- return "CrewAI";
19
- case "MCP" /* MCP */:
20
- return "MCP";
21
- default:
22
- return "Invalid";
23
- }
24
- };
25
- async function detectRemoteEndpointType(url) {
26
- const [isLangGraph, isLangGraphFastAPI, isCopilot, isCrewAI, isMCP] = await Promise.all([
27
- isLangGraphPlatformEndpoint(url),
28
- isLangGraphFastAPIEndpoint(url),
29
- isCopilotKitEndpoint(url),
30
- isCrewAIEndpoint(url),
31
- isMCPEndpoint(url)
32
- ]);
33
- if (isLangGraph || isLangGraphFastAPI) {
34
- return {
35
- url,
36
- type: "LangGraphPlatform" /* LangGraphPlatform */,
37
- humanReadableType: "LangGraph Platform"
38
- };
39
- }
40
- if (isCopilot) {
41
- return {
42
- url,
43
- type: "CopilotKit" /* CopilotKit */,
44
- humanReadableType: "CopilotKit"
45
- };
46
- }
47
- if (isCrewAI) {
48
- return {
49
- url,
50
- type: "CrewAI" /* CrewAI */,
51
- humanReadableType: "CrewAI"
52
- };
53
- }
54
- if (isMCP) {
55
- return {
56
- url,
57
- type: "MCP" /* MCP */,
58
- humanReadableType: "MCP"
59
- };
60
- }
61
- if (!url.endsWith("/copilotkit")) {
62
- const copilotKitUrl = `${removeTrailingSlash(url)}/copilotkit`;
63
- const isCopilotWithPath = await isCopilotKitEndpoint(copilotKitUrl);
64
- if (isCopilotWithPath) {
65
- return {
66
- url: copilotKitUrl,
67
- type: "CopilotKit" /* CopilotKit */,
68
- humanReadableType: "CopilotKit"
69
- };
70
- }
71
- }
72
- return {
73
- url,
74
- type: "Invalid" /* Invalid */,
75
- humanReadableType: "Invalid"
76
- };
77
- }
78
- async function isLangGraphPlatformEndpoint(url, retries = 0) {
79
- let response;
80
- try {
81
- response = await fetch(`${url}/assistants/search`, {
82
- method: "POST",
83
- body: JSON.stringify({
84
- metadata: {},
85
- limit: 99,
86
- offset: 0
87
- })
88
- });
89
- } catch (error) {
90
- return false;
91
- }
92
- if (!response.ok) {
93
- if (response.status === 502) {
94
- if (retries < 3) {
95
- console.log("RETRYING LGC", retries + 1);
96
- return isLangGraphPlatformEndpoint(url, retries + 1);
97
- }
98
- }
99
- if (response.status === 403) {
100
- return true;
101
- }
102
- return false;
103
- }
104
- const data = await response.json();
105
- if (data[0].assistant_id) {
106
- return true;
107
- }
108
- return false;
109
- }
110
- async function isLangGraphFastAPIEndpoint(url) {
111
- let response;
112
- try {
113
- response = await fetch(`${url}/health`, {
114
- method: "GET"
115
- });
116
- } catch (error) {
117
- return false;
118
- }
119
- return response.ok;
120
- }
121
- async function isCopilotKitEndpoint(url, retries = 0) {
122
- let response;
123
- try {
124
- response = await fetch(`${url}/info`, {
125
- method: "POST",
126
- body: JSON.stringify({})
127
- });
128
- } catch (error) {
129
- return false;
130
- }
131
- if (!response.ok) {
132
- if (response.status === 502) {
133
- if (retries < 3) {
134
- console.log("RETRYING CK", retries + 1);
135
- return isCopilotKitEndpoint(url, retries + 1);
136
- }
137
- }
138
- return false;
139
- }
140
- const data = await response.json();
141
- if (data.agents && data.actions) {
142
- return true;
143
- }
144
- return false;
145
- }
146
- async function isCrewAIEndpoint(url) {
147
- return url.toLowerCase().includes("crew");
148
- }
149
- async function isMCPEndpoint(_url) {
150
- return true;
151
- }
152
- export {
153
- RemoteEndpointType,
154
- detectRemoteEndpointType,
155
- getHumanReadableEndpointType
156
- };
157
- //# sourceMappingURL=detect-endpoint-type.utils.js.map