copilotkit 0.0.57 → 0.0.58
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/dist/commands/base-command.js +1 -1
- package/dist/commands/base-command.js.map +1 -1
- package/dist/commands/create.js +8 -4
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dev.js +1 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.js +8 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/utils/detect-endpoint-type.utils.d.ts +1 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/utils/version.js.map +1 -1
- package/oclif.manifest.json +3 -2
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { Command } from "@oclif/core";
|
|
|
3
3
|
import Sentry, { consoleIntegration } from "@sentry/node";
|
|
4
4
|
|
|
5
5
|
// src/utils/version.ts
|
|
6
|
-
var LIB_VERSION = "0.0.
|
|
6
|
+
var LIB_VERSION = "0.0.58";
|
|
7
7
|
|
|
8
8
|
// src/utils/trpc.ts
|
|
9
9
|
import { createTRPCClient as trpcClient, httpBatchLink } from "@trpc/client";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/utils/trpc.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.
|
|
1
|
+
{"version":3,"sources":["../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/utils/trpc.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.58\";\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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"],"mappings":";AAAA,SAAQ,eAAc;AACtB,OAAO,UAAS,0BAAyB;;;ACAlC,IAAM,cAAc;;;ACD3B,SAAQ,oBAAoB,YAAY,qBAAoB;AAC5D,OAAO,eAAe;AAEf,IAAM,yBAAyB,QAAQ,IAAI,0BAA0B;;;AFC5E,OAAO,WAAW;AAEX,IAAM,cAAN,cAA0B,QAAQ;AAAA,EACvC,MAAM,OAAO;AACX,UAAM,KAAK,gBAAgB;AAE3B,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,MACV,KACE,QAAQ,IAAI,cACZ;AAAA,MACF,cAAc,CAAC,mBAAmB,CAAC;AAAA;AAAA,MAEnC,kBAAkB;AAAA;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,KAAU;AACpB,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C,aAAO,iBAAiB,GAAG;AAAA,IAC7B;AAEA,UAAM,UAAU,KAAK,WAAW;AAEhC,SAAK,IAAI,OAAO,MAAM,IAAI,OAAO,IAAI,IAAI;AAEzC,UAAM,WAAW,KAAK,OAAO,QAAQ;AACrC,SAAK,KAAK,QAAQ;AAAA,EACpB;AAAA,EAEA,MAAM,UAAU;AACd,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C;AAAA,IACF;AAEA,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,MAAM,MAAM;AAAA,EAAC;AAAA,EAEb,MAAM,kBAAkB;AACtB,UAAM,WAAW,MAAM,MAAM,GAAG,sBAAsB,cAAc;AAEpE,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,eAAe,KAAK;AAE1B,QAAI,CAAC,gBAAgB,iBAAiB,aAAa;AACjD;AAAA,IACF;AAAA,EAWF;AAAA,EAEA,MAAM,cAAc,SAAiB;AACnC,SAAK,IAAI,OAAO,MAAM,IAAI,OAAO,CAAC;AAClC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
|
package/dist/commands/create.js
CHANGED
|
@@ -15,7 +15,7 @@ import { Command } from "@oclif/core";
|
|
|
15
15
|
import Sentry, { consoleIntegration } from "@sentry/node";
|
|
16
16
|
|
|
17
17
|
// src/utils/version.ts
|
|
18
|
-
var LIB_VERSION = "0.0.
|
|
18
|
+
var LIB_VERSION = "0.0.58";
|
|
19
19
|
|
|
20
20
|
// src/utils/trpc.ts
|
|
21
21
|
import { createTRPCClient as trpcClient, httpBatchLink } from "@trpc/client";
|
|
@@ -95,7 +95,8 @@ var TEMPLATE_REPOS = {
|
|
|
95
95
|
"aws-strands-py": "copilotkit/with-strands-python",
|
|
96
96
|
a2a: "copilotkit/with-a2a-middleware",
|
|
97
97
|
"microsoft-agent-framework-dotnet": "copilotkit/with-microsoft-agent-framework-dotnet",
|
|
98
|
-
"microsoft-agent-framework-py": "copilotkit/with-microsoft-agent-framework-python"
|
|
98
|
+
"microsoft-agent-framework-py": "copilotkit/with-microsoft-agent-framework-python",
|
|
99
|
+
"mcp-apps": "copilotkit/with-mcp-apps"
|
|
99
100
|
};
|
|
100
101
|
var FRAMEWORK_DOCUMENTATION = {
|
|
101
102
|
"langgraph-py": "https://langchain-ai.github.io/langgraph/concepts/why-langgraph",
|
|
@@ -110,7 +111,8 @@ var FRAMEWORK_DOCUMENTATION = {
|
|
|
110
111
|
"aws-strands-py": "https://strandsagents.com/latest/documentation/docs/",
|
|
111
112
|
a2a: "https://a2a-protocol.org/latest/",
|
|
112
113
|
"microsoft-agent-framework-dotnet": "https://learn.microsoft.com/en-us/agent-framework/",
|
|
113
|
-
"microsoft-agent-framework-py": "https://learn.microsoft.com/en-us/agent-framework/"
|
|
114
|
+
"microsoft-agent-framework-py": "https://learn.microsoft.com/en-us/agent-framework/",
|
|
115
|
+
"mcp-apps": "https://modelcontextprotocol.github.io/ext-apps"
|
|
114
116
|
};
|
|
115
117
|
var FRAMEWORK_EMOJI = {
|
|
116
118
|
"langgraph-js": "\u{1F99C}",
|
|
@@ -125,7 +127,8 @@ var FRAMEWORK_EMOJI = {
|
|
|
125
127
|
a2a: "\u{1F916}",
|
|
126
128
|
"aws-strands-py": "\u{1F9EC}",
|
|
127
129
|
"microsoft-agent-framework-dotnet": "\u{1F7E6}",
|
|
128
|
-
"microsoft-agent-framework-py": "\u{1F7E6}"
|
|
130
|
+
"microsoft-agent-framework-py": "\u{1F7E6}",
|
|
131
|
+
"mcp-apps": "\u264D"
|
|
129
132
|
};
|
|
130
133
|
var KITE = `
|
|
131
134
|
\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF
|
|
@@ -295,6 +298,7 @@ Your project is ready to explore CopilotKit locally.`
|
|
|
295
298
|
name: `${FRAMEWORK_EMOJI["microsoft-agent-framework-py"]} Microsoft Agent Framework (Python)`,
|
|
296
299
|
value: "microsoft-agent-framework-py"
|
|
297
300
|
},
|
|
301
|
+
{ name: `${FRAMEWORK_EMOJI["mcp-apps"]} MCP Apps`, value: "mcp-apps" },
|
|
298
302
|
{ name: `${FRAMEWORK_EMOJI.flows} CrewAI Flows`, value: "flows" },
|
|
299
303
|
{ name: `${FRAMEWORK_EMOJI.llamaindex} LlamaIndex`, value: "llamaindex" },
|
|
300
304
|
{ name: `${FRAMEWORK_EMOJI.agno} Agno`, value: "agno" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/create.ts","../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/utils/trpc.ts"],"sourcesContent":["import {Config, Flags, Args} from '@oclif/core'\nimport inquirer from 'inquirer'\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport {promisify} from 'util'\nimport {pipeline} from 'stream'\nimport {createWriteStream} from 'fs'\nimport {extract} from 'tar'\nimport ora from 'ora'\n\nimport {BaseCommand} from './base-command.js'\n\nconst streamPipeline = promisify(pipeline)\n\nconst theme = {\n primary: chalk.magenta,\n secondary: chalk.gray,\n tertiary: chalk.gray,\n error: chalk.red,\n command: chalk.blue,\n success: chalk.green,\n warning: chalk.yellow,\n divider: chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'),\n bottomPadding: '',\n}\n\ninterface CreateOptions {\n projectName: string\n agentFramework: AgentFramework\n}\n\ntype AgentFramework =\n | 'langgraph-py'\n | 'langgraph-js'\n | 'flows'\n | 'mastra'\n | 'pydantic-ai'\n | 'llamaindex'\n | 'agno'\n | 'ag2'\n | 'adk'\n | 'aws-strands-py'\n | 'a2a'\n | 'microsoft-agent-framework-dotnet'\n | 'microsoft-agent-framework-py'\n\nconst TEMPLATE_REPOS: Record<AgentFramework, string> = {\n 'langgraph-py': 'copilotkit/with-langgraph-python',\n 'langgraph-js': 'copilotkit/with-langgraph-js',\n mastra: 'copilotkit/with-mastra',\n flows: 'copilotkit/with-crewai-flows',\n llamaindex: 'copilotkit/with-llamaindex',\n agno: 'copilotkit/with-agno',\n 'pydantic-ai': 'copilotkit/with-pydantic-ai',\n ag2: 'ag2ai/ag2-copilotkit-starter',\n adk: 'copilotkit/with-adk',\n 'aws-strands-py': 'copilotkit/with-strands-python',\n a2a: 'copilotkit/with-a2a-middleware',\n 'microsoft-agent-framework-dotnet': 'copilotkit/with-microsoft-agent-framework-dotnet',\n 'microsoft-agent-framework-py': 'copilotkit/with-microsoft-agent-framework-python',\n}\n\nconst FRAMEWORK_DOCUMENTATION: Record<AgentFramework, string> = {\n 'langgraph-py': 'https://langchain-ai.github.io/langgraph/concepts/why-langgraph',\n 'langgraph-js': 'https://langchain-ai.github.io/langgraphjs',\n flows: 'https://docs.crewai.com/guides/flows/first-flow',\n mastra: 'https://mastra.ai/en/docs',\n 'pydantic-ai': 'https://ai.pydantic.dev/ag-ui/',\n llamaindex: 'https://docs.llamaindex.ai/en/stable',\n agno: 'https://docs.agno.com/',\n ag2: 'https://docs.ag2.ai/latest/docs/user-guide/basic-concepts/overview',\n adk: 'https://google.github.io/adk-docs/',\n 'aws-strands-py': 'https://strandsagents.com/latest/documentation/docs/',\n a2a: 'https://a2a-protocol.org/latest/',\n 'microsoft-agent-framework-dotnet': 'https://learn.microsoft.com/en-us/agent-framework/',\n 'microsoft-agent-framework-py': 'https://learn.microsoft.com/en-us/agent-framework/',\n}\n\nconst FRAMEWORK_EMOJI: Record<AgentFramework, string> = {\n 'langgraph-js': '🦜',\n 'langgraph-py': '🦜',\n flows: '👥',\n mastra: '🌑',\n 'pydantic-ai': '🔼',\n llamaindex: '🦙',\n ag2: '🤖',\n agno: '🅰️',\n adk: '🤖',\n a2a: '🤖',\n 'aws-strands-py': '🧬',\n 'microsoft-agent-framework-dotnet': '🟦',\n 'microsoft-agent-framework-py': '🟦',\n}\n\nconst KITE = `\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠙⣿⡛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠈⢿⡄⠀⠀⠀⠈⠉⠙⣻⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠈⢿⡄⠀⢀⣠⣴⠾⠋⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⢀⣀⣀⣀⣀⣤⣤⡾⢿⡟⠛⠉⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡛⠛⠛⠛⠉⠉⠉⠁⠀⢠⡿⣿⡀⠀⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⣰⡟⠀⠸⣧⠀⠀⠀⠀⢠⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⢀⣼⠏⠀⠀⠀⣿⡀⠀⠀⠀⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠂⣠⡿⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⣡⣾⣿⣄⠀⠀⠀⠀⠀⢸⡇⠀⠀⢰⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⡟⠛⡿⠋⣡⣾⣿⣿⣿⣿⣦⡀⠀⠀⠀⢸⡇⠀⠀⣿⣿⣿⣿\n⣿⣿⣿⣿⡿⠿⣿⠷⠂⡀⠘⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⢸⡇⠀⣼⣿⣿⣿⣿\n⣿⣿⠻⢿⡷⠀⠁⠴⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⣾⠇⣴⣿⣿⣿⣿⣿\n⡿⠛⠀⠀⢴⣾⣷⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣿⣾⣿⣿⣿⣿⣿⣿\n⣷⣾⣿⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n`\n\nexport default class Create extends BaseCommand {\n static description = 'Create a new CopilotKit project'\n\n static examples = [\n '$ copilotkit create my-app',\n '$ copilotkit create my-app --framework langgraph-js',\n '$ copilotkit create -n my-app -f langgraph-js',\n ]\n\n static flags = {\n ...BaseCommand.flags,\n framework: Flags.string({\n char: 'f',\n description: 'Agent framework to use',\n options: Object.keys(TEMPLATE_REPOS),\n required: false,\n }),\n name: Flags.string({\n char: 'n',\n description: 'Name of the project',\n required: false,\n }),\n 'no-banner': Flags.boolean({\n char: 'q',\n description: 'Removes the banner',\n default: false,\n required: false,\n }),\n project: Flags.string({\n description: 'project ID (deprecated, kept for backwards compatibility)',\n }),\n }\n\n static args = {\n projectName: Args.string({\n description: 'Name of the project',\n required: false,\n }),\n }\n\n constructor(argv: string[], config: Config) {\n super(argv, config)\n }\n\n async run() {\n const {args, flags} = await this.parse(Create)\n\n if (!flags['no-banner']) {\n this.log(theme.primary(KITE))\n this.log(theme.primary('~ Welcome to CopilotKit! ~\\n'))\n this.log(theme.divider)\n\n if ((!flags.name || flags.projectName) && !flags.framework) {\n this.log('\\n' + theme.secondary('Just a few questions to get started!\\n'))\n }\n }\n\n const projectNameInput = flags.name || args.projectName || (await this.promptProjectName())\n const projectName = projectNameInput.trim()\n const usingCurrentDir = projectName === '.' || projectName === './'\n const agentFramework = flags.framework || (await this.promptAgentFramework())\n\n const projectDir = usingCurrentDir ? process.cwd() : path.resolve(process.cwd(), projectName)\n\n if (usingCurrentDir) {\n const allowedEntries = new Set(['.git', '.gitignore', '.DS_Store'])\n const existingEntries = await fs.readdir(projectDir)\n const blockingEntries = existingEntries.filter((entry) => !allowedEntries.has(entry))\n\n if (blockingEntries.length > 0) {\n this.log(theme.error('\\nCurrent directory is not empty.'))\n this.log(theme.secondary('\\nPlease run create in an empty directory or specify a new project name.'))\n this.exit(1)\n }\n } else if (await fs.pathExists(projectDir)) {\n this.log(theme.error(`\\nDirectory \"${projectName}\" already exists.`))\n this.log(theme.secondary('\\nYou can:'))\n this.log(theme.secondary(' 1. Choose a different project name'))\n this.log(theme.secondary(' 2. Remove the existing directory manually if you want to use this name\\n'))\n this.exit(1)\n }\n\n const options: CreateOptions = {\n projectName,\n agentFramework: agentFramework as AgentFramework,\n }\n\n const spinner = ora({\n text: theme.secondary.bold('Creating your project...'),\n color: 'cyan',\n spinner: 'dots',\n }).start()\n\n try {\n await fs.ensureDir(projectDir)\n\n spinner.text = theme.secondary.bold('Downloading template...')\n await this.downloadTemplate(projectDir, options.agentFramework)\n\n const displayName = usingCurrentDir ? 'current directory' : `\"${projectName}\"`\n spinner.succeed(theme.secondary.bold(`Project ${displayName} created successfully!`))\n } catch (error: any) {\n spinner.fail(theme.error(`Failed to create project: ${error.message}`))\n this.exit(1)\n }\n\n this.log('\\n' + theme.divider)\n this.log(\n '\\n' +\n theme.secondary.bold(\n `🪁🤝${FRAMEWORK_EMOJI[options.agentFramework]} All set! \\n\\nYour project is ready to explore CopilotKit locally.`,\n ),\n )\n this.log('\\n' + theme.secondary('Next steps:'))\n if (usingCurrentDir) {\n this.log(theme.secondary(' • You are already inside your new project directory'))\n } else {\n this.log(theme.secondary(` • ${theme.command(`cd ${projectName}`)}`))\n }\n this.log(theme.secondary(' • Follow the setup instructions in the README.md'))\n this.log('\\n' + theme.secondary('Documentation:'))\n this.log(theme.secondary(' • ') + theme.command('https://docs.copilotkit.ai'))\n this.log(theme.secondary(' • ') + theme.command(FRAMEWORK_DOCUMENTATION[options.agentFramework]))\n this.log(theme.bottomPadding)\n }\n\n private async promptProjectName(): Promise<string> {\n const {projectName} = await inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: theme.secondary('What is your project named?'),\n validate: (input: string) => {\n if (!input) return theme.error('Project name is required')\n if (!/^[a-z0-9-]+$/.test(input)) {\n return theme.error('Project name can only contain lowercase letters, numbers, and hyphens')\n }\n if (input.length > 30) {\n return theme.error('Project name must be less than 30 characters')\n }\n return true\n },\n },\n ])\n return projectName\n }\n\n private async promptAgentFramework(): Promise<string> {\n const {framework} = await inquirer.prompt([\n {\n type: 'list',\n name: 'framework',\n message: theme.secondary('Which agent framework would you like to use?'),\n choices: [\n {name: `${FRAMEWORK_EMOJI['langgraph-py']} LangGraph (Python)`, value: 'langgraph-py'},\n {name: `${FRAMEWORK_EMOJI['langgraph-js']} LangGraph (JavaScript)`, value: 'langgraph-js'},\n {name: `${FRAMEWORK_EMOJI.mastra} Mastra`, value: 'mastra'},\n {name: `${FRAMEWORK_EMOJI['pydantic-ai']} Pydantic AI`, value: 'pydantic-ai'},\n {name: `${FRAMEWORK_EMOJI['aws-strands-py']} AWS Strands (Python)`, value: 'aws-strands-py'},\n {name: `${FRAMEWORK_EMOJI.adk} ADK`, value: 'adk'},\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-dotnet']} Microsoft Agent Framework (.NET)`,\n value: 'microsoft-agent-framework-dotnet',\n },\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-py']} Microsoft Agent Framework (Python)`,\n value: 'microsoft-agent-framework-py',\n },\n {name: `${FRAMEWORK_EMOJI.flows} CrewAI Flows`, value: 'flows'},\n {name: `${FRAMEWORK_EMOJI.llamaindex} LlamaIndex`, value: 'llamaindex'},\n {name: `${FRAMEWORK_EMOJI.agno} Agno`, value: 'agno'},\n {name: `${FRAMEWORK_EMOJI.ag2} AG2`, value: 'ag2'},\n {name: `${FRAMEWORK_EMOJI.a2a} A2A`, value: 'a2a'},\n ],\n },\n ])\n return framework\n }\n\n private async downloadTemplate(projectDir: string, framework: AgentFramework): Promise<void> {\n const repo = TEMPLATE_REPOS[framework]\n const url = `https://github.com/${repo}/archive/refs/heads/main.tar.gz`\n\n try {\n const response = await fetch(url)\n if (!response.ok) throw new Error(`Failed to download template: ${response.statusText}`)\n\n const tempFile = path.join(projectDir, 'template.tar.gz')\n const fileStream = createWriteStream(tempFile)\n\n if (!response.body) throw new Error('Failed to get response body')\n await streamPipeline(response.body as any, fileStream)\n\n await extract({\n file: tempFile,\n cwd: projectDir,\n strip: 1,\n })\n\n await fs.remove(tempFile)\n } catch (error: any) {\n throw new Error(`Failed to download template: ${error.message}`)\n }\n }\n}\n","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.57\";\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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"],"mappings":"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","names":["chalk","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/create.ts","../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/utils/trpc.ts"],"sourcesContent":["import {Config, Flags, Args} from '@oclif/core'\nimport inquirer from 'inquirer'\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport {promisify} from 'util'\nimport {pipeline} from 'stream'\nimport {createWriteStream} from 'fs'\nimport {extract} from 'tar'\nimport ora from 'ora'\n\nimport {BaseCommand} from './base-command.js'\n\nconst streamPipeline = promisify(pipeline)\n\nconst theme = {\n primary: chalk.magenta,\n secondary: chalk.gray,\n tertiary: chalk.gray,\n error: chalk.red,\n command: chalk.blue,\n success: chalk.green,\n warning: chalk.yellow,\n divider: chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'),\n bottomPadding: '',\n}\n\ninterface CreateOptions {\n projectName: string\n agentFramework: AgentFramework\n}\n\ntype AgentFramework =\n | 'langgraph-py'\n | 'langgraph-js'\n | 'flows'\n | 'mastra'\n | 'pydantic-ai'\n | 'llamaindex'\n | 'agno'\n | 'ag2'\n | 'adk'\n | 'aws-strands-py'\n | 'a2a'\n | 'microsoft-agent-framework-dotnet'\n | 'microsoft-agent-framework-py'\n | 'mcp-apps'\n\nconst TEMPLATE_REPOS: Record<AgentFramework, string> = {\n 'langgraph-py': 'copilotkit/with-langgraph-python',\n 'langgraph-js': 'copilotkit/with-langgraph-js',\n mastra: 'copilotkit/with-mastra',\n flows: 'copilotkit/with-crewai-flows',\n llamaindex: 'copilotkit/with-llamaindex',\n agno: 'copilotkit/with-agno',\n 'pydantic-ai': 'copilotkit/with-pydantic-ai',\n ag2: 'ag2ai/ag2-copilotkit-starter',\n adk: 'copilotkit/with-adk',\n 'aws-strands-py': 'copilotkit/with-strands-python',\n a2a: 'copilotkit/with-a2a-middleware',\n 'microsoft-agent-framework-dotnet': 'copilotkit/with-microsoft-agent-framework-dotnet',\n 'microsoft-agent-framework-py': 'copilotkit/with-microsoft-agent-framework-python',\n 'mcp-apps': 'copilotkit/with-mcp-apps',\n}\n\nconst FRAMEWORK_DOCUMENTATION: Record<AgentFramework, string> = {\n 'langgraph-py': 'https://langchain-ai.github.io/langgraph/concepts/why-langgraph',\n 'langgraph-js': 'https://langchain-ai.github.io/langgraphjs',\n flows: 'https://docs.crewai.com/guides/flows/first-flow',\n mastra: 'https://mastra.ai/en/docs',\n 'pydantic-ai': 'https://ai.pydantic.dev/ag-ui/',\n llamaindex: 'https://docs.llamaindex.ai/en/stable',\n agno: 'https://docs.agno.com/',\n ag2: 'https://docs.ag2.ai/latest/docs/user-guide/basic-concepts/overview',\n adk: 'https://google.github.io/adk-docs/',\n 'aws-strands-py': 'https://strandsagents.com/latest/documentation/docs/',\n a2a: 'https://a2a-protocol.org/latest/',\n 'microsoft-agent-framework-dotnet': 'https://learn.microsoft.com/en-us/agent-framework/',\n 'microsoft-agent-framework-py': 'https://learn.microsoft.com/en-us/agent-framework/',\n 'mcp-apps': 'https://modelcontextprotocol.github.io/ext-apps',\n}\n\nconst FRAMEWORK_EMOJI: Record<AgentFramework, string> = {\n 'langgraph-js': '🦜',\n 'langgraph-py': '🦜',\n flows: '👥',\n mastra: '🌑',\n 'pydantic-ai': '🔼',\n llamaindex: '🦙',\n ag2: '🤖',\n agno: '🅰️',\n adk: '🤖',\n a2a: '🤖',\n 'aws-strands-py': '🧬',\n 'microsoft-agent-framework-dotnet': '🟦',\n 'microsoft-agent-framework-py': '🟦',\n 'mcp-apps': '♍',\n}\n\nconst KITE = `\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠙⣿⡛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠈⢿⡄⠀⠀⠀⠈⠉⠙⣻⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠈⢿⡄⠀⢀⣠⣴⠾⠋⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⢀⣀⣀⣀⣀⣤⣤⡾⢿⡟⠛⠉⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡛⠛⠛⠛⠉⠉⠉⠁⠀⢠⡿⣿⡀⠀⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⣰⡟⠀⠸⣧⠀⠀⠀⠀⢠⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⢀⣼⠏⠀⠀⠀⣿⡀⠀⠀⠀⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠂⣠⡿⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⣡⣾⣿⣄⠀⠀⠀⠀⠀⢸⡇⠀⠀⢰⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⡟⠛⡿⠋⣡⣾⣿⣿⣿⣿⣦⡀⠀⠀⠀⢸⡇⠀⠀⣿⣿⣿⣿\n⣿⣿⣿⣿⡿⠿⣿⠷⠂⡀⠘⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⢸⡇⠀⣼⣿⣿⣿⣿\n⣿⣿⠻⢿⡷⠀⠁⠴⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⣾⠇⣴⣿⣿⣿⣿⣿\n⡿⠛⠀⠀⢴⣾⣷⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣿⣾⣿⣿⣿⣿⣿⣿\n⣷⣾⣿⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n`\n\nexport default class Create extends BaseCommand {\n static description = 'Create a new CopilotKit project'\n\n static examples = [\n '$ copilotkit create my-app',\n '$ copilotkit create my-app --framework langgraph-js',\n '$ copilotkit create -n my-app -f langgraph-js',\n ]\n\n static flags = {\n ...BaseCommand.flags,\n framework: Flags.string({\n char: 'f',\n description: 'Agent framework to use',\n options: Object.keys(TEMPLATE_REPOS),\n required: false,\n }),\n name: Flags.string({\n char: 'n',\n description: 'Name of the project',\n required: false,\n }),\n 'no-banner': Flags.boolean({\n char: 'q',\n description: 'Removes the banner',\n default: false,\n required: false,\n }),\n project: Flags.string({\n description: 'project ID (deprecated, kept for backwards compatibility)',\n }),\n }\n\n static args = {\n projectName: Args.string({\n description: 'Name of the project',\n required: false,\n }),\n }\n\n constructor(argv: string[], config: Config) {\n super(argv, config)\n }\n\n async run() {\n const {args, flags} = await this.parse(Create)\n\n if (!flags['no-banner']) {\n this.log(theme.primary(KITE))\n this.log(theme.primary('~ Welcome to CopilotKit! ~\\n'))\n this.log(theme.divider)\n\n if ((!flags.name || flags.projectName) && !flags.framework) {\n this.log('\\n' + theme.secondary('Just a few questions to get started!\\n'))\n }\n }\n\n const projectNameInput = flags.name || args.projectName || (await this.promptProjectName())\n const projectName = projectNameInput.trim()\n const usingCurrentDir = projectName === '.' || projectName === './'\n const agentFramework = flags.framework || (await this.promptAgentFramework())\n\n const projectDir = usingCurrentDir ? process.cwd() : path.resolve(process.cwd(), projectName)\n\n if (usingCurrentDir) {\n const allowedEntries = new Set(['.git', '.gitignore', '.DS_Store'])\n const existingEntries = await fs.readdir(projectDir)\n const blockingEntries = existingEntries.filter((entry) => !allowedEntries.has(entry))\n\n if (blockingEntries.length > 0) {\n this.log(theme.error('\\nCurrent directory is not empty.'))\n this.log(theme.secondary('\\nPlease run create in an empty directory or specify a new project name.'))\n this.exit(1)\n }\n } else if (await fs.pathExists(projectDir)) {\n this.log(theme.error(`\\nDirectory \"${projectName}\" already exists.`))\n this.log(theme.secondary('\\nYou can:'))\n this.log(theme.secondary(' 1. Choose a different project name'))\n this.log(theme.secondary(' 2. Remove the existing directory manually if you want to use this name\\n'))\n this.exit(1)\n }\n\n const options: CreateOptions = {\n projectName,\n agentFramework: agentFramework as AgentFramework,\n }\n\n const spinner = ora({\n text: theme.secondary.bold('Creating your project...'),\n color: 'cyan',\n spinner: 'dots',\n }).start()\n\n try {\n await fs.ensureDir(projectDir)\n\n spinner.text = theme.secondary.bold('Downloading template...')\n await this.downloadTemplate(projectDir, options.agentFramework)\n\n const displayName = usingCurrentDir ? 'current directory' : `\"${projectName}\"`\n spinner.succeed(theme.secondary.bold(`Project ${displayName} created successfully!`))\n } catch (error: any) {\n spinner.fail(theme.error(`Failed to create project: ${error.message}`))\n this.exit(1)\n }\n\n this.log('\\n' + theme.divider)\n this.log(\n '\\n' +\n theme.secondary.bold(\n `🪁🤝${FRAMEWORK_EMOJI[options.agentFramework]} All set! \\n\\nYour project is ready to explore CopilotKit locally.`,\n ),\n )\n this.log('\\n' + theme.secondary('Next steps:'))\n if (usingCurrentDir) {\n this.log(theme.secondary(' • You are already inside your new project directory'))\n } else {\n this.log(theme.secondary(` • ${theme.command(`cd ${projectName}`)}`))\n }\n this.log(theme.secondary(' • Follow the setup instructions in the README.md'))\n this.log('\\n' + theme.secondary('Documentation:'))\n this.log(theme.secondary(' • ') + theme.command('https://docs.copilotkit.ai'))\n this.log(theme.secondary(' • ') + theme.command(FRAMEWORK_DOCUMENTATION[options.agentFramework]))\n this.log(theme.bottomPadding)\n }\n\n private async promptProjectName(): Promise<string> {\n const {projectName} = await inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: theme.secondary('What is your project named?'),\n validate: (input: string) => {\n if (!input) return theme.error('Project name is required')\n if (!/^[a-z0-9-]+$/.test(input)) {\n return theme.error('Project name can only contain lowercase letters, numbers, and hyphens')\n }\n if (input.length > 30) {\n return theme.error('Project name must be less than 30 characters')\n }\n return true\n },\n },\n ])\n return projectName\n }\n\n private async promptAgentFramework(): Promise<string> {\n const {framework} = await inquirer.prompt([\n {\n type: 'list',\n name: 'framework',\n message: theme.secondary('Which agent framework would you like to use?'),\n choices: [\n {name: `${FRAMEWORK_EMOJI['langgraph-py']} LangGraph (Python)`, value: 'langgraph-py'},\n {name: `${FRAMEWORK_EMOJI['langgraph-js']} LangGraph (JavaScript)`, value: 'langgraph-js'},\n {name: `${FRAMEWORK_EMOJI.mastra} Mastra`, value: 'mastra'},\n {name: `${FRAMEWORK_EMOJI['pydantic-ai']} Pydantic AI`, value: 'pydantic-ai'},\n {name: `${FRAMEWORK_EMOJI['aws-strands-py']} AWS Strands (Python)`, value: 'aws-strands-py'},\n {name: `${FRAMEWORK_EMOJI.adk} ADK`, value: 'adk'},\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-dotnet']} Microsoft Agent Framework (.NET)`,\n value: 'microsoft-agent-framework-dotnet',\n },\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-py']} Microsoft Agent Framework (Python)`,\n value: 'microsoft-agent-framework-py',\n },\n {name: `${FRAMEWORK_EMOJI['mcp-apps']} MCP Apps`, value: 'mcp-apps'},\n {name: `${FRAMEWORK_EMOJI.flows} CrewAI Flows`, value: 'flows'},\n {name: `${FRAMEWORK_EMOJI.llamaindex} LlamaIndex`, value: 'llamaindex'},\n {name: `${FRAMEWORK_EMOJI.agno} Agno`, value: 'agno'},\n {name: `${FRAMEWORK_EMOJI.ag2} AG2`, value: 'ag2'},\n {name: `${FRAMEWORK_EMOJI.a2a} A2A`, value: 'a2a'},\n ],\n },\n ])\n return framework\n }\n\n private async downloadTemplate(projectDir: string, framework: AgentFramework): Promise<void> {\n const repo = TEMPLATE_REPOS[framework]\n const url = `https://github.com/${repo}/archive/refs/heads/main.tar.gz`\n\n try {\n const response = await fetch(url)\n if (!response.ok) throw new Error(`Failed to download template: ${response.statusText}`)\n\n const tempFile = path.join(projectDir, 'template.tar.gz')\n const fileStream = createWriteStream(tempFile)\n\n if (!response.body) throw new Error('Failed to get response body')\n await streamPipeline(response.body as any, fileStream)\n\n await extract({\n file: tempFile,\n cwd: projectDir,\n strip: 1,\n })\n\n await fs.remove(tempFile)\n } catch (error: any) {\n throw new Error(`Failed to download template: ${error.message}`)\n }\n }\n}\n","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.58\";\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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"],"mappings":"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","names":["chalk","chalk"]}
|
package/dist/commands/dev.js
CHANGED
|
@@ -440,7 +440,7 @@ import { Command } from "@oclif/core";
|
|
|
440
440
|
import Sentry, { consoleIntegration } from "@sentry/node";
|
|
441
441
|
|
|
442
442
|
// src/utils/version.ts
|
|
443
|
-
var LIB_VERSION = "0.0.
|
|
443
|
+
var LIB_VERSION = "0.0.58";
|
|
444
444
|
|
|
445
445
|
// src/commands/base-command.ts
|
|
446
446
|
import chalk2 from "chalk";
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/dev.ts","../../src/services/auth.service.ts","../../src/utils/trpc.ts","../../src/services/analytics.service.ts","../../src/utils/detect-endpoint-type.utils.ts","../../src/services/tunnel.service.ts","../../src/commands/base-command.ts","../../src/utils/version.ts"],"sourcesContent":["import {Config, Flags} from '@oclif/core'\nimport inquirer from 'inquirer'\nimport {createId} from '@paralleldrive/cuid2'\nimport ora, {Ora} from 'ora'\nimport chalk from 'chalk'\n\nimport {AuthService} from '../services/auth.service.js'\nimport {createTRPCClient} from '../utils/trpc.js'\nimport {\n detectRemoteEndpointType,\n getHumanReadableEndpointType,\n RemoteEndpointType,\n} from '../utils/detect-endpoint-type.utils.js'\nimport {TunnelService} from '../services/tunnel.service.js'\nimport {AnalyticsService} from '../services/analytics.service.js'\nimport {BaseCommand} from './base-command.js'\n\nconst DEFAULT_CLOUD_BASE_URL = 'https://cloud.copilotkit.ai'\nconst CLOUD_BASE_URL = process.env.COPILOT_CLOUD_BASE_URL ?? DEFAULT_CLOUD_BASE_URL\n\nexport default class Dev extends BaseCommand {\n static override flags = {\n port: Flags.string({description: 'port', required: true}),\n project: Flags.string({description: 'project ID (can be found in the Copilot Cloud dashboard)'}),\n }\n\n static override description = 'Start local development for a CopilotKit project'\n static override examples = ['<%= config.bin %> <%= command.id %> --port 8000 --project proj_mv3laowus0lz11kklo57bdr6']\n\n private trpcClient: ReturnType<typeof createTRPCClient> | null = null\n private copilotCloudTunnelId: string | null = null\n\n constructor(\n argv: string[],\n config: Config,\n private authService = new AuthService(),\n private tunnelService = new TunnelService(),\n ) {\n super(argv, config)\n }\n\n private async pingTunnelRecursively(): Promise<void> {\n if (!this.copilotCloudTunnelId) {\n return\n }\n\n try {\n await this.trpcClient!.pingLocalTunnel.query({\n localTunnelId: this.copilotCloudTunnelId!,\n })\n } catch (error: any) {\n if (error?.data?.code === 'NOT_FOUND') {\n this.gracefulError(error.message)\n } else {\n this.gracefulError('Failed to ping tunnel. The connection may have been lost.')\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 5000))\n await this.pingTunnelRecursively()\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(Dev)\n\n // Check authentication\n const {cliToken, organization, user} = await this.authService.requireLogin(this, 'general')\n const analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\n\n this.trpcClient = createTRPCClient(cliToken)\n\n const availableProjects = await this.trpcClient.listOrgProjects.query({orgId: organization.id})\n let selectedProjectId: string | null = null\n\n // Get project ID\n if (flags.project) {\n if (!availableProjects.some((project: any) => project.id === flags.project)) {\n this.log(chalk.red(`Project with ID ${flags.project} not found`))\n process.exit(1)\n }\n\n selectedProjectId = flags.project\n this.log(chalk.green(`✅ Selected project ${selectedProjectId}`))\n } else {\n const {projectId} = await inquirer.prompt([\n {\n name: 'projectId',\n type: 'list',\n message: 'Select a project',\n choices: availableProjects.map((project: any) => ({\n value: project.id,\n name: `${project.name} (ID: ${project.id})${availableProjects.length === 1 ? ' (press Enter to confirm)' : ''}`,\n })),\n },\n ])\n\n selectedProjectId = projectId\n }\n\n // Remote endpoint type detection\n const {type: remoteEndpointType} = await detectRemoteEndpointType(`http://localhost:${flags.port}`)\n\n if (remoteEndpointType === RemoteEndpointType.Invalid) {\n return this.gracefulError(\n `Invalid remote endpoint. Please ensure you are running a compatible endpoint at port ${flags.port} and try again.`,\n )\n }\n\n const humanReadableRemoteEndpointType = getHumanReadableEndpointType(remoteEndpointType)\n\n await analytics.track({\n event: 'cli.dev.initiatied',\n properties: {\n port: flags.port,\n projectId: selectedProjectId!,\n endpointType: remoteEndpointType,\n },\n })\n\n this.log(chalk.green(`✅ ${humanReadableRemoteEndpointType} endpoint detected`))\n const spinner = ora('Creating tunnel...\\n').start()\n\n const tunnelId = createId()\n\n // Starting tunnel\n const setupTunnel = this.setupTunnel({\n tunnelId,\n port: parseInt(flags.port),\n subdomain: createId(),\n onSuccess: async ({url, id}) => {\n // Print tunnel info\n this.log('\\nTunnel Information:\\n')\n this.log(`${chalk.bold.cyan('• Tunnel URL:\\t\\t')} ${chalk.white(url)}`)\n this.log(`${chalk.bold.cyan('• Endpoint Type:\\t')} ${chalk.white(humanReadableRemoteEndpointType)}`)\n this.log(\n `${chalk.bold.cyan('• Project:\\t\\t')} ${chalk.white(`${CLOUD_BASE_URL}/projects/${selectedProjectId!}`)}`,\n )\n this.log(chalk.yellow('\\nPress Ctrl+C to stop the tunnel'))\n this.log('\\n')\n\n spinner.text = 'Linking local tunnel to Copilot Cloud...'\n\n // Report to Cloud\n const {localTunnelId} = await this.trpcClient!.reportRemoteEndpointLocalTunnel.mutate({\n tunnelId: id,\n projectId: selectedProjectId!,\n endpointType: remoteEndpointType === RemoteEndpointType.CopilotKit ? 'CopilotKit' : 'LangGraphCloud',\n tunnelUrl: url,\n port: parseInt(flags.port),\n })\n\n this.copilotCloudTunnelId = localTunnelId\n\n await analytics.track({\n event: 'cli.dev.tunnel.created',\n properties: {\n tunnelId: localTunnelId,\n port: flags.port,\n projectId: selectedProjectId!,\n endpointType: remoteEndpointType,\n },\n })\n\n spinner.color = 'green'\n spinner.text = '🚀 Local tunnel is live and linked to Copilot Cloud!\\n'\n spinner.succeed()\n\n await this.pingTunnelRecursively()\n },\n onTunnelClose: async ({id}) => {\n if (this.copilotCloudTunnelId) {\n await analytics.track({\n event: 'cli.dev.tunnel.closed',\n properties: {\n tunnelId: id,\n },\n })\n\n await this.trpcClient!.deleteLocalTunnel.mutate({\n localTunnelId: this.copilotCloudTunnelId!,\n })\n this.copilotCloudTunnelId = null\n }\n },\n spinner,\n })\n\n await Promise.all([setupTunnel])\n }\n\n private async setupTunnel({\n port,\n subdomain,\n onSuccess,\n onTunnelClose,\n spinner,\n tunnelId,\n }: {\n port: number\n subdomain?: string\n onSuccess: (params: {url: string; id: string}) => Promise<void>\n onTunnelClose: (params: {id: string}) => Promise<void>\n spinner: Ora\n tunnelId: string\n }) {\n const TUNNEL_TIMEOUT = 15000 // 15 seconds\n const CONNECTION_TEST_TIMEOUT = 5000 // 5 seconds\n\n // First, test if the local port is accessible\n spinner.text = `Testing connection to localhost:${port}...`\n try {\n const testResponse = await Promise.race([\n fetch(`http://localhost:${port}`, {method: 'HEAD'}),\n new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout')), CONNECTION_TEST_TIMEOUT)),\n ])\n } catch (error) {\n spinner.fail()\n return this.gracefulError(\n `Cannot connect to localhost:${port}. Please ensure your application is running on port ${port} and try again.`,\n )\n }\n\n spinner.text = 'Creating tunnel...'\n\n try {\n // Create the tunnel with timeout\n const tunnel = await Promise.race([\n this.tunnelService.create({\n port,\n subdomain: tunnelId,\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Tunnel creation timeout')), TUNNEL_TIMEOUT),\n ),\n ])\n\n // Handle tunnel events\n tunnel.on('request', (info: any) => {\n this.log(`${chalk.green('➜')} ${chalk.white(new Date().toISOString())} - ${info.method} ${info.path}`)\n })\n\n tunnel.on('error', (err: any) => {\n this.gracefulError(chalk.red(`Tunnel error: ${err.message}`))\n })\n\n tunnel.on('close', async () => {\n this.log(chalk.yellow('\\nTunnel closed'))\n await onTunnelClose({id: tunnelId})\n process.exit(0)\n })\n\n // Keep the process alive until Ctrl+C\n await Promise.all([\n new Promise<void>(() => {\n process.on('SIGINT', async () => {\n this.log('\\nShutting down tunnel...')\n await onTunnelClose({id: tunnelId})\n tunnel.close()\n process.exit(0)\n })\n\n process.on('SIGTERM', async () => {\n this.log('\\nShutting down tunnel...')\n await onTunnelClose({id: tunnelId})\n tunnel.close()\n process.exit(0)\n })\n }),\n onSuccess({url: tunnel.url, id: tunnelId}),\n ])\n } catch (error: any) {\n spinner.fail()\n if (error.message === 'Tunnel creation timeout') {\n return this.gracefulError(\n `Unable to establish tunnel connection after ${TUNNEL_TIMEOUT / 1000} seconds.\\n\\n` +\n `This usually means:\\n` +\n `• Network connectivity issues\\n` +\n `• Tunnel service is temporarily unavailable\\n` +\n `• Firewall blocking outbound connections\\n\\n` +\n `Please try:\\n` +\n `1. Check your internet connection\\n` +\n `2. Try again in a few moments\\n`,\n )\n } else if (error.message === 'Connection timeout') {\n return this.gracefulError(\n `Cannot connect to localhost:${port}. Please ensure your application is running on port ${port} and try again.`,\n )\n } else {\n return this.gracefulError(`Failed to create tunnel: ${error.message}`)\n }\n }\n }\n}\n","// @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 = 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(cmd: Command, context?: 'cloud-features' | 'general'): 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: '🪁 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(chalk.cyan('\\n🚀 Setting up Copilot Cloud authentication...\\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(chalk.yellow('Your authentication has expired. Re-authenticating...'))\n try {\n const loginResult = await this.login({exitAfterLogin: false})\n return loginResult\n } catch (loginError) {\n cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login'))\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({exitAfterLogin}: {exitAfterLogin?: boolean} = {exitAfterLogin: true}): 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) => {\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 analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\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 if (state !== req.query.state) {\n res.status(401).json({message: 'Invalid state'})\n spinner.fail('Invalid state')\n return\n }\n\n this.config.set('cliToken', cliToken)\n res.status(200).json({message: 'Callback called'})\n spinner.succeed(`🪁 Successfully logged in as ${chalk.hex('#7553fc')(user.email)}`)\n if (exitAfterLogin) {\n process.exit(0)\n } else {\n server.close()\n resolve({cliToken, user, organization})\n }\n })\n\n open(`${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`)\n })\n }\n}\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 = 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 = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = 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(flagKey, distinctId)\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","export enum RemoteEndpointType {\n LangGraphPlatform = 'LangGraphPlatform',\n CopilotKit = 'CopilotKit',\n CrewAI = 'CrewAI',\n MCP = 'MCP',\n Invalid = 'Invalid',\n}\n\nconst removeTrailingSlash = (url: string) => url.replace(/\\/$/, '')\n\nexport const getHumanReadableEndpointType = (type: RemoteEndpointType) => {\n switch (type) {\n case RemoteEndpointType.LangGraphPlatform:\n return 'LangGraph Platform'\n case RemoteEndpointType.CopilotKit:\n return 'CopilotKit'\n case RemoteEndpointType.CrewAI:\n return 'CrewAI'\n case RemoteEndpointType.MCP:\n return 'MCP'\n default:\n return 'Invalid'\n }\n}\n\nexport async function detectRemoteEndpointType(url: string): Promise<{\n url: string\n type: RemoteEndpointType\n humanReadableType: string\n}> {\n // First check base URL\n const [isLangGraph, isCopilot, isCrewAI, isMCP] = await Promise.all([\n isLangGraphPlatformEndpoint(url),\n isLangGraphFastAPIEndpoint(url),\n isCopilotKitEndpoint(url),\n isCrewAIEndpoint(url),\n isMCPEndpoint(url),\n ])\n\n // Check base endpoints first\n if (isLangGraph) {\n return {\n url,\n type: RemoteEndpointType.LangGraphPlatform,\n humanReadableType: 'LangGraph Platform',\n }\n }\n\n if (isCopilot) {\n return {\n url,\n type: RemoteEndpointType.CopilotKit,\n humanReadableType: 'CopilotKit',\n }\n }\n\n if (isCrewAI) {\n return {\n url,\n type: RemoteEndpointType.CrewAI,\n humanReadableType: 'CrewAI',\n }\n }\n\n // If no match and URL doesn't already end with /copilotkit, try that path\n if (!url.endsWith('/copilotkit')) {\n const copilotKitUrl = `${removeTrailingSlash(url)}/copilotkit`\n const isCopilotWithPath = await isCopilotKitEndpoint(copilotKitUrl)\n\n if (isCopilotWithPath) {\n return {\n url: copilotKitUrl,\n type: RemoteEndpointType.CopilotKit,\n humanReadableType: 'CopilotKit',\n }\n }\n }\n\n return {\n url,\n type: RemoteEndpointType.Invalid,\n humanReadableType: 'Invalid',\n }\n}\n\nasync function isLangGraphPlatformEndpoint(url: string, retries: number = 0): Promise<boolean> {\n let response\n\n try {\n response = await fetch(`${url}/assistants/search`, {\n method: 'POST',\n\n body: JSON.stringify({\n metadata: {},\n limit: 99,\n offset: 0,\n }),\n })\n } catch (error) {\n return false\n }\n\n if (!response.ok) {\n if (response.status === 502) {\n if (retries < 3) {\n console.log('RETRYING LGC', retries + 1)\n return isLangGraphPlatformEndpoint(url, retries + 1)\n }\n }\n\n if (response.status === 403) {\n return true\n }\n\n return false\n }\n\n const data = await response.json()\n\n if (data[0].assistant_id) {\n return true\n }\n\n return false\n}\n\nasync function isLangGraphFastAPIEndpoint(url: string, retries: number = 0): Promise<boolean> {\n let response\n\n try {\n response = await fetch(`${url}/health`, {\n method: 'GET',\n })\n } catch (error) {\n return false\n }\n\n return response.ok\n}\n\nasync function isCopilotKitEndpoint(url: string, retries: number = 0): Promise<boolean> {\n let response\n\n try {\n response = await fetch(`${url}/info`, {\n method: 'POST',\n body: JSON.stringify({}),\n })\n } catch (error) {\n return false\n }\n\n if (!response.ok) {\n if (response.status === 502) {\n if (retries < 3) {\n console.log('RETRYING CK', retries + 1)\n return isCopilotKitEndpoint(url, retries + 1)\n }\n }\n\n return false\n }\n\n const data = await response.json()\n\n if (data.agents && data.actions) {\n return true\n }\n\n return false\n}\n\nasync function isCrewAIEndpoint(url: string): Promise<boolean> {\n return url.toLowerCase().includes('crew')\n}\n\nasync function isMCPEndpoint(url: string): Promise<boolean> {\n return true\n}\n","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 = '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","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.57\";\n"],"mappings":"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","names":["inquirer","ora","chalk","Conf","crypto","anonymousId","Conf","trpcClient","crypto","chalk","chalk","inquirer","ora"]}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/dev.ts","../../src/services/auth.service.ts","../../src/utils/trpc.ts","../../src/services/analytics.service.ts","../../src/utils/detect-endpoint-type.utils.ts","../../src/services/tunnel.service.ts","../../src/commands/base-command.ts","../../src/utils/version.ts"],"sourcesContent":["import {Config, Flags} from '@oclif/core'\nimport inquirer from 'inquirer'\nimport {createId} from '@paralleldrive/cuid2'\nimport ora, {Ora} from 'ora'\nimport chalk from 'chalk'\n\nimport {AuthService} from '../services/auth.service.js'\nimport {createTRPCClient} from '../utils/trpc.js'\nimport {\n detectRemoteEndpointType,\n getHumanReadableEndpointType,\n RemoteEndpointType,\n} from '../utils/detect-endpoint-type.utils.js'\nimport {TunnelService} from '../services/tunnel.service.js'\nimport {AnalyticsService} from '../services/analytics.service.js'\nimport {BaseCommand} from './base-command.js'\n\nconst DEFAULT_CLOUD_BASE_URL = 'https://cloud.copilotkit.ai'\nconst CLOUD_BASE_URL = process.env.COPILOT_CLOUD_BASE_URL ?? DEFAULT_CLOUD_BASE_URL\n\nexport default class Dev extends BaseCommand {\n static override flags = {\n port: Flags.string({description: 'port', required: true}),\n project: Flags.string({description: 'project ID (can be found in the Copilot Cloud dashboard)'}),\n }\n\n static override description = 'Start local development for a CopilotKit project'\n static override examples = ['<%= config.bin %> <%= command.id %> --port 8000 --project proj_mv3laowus0lz11kklo57bdr6']\n\n private trpcClient: ReturnType<typeof createTRPCClient> | null = null\n private copilotCloudTunnelId: string | null = null\n\n constructor(\n argv: string[],\n config: Config,\n private authService = new AuthService(),\n private tunnelService = new TunnelService(),\n ) {\n super(argv, config)\n }\n\n private async pingTunnelRecursively(): Promise<void> {\n if (!this.copilotCloudTunnelId) {\n return\n }\n\n try {\n await this.trpcClient!.pingLocalTunnel.query({\n localTunnelId: this.copilotCloudTunnelId!,\n })\n } catch (error: any) {\n if (error?.data?.code === 'NOT_FOUND') {\n this.gracefulError(error.message)\n } else {\n this.gracefulError('Failed to ping tunnel. The connection may have been lost.')\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 5000))\n await this.pingTunnelRecursively()\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(Dev)\n\n // Check authentication\n const {cliToken, organization, user} = await this.authService.requireLogin(this, 'general')\n const analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\n\n this.trpcClient = createTRPCClient(cliToken)\n\n const availableProjects = await this.trpcClient.listOrgProjects.query({orgId: organization.id})\n let selectedProjectId: string | null = null\n\n // Get project ID\n if (flags.project) {\n if (!availableProjects.some((project: any) => project.id === flags.project)) {\n this.log(chalk.red(`Project with ID ${flags.project} not found`))\n process.exit(1)\n }\n\n selectedProjectId = flags.project\n this.log(chalk.green(`✅ Selected project ${selectedProjectId}`))\n } else {\n const {projectId} = await inquirer.prompt([\n {\n name: 'projectId',\n type: 'list',\n message: 'Select a project',\n choices: availableProjects.map((project: any) => ({\n value: project.id,\n name: `${project.name} (ID: ${project.id})${availableProjects.length === 1 ? ' (press Enter to confirm)' : ''}`,\n })),\n },\n ])\n\n selectedProjectId = projectId\n }\n\n // Remote endpoint type detection\n const {type: remoteEndpointType} = await detectRemoteEndpointType(`http://localhost:${flags.port}`)\n\n if (remoteEndpointType === RemoteEndpointType.Invalid) {\n return this.gracefulError(\n `Invalid remote endpoint. Please ensure you are running a compatible endpoint at port ${flags.port} and try again.`,\n )\n }\n\n const humanReadableRemoteEndpointType = getHumanReadableEndpointType(remoteEndpointType)\n\n await analytics.track({\n event: 'cli.dev.initiatied',\n properties: {\n port: flags.port,\n projectId: selectedProjectId!,\n endpointType: remoteEndpointType,\n },\n })\n\n this.log(chalk.green(`✅ ${humanReadableRemoteEndpointType} endpoint detected`))\n const spinner = ora('Creating tunnel...\\n').start()\n\n const tunnelId = createId()\n\n // Starting tunnel\n const setupTunnel = this.setupTunnel({\n tunnelId,\n port: parseInt(flags.port),\n subdomain: createId(),\n onSuccess: async ({url, id}) => {\n // Print tunnel info\n this.log('\\nTunnel Information:\\n')\n this.log(`${chalk.bold.cyan('• Tunnel URL:\\t\\t')} ${chalk.white(url)}`)\n this.log(`${chalk.bold.cyan('• Endpoint Type:\\t')} ${chalk.white(humanReadableRemoteEndpointType)}`)\n this.log(\n `${chalk.bold.cyan('• Project:\\t\\t')} ${chalk.white(`${CLOUD_BASE_URL}/projects/${selectedProjectId!}`)}`,\n )\n this.log(chalk.yellow('\\nPress Ctrl+C to stop the tunnel'))\n this.log('\\n')\n\n spinner.text = 'Linking local tunnel to Copilot Cloud...'\n\n // Report to Cloud\n const {localTunnelId} = await this.trpcClient!.reportRemoteEndpointLocalTunnel.mutate({\n tunnelId: id,\n projectId: selectedProjectId!,\n endpointType: remoteEndpointType === RemoteEndpointType.CopilotKit ? 'CopilotKit' : 'LangGraphCloud',\n tunnelUrl: url,\n port: parseInt(flags.port),\n })\n\n this.copilotCloudTunnelId = localTunnelId\n\n await analytics.track({\n event: 'cli.dev.tunnel.created',\n properties: {\n tunnelId: localTunnelId,\n port: flags.port,\n projectId: selectedProjectId!,\n endpointType: remoteEndpointType,\n },\n })\n\n spinner.color = 'green'\n spinner.text = '🚀 Local tunnel is live and linked to Copilot Cloud!\\n'\n spinner.succeed()\n\n await this.pingTunnelRecursively()\n },\n onTunnelClose: async ({id}) => {\n if (this.copilotCloudTunnelId) {\n await analytics.track({\n event: 'cli.dev.tunnel.closed',\n properties: {\n tunnelId: id,\n },\n })\n\n await this.trpcClient!.deleteLocalTunnel.mutate({\n localTunnelId: this.copilotCloudTunnelId!,\n })\n this.copilotCloudTunnelId = null\n }\n },\n spinner,\n })\n\n await Promise.all([setupTunnel])\n }\n\n private async setupTunnel({\n port,\n subdomain,\n onSuccess,\n onTunnelClose,\n spinner,\n tunnelId,\n }: {\n port: number\n subdomain?: string\n onSuccess: (params: {url: string; id: string}) => Promise<void>\n onTunnelClose: (params: {id: string}) => Promise<void>\n spinner: Ora\n tunnelId: string\n }) {\n const TUNNEL_TIMEOUT = 15000 // 15 seconds\n const CONNECTION_TEST_TIMEOUT = 5000 // 5 seconds\n\n // First, test if the local port is accessible\n spinner.text = `Testing connection to localhost:${port}...`\n try {\n const testResponse = await Promise.race([\n fetch(`http://localhost:${port}`, {method: 'HEAD'}),\n new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout')), CONNECTION_TEST_TIMEOUT)),\n ])\n } catch (error) {\n spinner.fail()\n return this.gracefulError(\n `Cannot connect to localhost:${port}. Please ensure your application is running on port ${port} and try again.`,\n )\n }\n\n spinner.text = 'Creating tunnel...'\n\n try {\n // Create the tunnel with timeout\n const tunnel = await Promise.race([\n this.tunnelService.create({\n port,\n subdomain: tunnelId,\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Tunnel creation timeout')), TUNNEL_TIMEOUT),\n ),\n ])\n\n // Handle tunnel events\n tunnel.on('request', (info: any) => {\n this.log(`${chalk.green('➜')} ${chalk.white(new Date().toISOString())} - ${info.method} ${info.path}`)\n })\n\n tunnel.on('error', (err: any) => {\n this.gracefulError(chalk.red(`Tunnel error: ${err.message}`))\n })\n\n tunnel.on('close', async () => {\n this.log(chalk.yellow('\\nTunnel closed'))\n await onTunnelClose({id: tunnelId})\n process.exit(0)\n })\n\n // Keep the process alive until Ctrl+C\n await Promise.all([\n new Promise<void>(() => {\n process.on('SIGINT', async () => {\n this.log('\\nShutting down tunnel...')\n await onTunnelClose({id: tunnelId})\n tunnel.close()\n process.exit(0)\n })\n\n process.on('SIGTERM', async () => {\n this.log('\\nShutting down tunnel...')\n await onTunnelClose({id: tunnelId})\n tunnel.close()\n process.exit(0)\n })\n }),\n onSuccess({url: tunnel.url, id: tunnelId}),\n ])\n } catch (error: any) {\n spinner.fail()\n if (error.message === 'Tunnel creation timeout') {\n return this.gracefulError(\n `Unable to establish tunnel connection after ${TUNNEL_TIMEOUT / 1000} seconds.\\n\\n` +\n `This usually means:\\n` +\n `• Network connectivity issues\\n` +\n `• Tunnel service is temporarily unavailable\\n` +\n `• Firewall blocking outbound connections\\n\\n` +\n `Please try:\\n` +\n `1. Check your internet connection\\n` +\n `2. Try again in a few moments\\n`,\n )\n } else if (error.message === 'Connection timeout') {\n return this.gracefulError(\n `Cannot connect to localhost:${port}. Please ensure your application is running on port ${port} and try again.`,\n )\n } else {\n return this.gracefulError(`Failed to create tunnel: ${error.message}`)\n }\n }\n }\n}\n","// @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 = 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(cmd: Command, context?: 'cloud-features' | 'general'): 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: '🪁 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(chalk.cyan('\\n🚀 Setting up Copilot Cloud authentication...\\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(chalk.yellow('Your authentication has expired. Re-authenticating...'))\n try {\n const loginResult = await this.login({exitAfterLogin: false})\n return loginResult\n } catch (loginError) {\n cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login'))\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({exitAfterLogin}: {exitAfterLogin?: boolean} = {exitAfterLogin: true}): 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) => {\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 analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\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 if (state !== req.query.state) {\n res.status(401).json({message: 'Invalid state'})\n spinner.fail('Invalid state')\n return\n }\n\n this.config.set('cliToken', cliToken)\n res.status(200).json({message: 'Callback called'})\n spinner.succeed(`🪁 Successfully logged in as ${chalk.hex('#7553fc')(user.email)}`)\n if (exitAfterLogin) {\n process.exit(0)\n } else {\n server.close()\n resolve({cliToken, user, organization})\n }\n })\n\n open(`${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`)\n })\n }\n}\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 = 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 = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = 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(flagKey, distinctId)\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","export enum RemoteEndpointType {\n LangGraphPlatform = 'LangGraphPlatform',\n CopilotKit = 'CopilotKit',\n CrewAI = 'CrewAI',\n MCP = 'MCP',\n Invalid = 'Invalid',\n}\n\nconst removeTrailingSlash = (url: string) => url.replace(/\\/$/, '')\n\nexport const getHumanReadableEndpointType = (type: RemoteEndpointType) => {\n switch (type) {\n case RemoteEndpointType.LangGraphPlatform:\n return 'LangGraph Platform'\n case RemoteEndpointType.CopilotKit:\n return 'CopilotKit'\n case RemoteEndpointType.CrewAI:\n return 'CrewAI'\n case RemoteEndpointType.MCP:\n return 'MCP'\n default:\n return 'Invalid'\n }\n}\n\nexport async function detectRemoteEndpointType(url: string): Promise<{\n url: string\n type: RemoteEndpointType\n humanReadableType: string\n}> {\n // First check base URL\n const [isLangGraph, isCopilot, isCrewAI, isMCP] = await Promise.all([\n isLangGraphPlatformEndpoint(url),\n isLangGraphFastAPIEndpoint(url),\n isCopilotKitEndpoint(url),\n isCrewAIEndpoint(url),\n isMCPEndpoint(url),\n ])\n\n // Check base endpoints first\n if (isLangGraph) {\n return {\n url,\n type: RemoteEndpointType.LangGraphPlatform,\n humanReadableType: 'LangGraph Platform',\n }\n }\n\n if (isCopilot) {\n return {\n url,\n type: RemoteEndpointType.CopilotKit,\n humanReadableType: 'CopilotKit',\n }\n }\n\n if (isCrewAI) {\n return {\n url,\n type: RemoteEndpointType.CrewAI,\n humanReadableType: 'CrewAI',\n }\n }\n\n // If no match and URL doesn't already end with /copilotkit, try that path\n if (!url.endsWith('/copilotkit')) {\n const copilotKitUrl = `${removeTrailingSlash(url)}/copilotkit`\n const isCopilotWithPath = await isCopilotKitEndpoint(copilotKitUrl)\n\n if (isCopilotWithPath) {\n return {\n url: copilotKitUrl,\n type: RemoteEndpointType.CopilotKit,\n humanReadableType: 'CopilotKit',\n }\n }\n }\n\n return {\n url,\n type: RemoteEndpointType.Invalid,\n humanReadableType: 'Invalid',\n }\n}\n\nasync function isLangGraphPlatformEndpoint(url: string, retries: number = 0): Promise<boolean> {\n let response\n\n try {\n response = await fetch(`${url}/assistants/search`, {\n method: 'POST',\n\n body: JSON.stringify({\n metadata: {},\n limit: 99,\n offset: 0,\n }),\n })\n } catch (error) {\n return false\n }\n\n if (!response.ok) {\n if (response.status === 502) {\n if (retries < 3) {\n console.log('RETRYING LGC', retries + 1)\n return isLangGraphPlatformEndpoint(url, retries + 1)\n }\n }\n\n if (response.status === 403) {\n return true\n }\n\n return false\n }\n\n const data = await response.json()\n\n if (data[0].assistant_id) {\n return true\n }\n\n return false\n}\n\nasync function isLangGraphFastAPIEndpoint(url: string, retries: number = 0): Promise<boolean> {\n let response\n\n try {\n response = await fetch(`${url}/health`, {\n method: 'GET',\n })\n } catch (error) {\n return false\n }\n\n return response.ok\n}\n\nasync function isCopilotKitEndpoint(url: string, retries: number = 0): Promise<boolean> {\n let response\n\n try {\n response = await fetch(`${url}/info`, {\n method: 'POST',\n body: JSON.stringify({}),\n })\n } catch (error) {\n return false\n }\n\n if (!response.ok) {\n if (response.status === 502) {\n if (retries < 3) {\n console.log('RETRYING CK', retries + 1)\n return isCopilotKitEndpoint(url, retries + 1)\n }\n }\n\n return false\n }\n\n const data = await response.json()\n\n if (data.agents && data.actions) {\n return true\n }\n\n return false\n}\n\nasync function isCrewAIEndpoint(url: string): Promise<boolean> {\n return url.toLowerCase().includes('crew')\n}\n\nasync function isMCPEndpoint(url: string): Promise<boolean> {\n return true\n}\n","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 = '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","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.58\";\n"],"mappings":"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","names":["inquirer","ora","chalk","Conf","crypto","anonymousId","Conf","trpcClient","crypto","chalk","chalk","inquirer","ora"]}
|
package/dist/commands/init.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Command } from "@oclif/core";
|
|
|
6
6
|
import Sentry, { consoleIntegration } from "@sentry/node";
|
|
7
7
|
|
|
8
8
|
// src/utils/version.ts
|
|
9
|
-
var LIB_VERSION = "0.0.
|
|
9
|
+
var LIB_VERSION = "0.0.58";
|
|
10
10
|
|
|
11
11
|
// src/utils/trpc.ts
|
|
12
12
|
import { createTRPCClient as trpcClient, httpBatchLink } from "@trpc/client";
|
|
@@ -96,7 +96,8 @@ var TEMPLATE_REPOS = {
|
|
|
96
96
|
"aws-strands-py": "copilotkit/with-strands-python",
|
|
97
97
|
a2a: "copilotkit/with-a2a-middleware",
|
|
98
98
|
"microsoft-agent-framework-dotnet": "copilotkit/with-microsoft-agent-framework-dotnet",
|
|
99
|
-
"microsoft-agent-framework-py": "copilotkit/with-microsoft-agent-framework-python"
|
|
99
|
+
"microsoft-agent-framework-py": "copilotkit/with-microsoft-agent-framework-python",
|
|
100
|
+
"mcp-apps": "copilotkit/with-mcp-apps"
|
|
100
101
|
};
|
|
101
102
|
var FRAMEWORK_DOCUMENTATION = {
|
|
102
103
|
"langgraph-py": "https://langchain-ai.github.io/langgraph/concepts/why-langgraph",
|
|
@@ -111,7 +112,8 @@ var FRAMEWORK_DOCUMENTATION = {
|
|
|
111
112
|
"aws-strands-py": "https://strandsagents.com/latest/documentation/docs/",
|
|
112
113
|
a2a: "https://a2a-protocol.org/latest/",
|
|
113
114
|
"microsoft-agent-framework-dotnet": "https://learn.microsoft.com/en-us/agent-framework/",
|
|
114
|
-
"microsoft-agent-framework-py": "https://learn.microsoft.com/en-us/agent-framework/"
|
|
115
|
+
"microsoft-agent-framework-py": "https://learn.microsoft.com/en-us/agent-framework/",
|
|
116
|
+
"mcp-apps": "https://modelcontextprotocol.github.io/ext-apps"
|
|
115
117
|
};
|
|
116
118
|
var FRAMEWORK_EMOJI = {
|
|
117
119
|
"langgraph-js": "\u{1F99C}",
|
|
@@ -126,7 +128,8 @@ var FRAMEWORK_EMOJI = {
|
|
|
126
128
|
a2a: "\u{1F916}",
|
|
127
129
|
"aws-strands-py": "\u{1F9EC}",
|
|
128
130
|
"microsoft-agent-framework-dotnet": "\u{1F7E6}",
|
|
129
|
-
"microsoft-agent-framework-py": "\u{1F7E6}"
|
|
131
|
+
"microsoft-agent-framework-py": "\u{1F7E6}",
|
|
132
|
+
"mcp-apps": "\u264D"
|
|
130
133
|
};
|
|
131
134
|
var KITE = `
|
|
132
135
|
\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF\u28FF
|
|
@@ -296,6 +299,7 @@ Your project is ready to explore CopilotKit locally.`
|
|
|
296
299
|
name: `${FRAMEWORK_EMOJI["microsoft-agent-framework-py"]} Microsoft Agent Framework (Python)`,
|
|
297
300
|
value: "microsoft-agent-framework-py"
|
|
298
301
|
},
|
|
302
|
+
{ name: `${FRAMEWORK_EMOJI["mcp-apps"]} MCP Apps`, value: "mcp-apps" },
|
|
299
303
|
{ name: `${FRAMEWORK_EMOJI.flows} CrewAI Flows`, value: "flows" },
|
|
300
304
|
{ name: `${FRAMEWORK_EMOJI.llamaindex} LlamaIndex`, value: "llamaindex" },
|
|
301
305
|
{ name: `${FRAMEWORK_EMOJI.agno} Agno`, value: "agno" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/init.ts","../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/utils/trpc.ts","../../src/commands/create.ts","../../src/lib/init/types/questions.ts","../../src/lib/init/utils.ts"],"sourcesContent":["import {Config, Flags} from '@oclif/core'\n\nimport {BaseCommand} from './base-command.js'\nimport Create from './create.js'\nimport {ConfigFlags} from '../lib/init/types/questions.js'\n\nexport default class CloudInit extends BaseCommand {\n static override description = 'Set up CopilotKit in your Next.js project, or create a new project if none exists'\n\n static override examples = ['<%= config.bin %> init', '<%= config.bin %> init --dir ./my-app']\n\n static override flags = {\n ...BaseCommand.flags,\n ...ConfigFlags,\n runtimeUrl: Flags.string({description: 'runtime URL'}),\n project: Flags.string({description: 'project ID (can be found in the Copilot Cloud dashboard)'}),\n dir: Flags.string({description: 'directory of the Next.js project', default: '.'}),\n }\n\n constructor(argv: string[], config: Config) {\n super(argv, config)\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(CloudInit)\n this.log('`copilotkit init` now routes to `copilotkit create`.')\n\n const createCommand = new Create([], this.config)\n await createCommand.run()\n }\n}\n","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.57\";\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 {Config, Flags, Args} from '@oclif/core'\nimport inquirer from 'inquirer'\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport {promisify} from 'util'\nimport {pipeline} from 'stream'\nimport {createWriteStream} from 'fs'\nimport {extract} from 'tar'\nimport ora from 'ora'\n\nimport {BaseCommand} from './base-command.js'\n\nconst streamPipeline = promisify(pipeline)\n\nconst theme = {\n primary: chalk.magenta,\n secondary: chalk.gray,\n tertiary: chalk.gray,\n error: chalk.red,\n command: chalk.blue,\n success: chalk.green,\n warning: chalk.yellow,\n divider: chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'),\n bottomPadding: '',\n}\n\ninterface CreateOptions {\n projectName: string\n agentFramework: AgentFramework\n}\n\ntype AgentFramework =\n | 'langgraph-py'\n | 'langgraph-js'\n | 'flows'\n | 'mastra'\n | 'pydantic-ai'\n | 'llamaindex'\n | 'agno'\n | 'ag2'\n | 'adk'\n | 'aws-strands-py'\n | 'a2a'\n | 'microsoft-agent-framework-dotnet'\n | 'microsoft-agent-framework-py'\n\nconst TEMPLATE_REPOS: Record<AgentFramework, string> = {\n 'langgraph-py': 'copilotkit/with-langgraph-python',\n 'langgraph-js': 'copilotkit/with-langgraph-js',\n mastra: 'copilotkit/with-mastra',\n flows: 'copilotkit/with-crewai-flows',\n llamaindex: 'copilotkit/with-llamaindex',\n agno: 'copilotkit/with-agno',\n 'pydantic-ai': 'copilotkit/with-pydantic-ai',\n ag2: 'ag2ai/ag2-copilotkit-starter',\n adk: 'copilotkit/with-adk',\n 'aws-strands-py': 'copilotkit/with-strands-python',\n a2a: 'copilotkit/with-a2a-middleware',\n 'microsoft-agent-framework-dotnet': 'copilotkit/with-microsoft-agent-framework-dotnet',\n 'microsoft-agent-framework-py': 'copilotkit/with-microsoft-agent-framework-python',\n}\n\nconst FRAMEWORK_DOCUMENTATION: Record<AgentFramework, string> = {\n 'langgraph-py': 'https://langchain-ai.github.io/langgraph/concepts/why-langgraph',\n 'langgraph-js': 'https://langchain-ai.github.io/langgraphjs',\n flows: 'https://docs.crewai.com/guides/flows/first-flow',\n mastra: 'https://mastra.ai/en/docs',\n 'pydantic-ai': 'https://ai.pydantic.dev/ag-ui/',\n llamaindex: 'https://docs.llamaindex.ai/en/stable',\n agno: 'https://docs.agno.com/',\n ag2: 'https://docs.ag2.ai/latest/docs/user-guide/basic-concepts/overview',\n adk: 'https://google.github.io/adk-docs/',\n 'aws-strands-py': 'https://strandsagents.com/latest/documentation/docs/',\n a2a: 'https://a2a-protocol.org/latest/',\n 'microsoft-agent-framework-dotnet': 'https://learn.microsoft.com/en-us/agent-framework/',\n 'microsoft-agent-framework-py': 'https://learn.microsoft.com/en-us/agent-framework/',\n}\n\nconst FRAMEWORK_EMOJI: Record<AgentFramework, string> = {\n 'langgraph-js': '🦜',\n 'langgraph-py': '🦜',\n flows: '👥',\n mastra: '🌑',\n 'pydantic-ai': '🔼',\n llamaindex: '🦙',\n ag2: '🤖',\n agno: '🅰️',\n adk: '🤖',\n a2a: '🤖',\n 'aws-strands-py': '🧬',\n 'microsoft-agent-framework-dotnet': '🟦',\n 'microsoft-agent-framework-py': '🟦',\n}\n\nconst KITE = `\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠙⣿⡛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠈⢿⡄⠀⠀⠀⠈⠉⠙⣻⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠈⢿⡄⠀⢀⣠⣴⠾⠋⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⢀⣀⣀⣀⣀⣤⣤⡾⢿⡟⠛⠉⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡛⠛⠛⠛⠉⠉⠉⠁⠀⢠⡿⣿⡀⠀⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⣰⡟⠀⠸⣧⠀⠀⠀⠀⢠⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⢀⣼⠏⠀⠀⠀⣿⡀⠀⠀⠀⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠂⣠⡿⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⣡⣾⣿⣄⠀⠀⠀⠀⠀⢸⡇⠀⠀⢰⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⡟⠛⡿⠋⣡⣾⣿⣿⣿⣿⣦⡀⠀⠀⠀⢸⡇⠀⠀⣿⣿⣿⣿\n⣿⣿⣿⣿⡿⠿⣿⠷⠂⡀⠘⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⢸⡇⠀⣼⣿⣿⣿⣿\n⣿⣿⠻⢿⡷⠀⠁⠴⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⣾⠇⣴⣿⣿⣿⣿⣿\n⡿⠛⠀⠀⢴⣾⣷⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣿⣾⣿⣿⣿⣿⣿⣿\n⣷⣾⣿⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n`\n\nexport default class Create extends BaseCommand {\n static description = 'Create a new CopilotKit project'\n\n static examples = [\n '$ copilotkit create my-app',\n '$ copilotkit create my-app --framework langgraph-js',\n '$ copilotkit create -n my-app -f langgraph-js',\n ]\n\n static flags = {\n ...BaseCommand.flags,\n framework: Flags.string({\n char: 'f',\n description: 'Agent framework to use',\n options: Object.keys(TEMPLATE_REPOS),\n required: false,\n }),\n name: Flags.string({\n char: 'n',\n description: 'Name of the project',\n required: false,\n }),\n 'no-banner': Flags.boolean({\n char: 'q',\n description: 'Removes the banner',\n default: false,\n required: false,\n }),\n project: Flags.string({\n description: 'project ID (deprecated, kept for backwards compatibility)',\n }),\n }\n\n static args = {\n projectName: Args.string({\n description: 'Name of the project',\n required: false,\n }),\n }\n\n constructor(argv: string[], config: Config) {\n super(argv, config)\n }\n\n async run() {\n const {args, flags} = await this.parse(Create)\n\n if (!flags['no-banner']) {\n this.log(theme.primary(KITE))\n this.log(theme.primary('~ Welcome to CopilotKit! ~\\n'))\n this.log(theme.divider)\n\n if ((!flags.name || flags.projectName) && !flags.framework) {\n this.log('\\n' + theme.secondary('Just a few questions to get started!\\n'))\n }\n }\n\n const projectNameInput = flags.name || args.projectName || (await this.promptProjectName())\n const projectName = projectNameInput.trim()\n const usingCurrentDir = projectName === '.' || projectName === './'\n const agentFramework = flags.framework || (await this.promptAgentFramework())\n\n const projectDir = usingCurrentDir ? process.cwd() : path.resolve(process.cwd(), projectName)\n\n if (usingCurrentDir) {\n const allowedEntries = new Set(['.git', '.gitignore', '.DS_Store'])\n const existingEntries = await fs.readdir(projectDir)\n const blockingEntries = existingEntries.filter((entry) => !allowedEntries.has(entry))\n\n if (blockingEntries.length > 0) {\n this.log(theme.error('\\nCurrent directory is not empty.'))\n this.log(theme.secondary('\\nPlease run create in an empty directory or specify a new project name.'))\n this.exit(1)\n }\n } else if (await fs.pathExists(projectDir)) {\n this.log(theme.error(`\\nDirectory \"${projectName}\" already exists.`))\n this.log(theme.secondary('\\nYou can:'))\n this.log(theme.secondary(' 1. Choose a different project name'))\n this.log(theme.secondary(' 2. Remove the existing directory manually if you want to use this name\\n'))\n this.exit(1)\n }\n\n const options: CreateOptions = {\n projectName,\n agentFramework: agentFramework as AgentFramework,\n }\n\n const spinner = ora({\n text: theme.secondary.bold('Creating your project...'),\n color: 'cyan',\n spinner: 'dots',\n }).start()\n\n try {\n await fs.ensureDir(projectDir)\n\n spinner.text = theme.secondary.bold('Downloading template...')\n await this.downloadTemplate(projectDir, options.agentFramework)\n\n const displayName = usingCurrentDir ? 'current directory' : `\"${projectName}\"`\n spinner.succeed(theme.secondary.bold(`Project ${displayName} created successfully!`))\n } catch (error: any) {\n spinner.fail(theme.error(`Failed to create project: ${error.message}`))\n this.exit(1)\n }\n\n this.log('\\n' + theme.divider)\n this.log(\n '\\n' +\n theme.secondary.bold(\n `🪁🤝${FRAMEWORK_EMOJI[options.agentFramework]} All set! \\n\\nYour project is ready to explore CopilotKit locally.`,\n ),\n )\n this.log('\\n' + theme.secondary('Next steps:'))\n if (usingCurrentDir) {\n this.log(theme.secondary(' • You are already inside your new project directory'))\n } else {\n this.log(theme.secondary(` • ${theme.command(`cd ${projectName}`)}`))\n }\n this.log(theme.secondary(' • Follow the setup instructions in the README.md'))\n this.log('\\n' + theme.secondary('Documentation:'))\n this.log(theme.secondary(' • ') + theme.command('https://docs.copilotkit.ai'))\n this.log(theme.secondary(' • ') + theme.command(FRAMEWORK_DOCUMENTATION[options.agentFramework]))\n this.log(theme.bottomPadding)\n }\n\n private async promptProjectName(): Promise<string> {\n const {projectName} = await inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: theme.secondary('What is your project named?'),\n validate: (input: string) => {\n if (!input) return theme.error('Project name is required')\n if (!/^[a-z0-9-]+$/.test(input)) {\n return theme.error('Project name can only contain lowercase letters, numbers, and hyphens')\n }\n if (input.length > 30) {\n return theme.error('Project name must be less than 30 characters')\n }\n return true\n },\n },\n ])\n return projectName\n }\n\n private async promptAgentFramework(): Promise<string> {\n const {framework} = await inquirer.prompt([\n {\n type: 'list',\n name: 'framework',\n message: theme.secondary('Which agent framework would you like to use?'),\n choices: [\n {name: `${FRAMEWORK_EMOJI['langgraph-py']} LangGraph (Python)`, value: 'langgraph-py'},\n {name: `${FRAMEWORK_EMOJI['langgraph-js']} LangGraph (JavaScript)`, value: 'langgraph-js'},\n {name: `${FRAMEWORK_EMOJI.mastra} Mastra`, value: 'mastra'},\n {name: `${FRAMEWORK_EMOJI['pydantic-ai']} Pydantic AI`, value: 'pydantic-ai'},\n {name: `${FRAMEWORK_EMOJI['aws-strands-py']} AWS Strands (Python)`, value: 'aws-strands-py'},\n {name: `${FRAMEWORK_EMOJI.adk} ADK`, value: 'adk'},\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-dotnet']} Microsoft Agent Framework (.NET)`,\n value: 'microsoft-agent-framework-dotnet',\n },\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-py']} Microsoft Agent Framework (Python)`,\n value: 'microsoft-agent-framework-py',\n },\n {name: `${FRAMEWORK_EMOJI.flows} CrewAI Flows`, value: 'flows'},\n {name: `${FRAMEWORK_EMOJI.llamaindex} LlamaIndex`, value: 'llamaindex'},\n {name: `${FRAMEWORK_EMOJI.agno} Agno`, value: 'agno'},\n {name: `${FRAMEWORK_EMOJI.ag2} AG2`, value: 'ag2'},\n {name: `${FRAMEWORK_EMOJI.a2a} A2A`, value: 'a2a'},\n ],\n },\n ])\n return framework\n }\n\n private async downloadTemplate(projectDir: string, framework: AgentFramework): Promise<void> {\n const repo = TEMPLATE_REPOS[framework]\n const url = `https://github.com/${repo}/archive/refs/heads/main.tar.gz`\n\n try {\n const response = await fetch(url)\n if (!response.ok) throw new Error(`Failed to download template: ${response.statusText}`)\n\n const tempFile = path.join(projectDir, 'template.tar.gz')\n const fileStream = createWriteStream(tempFile)\n\n if (!response.body) throw new Error('Failed to get response body')\n await streamPipeline(response.body as any, fileStream)\n\n await extract({\n file: tempFile,\n cwd: projectDir,\n strip: 1,\n })\n\n await fs.remove(tempFile)\n } catch (error: any) {\n throw new Error(`Failed to download template: ${error.message}`)\n }\n }\n}\n","import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n// NEW: Deployment choice options for Branch B\nexport const DEPLOYMENT_CHOICES = ['Copilot Cloud', 'Self-hosted'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n// NEW: Deployment choice schema for Branch B\nexport const DeploymentChoiceSchema = z.enum(DEPLOYMENT_CHOICES)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n // DEPRECATED: useCopilotCloud - consolidated with signupForCopilotCloud\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n\n // NEW: A/B/C test fields\n deploymentChoice: DeploymentChoiceSchema.optional(), // For branch B only (Cloud vs Self-hosted)\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n // NEW: A/B/C test flags\n 'deployment-choice': Flags.string({\n description: 'Choose between Copilot Cloud or Self-hosted deployment',\n options: DEPLOYMENT_CHOICES,\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n"],"mappings":"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","names":["Flags","chalk","chalk","Flags","Flags","Flags"]}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/init.ts","../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/utils/trpc.ts","../../src/commands/create.ts","../../src/lib/init/types/questions.ts","../../src/lib/init/utils.ts"],"sourcesContent":["import {Config, Flags} from '@oclif/core'\n\nimport {BaseCommand} from './base-command.js'\nimport Create from './create.js'\nimport {ConfigFlags} from '../lib/init/types/questions.js'\n\nexport default class CloudInit extends BaseCommand {\n static override description = 'Set up CopilotKit in your Next.js project, or create a new project if none exists'\n\n static override examples = ['<%= config.bin %> init', '<%= config.bin %> init --dir ./my-app']\n\n static override flags = {\n ...BaseCommand.flags,\n ...ConfigFlags,\n runtimeUrl: Flags.string({description: 'runtime URL'}),\n project: Flags.string({description: 'project ID (can be found in the Copilot Cloud dashboard)'}),\n dir: Flags.string({description: 'directory of the Next.js project', default: '.'}),\n }\n\n constructor(argv: string[], config: Config) {\n super(argv, config)\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(CloudInit)\n this.log('`copilotkit init` now routes to `copilotkit create`.')\n\n const createCommand = new Create([], this.config)\n await createCommand.run()\n }\n}\n","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.58\";\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 {Config, Flags, Args} from '@oclif/core'\nimport inquirer from 'inquirer'\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport {promisify} from 'util'\nimport {pipeline} from 'stream'\nimport {createWriteStream} from 'fs'\nimport {extract} from 'tar'\nimport ora from 'ora'\n\nimport {BaseCommand} from './base-command.js'\n\nconst streamPipeline = promisify(pipeline)\n\nconst theme = {\n primary: chalk.magenta,\n secondary: chalk.gray,\n tertiary: chalk.gray,\n error: chalk.red,\n command: chalk.blue,\n success: chalk.green,\n warning: chalk.yellow,\n divider: chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'),\n bottomPadding: '',\n}\n\ninterface CreateOptions {\n projectName: string\n agentFramework: AgentFramework\n}\n\ntype AgentFramework =\n | 'langgraph-py'\n | 'langgraph-js'\n | 'flows'\n | 'mastra'\n | 'pydantic-ai'\n | 'llamaindex'\n | 'agno'\n | 'ag2'\n | 'adk'\n | 'aws-strands-py'\n | 'a2a'\n | 'microsoft-agent-framework-dotnet'\n | 'microsoft-agent-framework-py'\n | 'mcp-apps'\n\nconst TEMPLATE_REPOS: Record<AgentFramework, string> = {\n 'langgraph-py': 'copilotkit/with-langgraph-python',\n 'langgraph-js': 'copilotkit/with-langgraph-js',\n mastra: 'copilotkit/with-mastra',\n flows: 'copilotkit/with-crewai-flows',\n llamaindex: 'copilotkit/with-llamaindex',\n agno: 'copilotkit/with-agno',\n 'pydantic-ai': 'copilotkit/with-pydantic-ai',\n ag2: 'ag2ai/ag2-copilotkit-starter',\n adk: 'copilotkit/with-adk',\n 'aws-strands-py': 'copilotkit/with-strands-python',\n a2a: 'copilotkit/with-a2a-middleware',\n 'microsoft-agent-framework-dotnet': 'copilotkit/with-microsoft-agent-framework-dotnet',\n 'microsoft-agent-framework-py': 'copilotkit/with-microsoft-agent-framework-python',\n 'mcp-apps': 'copilotkit/with-mcp-apps',\n}\n\nconst FRAMEWORK_DOCUMENTATION: Record<AgentFramework, string> = {\n 'langgraph-py': 'https://langchain-ai.github.io/langgraph/concepts/why-langgraph',\n 'langgraph-js': 'https://langchain-ai.github.io/langgraphjs',\n flows: 'https://docs.crewai.com/guides/flows/first-flow',\n mastra: 'https://mastra.ai/en/docs',\n 'pydantic-ai': 'https://ai.pydantic.dev/ag-ui/',\n llamaindex: 'https://docs.llamaindex.ai/en/stable',\n agno: 'https://docs.agno.com/',\n ag2: 'https://docs.ag2.ai/latest/docs/user-guide/basic-concepts/overview',\n adk: 'https://google.github.io/adk-docs/',\n 'aws-strands-py': 'https://strandsagents.com/latest/documentation/docs/',\n a2a: 'https://a2a-protocol.org/latest/',\n 'microsoft-agent-framework-dotnet': 'https://learn.microsoft.com/en-us/agent-framework/',\n 'microsoft-agent-framework-py': 'https://learn.microsoft.com/en-us/agent-framework/',\n 'mcp-apps': 'https://modelcontextprotocol.github.io/ext-apps',\n}\n\nconst FRAMEWORK_EMOJI: Record<AgentFramework, string> = {\n 'langgraph-js': '🦜',\n 'langgraph-py': '🦜',\n flows: '👥',\n mastra: '🌑',\n 'pydantic-ai': '🔼',\n llamaindex: '🦙',\n ag2: '🤖',\n agno: '🅰️',\n adk: '🤖',\n a2a: '🤖',\n 'aws-strands-py': '🧬',\n 'microsoft-agent-framework-dotnet': '🟦',\n 'microsoft-agent-framework-py': '🟦',\n 'mcp-apps': '♍',\n}\n\nconst KITE = `\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠙⣿⡛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠈⢿⡄⠀⠀⠀⠈⠉⠙⣻⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠈⢿⡄⠀⢀⣠⣴⠾⠋⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⢀⣀⣀⣀⣀⣤⣤⡾⢿⡟⠛⠉⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡛⠛⠛⠛⠉⠉⠉⠁⠀⢠⡿⣿⡀⠀⠀⠀⠀⠀⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⣰⡟⠀⠸⣧⠀⠀⠀⠀⢠⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⢀⣼⠏⠀⠀⠀⣿⡀⠀⠀⠀⢸⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠂⣠⡿⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⣡⣾⣿⣄⠀⠀⠀⠀⠀⢸⡇⠀⠀⢰⣿⣿⣿\n⣿⣿⣿⣿⣿⣿⣿⡟⠛⡿⠋⣡⣾⣿⣿⣿⣿⣦⡀⠀⠀⠀⢸⡇⠀⠀⣿⣿⣿⣿\n⣿⣿⣿⣿⡿⠿⣿⠷⠂⡀⠘⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⢸⡇⠀⣼⣿⣿⣿⣿\n⣿⣿⠻⢿⡷⠀⠁⠴⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⣾⠇⣴⣿⣿⣿⣿⣿\n⡿⠛⠀⠀⢴⣾⣷⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣿⣾⣿⣿⣿⣿⣿⣿\n⣷⣾⣿⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n`\n\nexport default class Create extends BaseCommand {\n static description = 'Create a new CopilotKit project'\n\n static examples = [\n '$ copilotkit create my-app',\n '$ copilotkit create my-app --framework langgraph-js',\n '$ copilotkit create -n my-app -f langgraph-js',\n ]\n\n static flags = {\n ...BaseCommand.flags,\n framework: Flags.string({\n char: 'f',\n description: 'Agent framework to use',\n options: Object.keys(TEMPLATE_REPOS),\n required: false,\n }),\n name: Flags.string({\n char: 'n',\n description: 'Name of the project',\n required: false,\n }),\n 'no-banner': Flags.boolean({\n char: 'q',\n description: 'Removes the banner',\n default: false,\n required: false,\n }),\n project: Flags.string({\n description: 'project ID (deprecated, kept for backwards compatibility)',\n }),\n }\n\n static args = {\n projectName: Args.string({\n description: 'Name of the project',\n required: false,\n }),\n }\n\n constructor(argv: string[], config: Config) {\n super(argv, config)\n }\n\n async run() {\n const {args, flags} = await this.parse(Create)\n\n if (!flags['no-banner']) {\n this.log(theme.primary(KITE))\n this.log(theme.primary('~ Welcome to CopilotKit! ~\\n'))\n this.log(theme.divider)\n\n if ((!flags.name || flags.projectName) && !flags.framework) {\n this.log('\\n' + theme.secondary('Just a few questions to get started!\\n'))\n }\n }\n\n const projectNameInput = flags.name || args.projectName || (await this.promptProjectName())\n const projectName = projectNameInput.trim()\n const usingCurrentDir = projectName === '.' || projectName === './'\n const agentFramework = flags.framework || (await this.promptAgentFramework())\n\n const projectDir = usingCurrentDir ? process.cwd() : path.resolve(process.cwd(), projectName)\n\n if (usingCurrentDir) {\n const allowedEntries = new Set(['.git', '.gitignore', '.DS_Store'])\n const existingEntries = await fs.readdir(projectDir)\n const blockingEntries = existingEntries.filter((entry) => !allowedEntries.has(entry))\n\n if (blockingEntries.length > 0) {\n this.log(theme.error('\\nCurrent directory is not empty.'))\n this.log(theme.secondary('\\nPlease run create in an empty directory or specify a new project name.'))\n this.exit(1)\n }\n } else if (await fs.pathExists(projectDir)) {\n this.log(theme.error(`\\nDirectory \"${projectName}\" already exists.`))\n this.log(theme.secondary('\\nYou can:'))\n this.log(theme.secondary(' 1. Choose a different project name'))\n this.log(theme.secondary(' 2. Remove the existing directory manually if you want to use this name\\n'))\n this.exit(1)\n }\n\n const options: CreateOptions = {\n projectName,\n agentFramework: agentFramework as AgentFramework,\n }\n\n const spinner = ora({\n text: theme.secondary.bold('Creating your project...'),\n color: 'cyan',\n spinner: 'dots',\n }).start()\n\n try {\n await fs.ensureDir(projectDir)\n\n spinner.text = theme.secondary.bold('Downloading template...')\n await this.downloadTemplate(projectDir, options.agentFramework)\n\n const displayName = usingCurrentDir ? 'current directory' : `\"${projectName}\"`\n spinner.succeed(theme.secondary.bold(`Project ${displayName} created successfully!`))\n } catch (error: any) {\n spinner.fail(theme.error(`Failed to create project: ${error.message}`))\n this.exit(1)\n }\n\n this.log('\\n' + theme.divider)\n this.log(\n '\\n' +\n theme.secondary.bold(\n `🪁🤝${FRAMEWORK_EMOJI[options.agentFramework]} All set! \\n\\nYour project is ready to explore CopilotKit locally.`,\n ),\n )\n this.log('\\n' + theme.secondary('Next steps:'))\n if (usingCurrentDir) {\n this.log(theme.secondary(' • You are already inside your new project directory'))\n } else {\n this.log(theme.secondary(` • ${theme.command(`cd ${projectName}`)}`))\n }\n this.log(theme.secondary(' • Follow the setup instructions in the README.md'))\n this.log('\\n' + theme.secondary('Documentation:'))\n this.log(theme.secondary(' • ') + theme.command('https://docs.copilotkit.ai'))\n this.log(theme.secondary(' • ') + theme.command(FRAMEWORK_DOCUMENTATION[options.agentFramework]))\n this.log(theme.bottomPadding)\n }\n\n private async promptProjectName(): Promise<string> {\n const {projectName} = await inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: theme.secondary('What is your project named?'),\n validate: (input: string) => {\n if (!input) return theme.error('Project name is required')\n if (!/^[a-z0-9-]+$/.test(input)) {\n return theme.error('Project name can only contain lowercase letters, numbers, and hyphens')\n }\n if (input.length > 30) {\n return theme.error('Project name must be less than 30 characters')\n }\n return true\n },\n },\n ])\n return projectName\n }\n\n private async promptAgentFramework(): Promise<string> {\n const {framework} = await inquirer.prompt([\n {\n type: 'list',\n name: 'framework',\n message: theme.secondary('Which agent framework would you like to use?'),\n choices: [\n {name: `${FRAMEWORK_EMOJI['langgraph-py']} LangGraph (Python)`, value: 'langgraph-py'},\n {name: `${FRAMEWORK_EMOJI['langgraph-js']} LangGraph (JavaScript)`, value: 'langgraph-js'},\n {name: `${FRAMEWORK_EMOJI.mastra} Mastra`, value: 'mastra'},\n {name: `${FRAMEWORK_EMOJI['pydantic-ai']} Pydantic AI`, value: 'pydantic-ai'},\n {name: `${FRAMEWORK_EMOJI['aws-strands-py']} AWS Strands (Python)`, value: 'aws-strands-py'},\n {name: `${FRAMEWORK_EMOJI.adk} ADK`, value: 'adk'},\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-dotnet']} Microsoft Agent Framework (.NET)`,\n value: 'microsoft-agent-framework-dotnet',\n },\n {\n name: `${FRAMEWORK_EMOJI['microsoft-agent-framework-py']} Microsoft Agent Framework (Python)`,\n value: 'microsoft-agent-framework-py',\n },\n {name: `${FRAMEWORK_EMOJI['mcp-apps']} MCP Apps`, value: 'mcp-apps'},\n {name: `${FRAMEWORK_EMOJI.flows} CrewAI Flows`, value: 'flows'},\n {name: `${FRAMEWORK_EMOJI.llamaindex} LlamaIndex`, value: 'llamaindex'},\n {name: `${FRAMEWORK_EMOJI.agno} Agno`, value: 'agno'},\n {name: `${FRAMEWORK_EMOJI.ag2} AG2`, value: 'ag2'},\n {name: `${FRAMEWORK_EMOJI.a2a} A2A`, value: 'a2a'},\n ],\n },\n ])\n return framework\n }\n\n private async downloadTemplate(projectDir: string, framework: AgentFramework): Promise<void> {\n const repo = TEMPLATE_REPOS[framework]\n const url = `https://github.com/${repo}/archive/refs/heads/main.tar.gz`\n\n try {\n const response = await fetch(url)\n if (!response.ok) throw new Error(`Failed to download template: ${response.statusText}`)\n\n const tempFile = path.join(projectDir, 'template.tar.gz')\n const fileStream = createWriteStream(tempFile)\n\n if (!response.body) throw new Error('Failed to get response body')\n await streamPipeline(response.body as any, fileStream)\n\n await extract({\n file: tempFile,\n cwd: projectDir,\n strip: 1,\n })\n\n await fs.remove(tempFile)\n } catch (error: any) {\n throw new Error(`Failed to download template: ${error.message}`)\n }\n }\n}\n","import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n// NEW: Deployment choice options for Branch B\nexport const DEPLOYMENT_CHOICES = ['Copilot Cloud', 'Self-hosted'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n// NEW: Deployment choice schema for Branch B\nexport const DeploymentChoiceSchema = z.enum(DEPLOYMENT_CHOICES)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n // DEPRECATED: useCopilotCloud - consolidated with signupForCopilotCloud\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n\n // NEW: A/B/C test fields\n deploymentChoice: DeploymentChoiceSchema.optional(), // For branch B only (Cloud vs Self-hosted)\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n // NEW: A/B/C test flags\n 'deployment-choice': Flags.string({\n description: 'Choose between Copilot Cloud or Self-hosted deployment',\n options: DEPLOYMENT_CHOICES,\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n"],"mappings":"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","names":["Flags","chalk","chalk","Flags","Flags","Flags"]}
|
package/dist/commands/login.js
CHANGED
|
@@ -278,7 +278,7 @@ import { Command } from "@oclif/core";
|
|
|
278
278
|
import Sentry, { consoleIntegration } from "@sentry/node";
|
|
279
279
|
|
|
280
280
|
// src/utils/version.ts
|
|
281
|
-
var LIB_VERSION = "0.0.
|
|
281
|
+
var LIB_VERSION = "0.0.58";
|
|
282
282
|
|
|
283
283
|
// src/commands/base-command.ts
|
|
284
284
|
import chalk2 from "chalk";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/auth.service.ts","../../src/utils/trpc.ts","../../src/services/analytics.service.ts","../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/commands/login.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 = 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(cmd: Command, context?: 'cloud-features' | 'general'): 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: '🪁 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(chalk.cyan('\\n🚀 Setting up Copilot Cloud authentication...\\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(chalk.yellow('Your authentication has expired. Re-authenticating...'))\n try {\n const loginResult = await this.login({exitAfterLogin: false})\n return loginResult\n } catch (loginError) {\n cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login'))\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({exitAfterLogin}: {exitAfterLogin?: boolean} = {exitAfterLogin: true}): 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) => {\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 analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\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 if (state !== req.query.state) {\n res.status(401).json({message: 'Invalid state'})\n spinner.fail('Invalid state')\n return\n }\n\n this.config.set('cliToken', cliToken)\n res.status(200).json({message: 'Callback called'})\n spinner.succeed(`🪁 Successfully logged in as ${chalk.hex('#7553fc')(user.email)}`)\n if (exitAfterLogin) {\n process.exit(0)\n } else {\n server.close()\n resolve({cliToken, user, organization})\n }\n })\n\n open(`${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`)\n })\n }\n}\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 = 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 = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = 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(flagKey, distinctId)\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","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.57\";\n","import {Config} from '@oclif/core'\n\nimport {AuthService} from '../services/auth.service.js'\nimport {BaseCommand} from './base-command.js'\n\nexport default class CloudLogin extends BaseCommand {\n static override description = 'Login to Copilot Cloud'\n\n static override examples = ['<%= config.bin %> login']\n\n constructor(\n argv: string[],\n config: Config,\n private authService = new AuthService(),\n ) {\n super(argv, config)\n }\n\n public async run(): Promise<void> {\n await this.parse(CloudLogin)\n\n try {\n await this.authService.login()\n } catch (error: unknown) {\n this.gracefulError((error as Error).message)\n }\n }\n}\n"],"mappings":";AACA,OAAOA,WAAU;AACjB,OAAO,UAAU;AACjB,OAAO,aAAa;AACpB,OAAOC,aAAY;AACnB,OAAO,UAAU;AACjB,OAAO,aAAa;AACpB,OAAO,SAAS;AAChB,OAAO,WAAW;AAClB,OAAO,cAAc;;;ACTrB,SAAQ,oBAAoB,YAAY,qBAAoB;AAC5D,OAAO,eAAe;AAEf,IAAM,yBAAyB,QAAQ,IAAI,0BAA0B;AAErE,SAAS,iBAAiB,UAAuB;AACtD,SAAO,WAAW;AAAA,IAChB,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,KAAK,GAAG,sBAAsB;AAAA,QAC9B,aAAa;AAAA,QACb,SAAS,MAAM;AACb,iBAAO;AAAA,YACL,iBAAiB;AAAA,YACjB,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;ACpBA,SAAQ,iBAAgB;AACxB,SAAQ,eAAc;AAEtB,OAAO,UAAU;AAEV,IAAM,mBAAN,MAAuB;AAAA,EAS5B,YACmB,UAKjB;AALiB;AAMjB,QAAI,QAAQ,IAAI,qBAAqB,QAAQ;AAC3C;AAAA,IACF;AAEA,UAAM,kBAAkB,QAAQ,IAAI,qBAAqB;AAEzD,SAAK,mBAAmB;AAAA,MACtB,SAAS;AAAA,IACX;AAEA,QAAI,KAAK,UAAU,QAAQ;AACzB,WAAK,SAAS,KAAK,SAAS;AAAA,IAC9B;AAEA,QAAI,KAAK,UAAU,OAAO;AACxB,WAAK,QAAQ,KAAK,SAAS;AAC3B,WAAK,iBAAiB,QAAQ,KAAK,SAAS;AAAA,IAC9C;AAEA,QAAI,KAAK,UAAU,gBAAgB;AACjC,WAAK,iBAAiB,KAAK,SAAS;AAAA,IACtC;AAEA,SAAK,UAAU,IAAI,UAAU;AAAA,MAC3B,UAAU;AAAA,MACV,SAAS,QAAQ,IAAI,oBAAoB;AAAA,IAC3C,CAAC;AAGD,QAAI,QAAQ,IAAI,qBAAqB,QAAQ;AAC3C,YAAM,aAAa,QAAQ,IAAI,eAAe;AAC9C,YAAM,cAAc,QAAQ,IAAI,gBAAgB;AAEhD,WAAK,UAAU,IAAI,QAAQ,YAAY;AAAA,QACrC,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,UAAM,SAAS,IAAI,KAAK,EAAC,aAAa,gBAAe,CAAC;AACtD,QAAI,CAAC,OAAO,IAAI,aAAa,GAAG;AAC9B,aAAO,IAAI,eAAe,OAAO,WAAW,CAAC;AAAA,IAC/C;AAAA,EACF;AAAA,EAzDQ;AAAA,EACA;AAAA,EACA,mBAAwC,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,IAAI,KAAK,EAAC,aAAa,gBAAe,CAAC;AAAA,EAqDhD,iBAAyB;AAC/B,UAAM,cAAc,KAAK,OAAO,IAAI,aAAa;AACjD,QAAI,CAAC,aAAa;AAChB,YAAMC,eAAc,OAAO,WAAW;AACtC,WAAK,OAAO,IAAI,eAAeA,YAAW;AAC1C,aAAOA;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,MACL,OAIe;AACf,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,UAAM,UAAU;AAAA,MACd,QAAQ,KAAK,SAAS,KAAK,SAAS;AAAA,MACpC,OAAO,KAAK,QAAQ,KAAK,QAAQ;AAAA,MACjC,aAAa,KAAK,eAAe;AAAA,MACjC,OAAO,MAAM;AAAA,MACb,YAAY;AAAA,QACV,GAAG,KAAK;AAAA,QACR,GAAG,MAAM;AAAA,QACT,SAAS,KAAK,iBACV;AAAA,UACE,eAAe,KAAK;AAAA,QACtB,IACA;AAAA,QACJ,iBAAiB;AAAA,UACf,GAAG,MAAM;AAAA,UACT,GAAG,KAAK;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,QAAS,MAAM,SAAS,CAAC,QAAQ;AACpC,YAAI,KAAK;AAEP,kBAAQ;AAAA,QACV;AAEA,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,iBAAiB,SAAmC;AAC/D,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO;AAAA,IACT;AAEA,QAAI;AAEF,YAAM,aAAa,KAAK,UAAU,KAAK,eAAe;AACtD,YAAM,OAAO,MAAM,KAAK,QAAQ,iBAAiB,SAAS,UAAU;AACpE,aAAO,QAAQ,IAAI;AAAA,IACrB,SAAS,OAAO;AAEd,cAAQ,KAAK,gCAAgC,OAAO,KAAK,KAAK;AAC9D,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,sBAAsB,SAA+B;AAChE,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO;AAAA,IACT;AAEA,QAAI;AAEF,YAAM,aAAa,KAAK,UAAU,KAAK,eAAe;AACtD,YAAM,UAAU,MAAM,KAAK,QAAQ,sBAAsB,SAAS,UAAU;AAC5E,aAAO;AAAA,IACT,SAAS,OAAO;AAEd,cAAQ,KAAK,sCAAsC,OAAO,KAAK,KAAK;AACpE,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,WAA0B;AACrC,QAAI,KAAK,SAAS;AAChB,YAAM,KAAK,QAAQ,SAAS;AAAA,IAC9B;AAAA,EACF;AACF;;;AF5IO,IAAM,cAAN,MAAkB;AAAA,EACN,SAAS,IAAIC,MAAK,EAAC,aAAa,gBAAe,CAAC;AAAA,EAChD,yBAAyB,QAAQ,IAAI,0BAA0B;AAAA,EAEhF,WAA+B;AAC7B,WAAO,KAAK,OAAO,IAAI,UAAU;AAAA,EACnC;AAAA,EAEA,cAAkC;AAChC,UAAM,WAAW,KAAK,OAAO,IAAI,UAAU;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,KAAiC;AAC5C,SAAK,OAAO,OAAO,UAAU;AAAA,EAC/B;AAAA,EAEA,MAAM,aAAa,KAAc,SAAgE;AAC/F,QAAI,WAAW,KAAK,YAAY;AAEhC,QAAI,CAAC,UAAU;AACb,UAAI;AACF,YAAI,cAAc;AAIlB,YAAI,YAAY,kBAAkB;AAChC,gBAAM,WAAW,MAAM,SAAS,OAAO;AAAA,YACrC;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,SAAS;AAAA,cACT,SAAS;AAAA,YACX;AAAA,UACF,CAAC;AACD,wBAAc,SAAS;AAAA,QACzB;AAEA,YAAI,aAAa;AAEf,cAAI,YAAY,kBAAkB;AAChC,gBAAI,IAAI,MAAM,KAAK,0DAAmD,CAAC;AAAA,UACzE;AACA,gBAAM,cAAc,MAAM,KAAK,MAAM,EAAC,gBAAgB,MAAK,CAAC;AAC5D,qBAAW,YAAY;AACvB,iBAAO;AAAA,QACT,OAAO;AACL,cAAI,MAAM,qCAAqC;AAAA,QACjD;AAAA,MACF,SAAS,OAAO;AACd,YAAI,iBAAiB,SAAS,MAAM,SAAS,mBAAmB;AAC9D,cAAI,MAAM,MAAM,OAAO,4BAA4B,CAAC;AAAA,QACtD;AAEA,cAAM;AAAA,MACR;AAAA,IACF;AAEA,QAAI;AAEJ,UAAMC,cAAa,iBAAiB,QAAQ;AAC5C,QAAI;AACF,WAAK,MAAMA,YAAW,GAAG,MAAM;AAAA,IACjC,SAAS,OAAO;AAEd,UAAI,IAAI,MAAM,OAAO,uDAAuD,CAAC;AAC7E,UAAI;AACF,cAAM,cAAc,MAAM,KAAK,MAAM,EAAC,gBAAgB,MAAK,CAAC;AAC5D,eAAO;AAAA,MACT,SAAS,YAAY;AACnB,YAAI,IAAI,MAAM,IAAI,oFAAoF,CAAC;AACvG,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,MAAM;AAChC,UAAI,MAAM,qCAAqC;AAAA,IACjD;AAEA,WAAO,EAAC,UAAU,MAAM,GAAG,MAAM,cAAc,GAAG,aAAY;AAAA,EAChE;AAAA,EAEA,MAAM,MAAM,EAAC,eAAc,IAAgC,EAAC,gBAAgB,KAAI,GAA2B;AACzG,UAAM,UAAU,IAAI,iDAA0C,EAAE,MAAM;AACtE,QAAI;AACJ,gBAAY,IAAI,iBAAiB;AAEjC,UAAM,MAAM,QAAQ;AACpB,QAAI,IAAI,KAAK,CAAC;AACd,QAAI,IAAI,QAAQ,WAAW,EAAC,UAAU,KAAI,CAAC,CAAC;AAC5C,QAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,UAAM,OAAO,MAAM,QAAQ;AAC3B,UAAM,QAAQC,QAAO,YAAY,EAAE,EAAE,SAAS,KAAK;AAEnD,WAAO,IAAI,QAAQ,OAAO,YAAY;AACpC,YAAM,SAAS,IAAI,OAAO,MAAM,MAAM;AAAA,MAAC,CAAC;AAExC,YAAM,UAAU,MAAM;AAAA,QACpB,OAAO;AAAA,QACP,YAAY,CAAC;AAAA,MACf,CAAC;AAED,cAAQ,OAAO;AAEf,UAAI,KAAK,aAAa,OAAO,KAAK,QAAQ;AACxC,cAAM,EAAC,UAAU,MAAM,aAAY,IAAI,IAAI;AAE3C,oBAAY,IAAI,iBAAiB,EAAC,QAAQ,KAAK,IAAI,gBAAgB,aAAa,IAAI,OAAO,KAAK,MAAK,CAAC;AACtG,cAAM,UAAU,MAAM;AAAA,UACpB,OAAO;AAAA,UACP,YAAY;AAAA,YACV,gBAAgB,aAAa;AAAA,YAC7B,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,UACd;AAAA,QACF,CAAC;AAED,YAAI,UAAU,IAAI,MAAM,OAAO;AAC7B,cAAI,OAAO,GAAG,EAAE,KAAK,EAAC,SAAS,gBAAe,CAAC;AAC/C,kBAAQ,KAAK,eAAe;AAC5B;AAAA,QACF;AAEA,aAAK,OAAO,IAAI,YAAY,QAAQ;AACpC,YAAI,OAAO,GAAG,EAAE,KAAK,EAAC,SAAS,kBAAiB,CAAC;AACjD,gBAAQ,QAAQ,uCAAgC,MAAM,IAAI,SAAS,EAAE,KAAK,KAAK,CAAC,EAAE;AAClF,YAAI,gBAAgB;AAClB,kBAAQ,KAAK,CAAC;AAAA,QAChB,OAAO;AACL,iBAAO,MAAM;AACb,kBAAQ,EAAC,UAAU,MAAM,aAAY,CAAC;AAAA,QACxC;AAAA,MACF,CAAC;AAED,WAAK,GAAG,KAAK,sBAAsB,0CAA0C,IAAI,mBAAmB,KAAK,EAAE;AAAA,IAC7G,CAAC;AAAA,EACH;AACF;;;AGpKA,SAAQ,eAAc;AACtB,OAAO,UAAS,0BAAyB;;;ACAlC,IAAM,cAAc;;;ADG3B,OAAOC,YAAW;AAEX,IAAM,cAAN,cAA0B,QAAQ;AAAA,EACvC,MAAM,OAAO;AACX,UAAM,KAAK,gBAAgB;AAE3B,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,MACV,KACE,QAAQ,IAAI,cACZ;AAAA,MACF,cAAc,CAAC,mBAAmB,CAAC;AAAA;AAAA,MAEnC,kBAAkB;AAAA;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,KAAU;AACpB,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C,aAAO,iBAAiB,GAAG;AAAA,IAC7B;AAEA,UAAM,UAAU,KAAK,WAAW;AAEhC,SAAK,IAAI,OAAOA,OAAM,IAAI,OAAO,IAAI,IAAI;AAEzC,UAAM,WAAW,KAAK,OAAO,QAAQ;AACrC,SAAK,KAAK,QAAQ;AAAA,EACpB;AAAA,EAEA,MAAM,UAAU;AACd,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C;AAAA,IACF;AAEA,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,MAAM,MAAM;AAAA,EAAC;AAAA,EAEb,MAAM,kBAAkB;AACtB,UAAM,WAAW,MAAM,MAAM,GAAG,sBAAsB,cAAc;AAEpE,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,eAAe,KAAK;AAE1B,QAAI,CAAC,gBAAgB,iBAAiB,aAAa;AACjD;AAAA,IACF;AAAA,EAWF;AAAA,EAEA,MAAM,cAAc,SAAiB;AACnC,SAAK,IAAI,OAAOA,OAAM,IAAI,OAAO,CAAC;AAClC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;AEnEA,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAKlD,YACE,MACA,QACQ,cAAc,IAAI,YAAY,GACtC;AACA,UAAM,MAAM,MAAM;AAFV;AAAA,EAGV;AAAA,EAVA,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW,CAAC,yBAAyB;AAAA,EAUrD,MAAa,MAAqB;AAChC,UAAM,KAAK,MAAM,WAAU;AAE3B,QAAI;AACF,YAAM,KAAK,YAAY,MAAM;AAAA,IAC/B,SAAS,OAAgB;AACvB,WAAK,cAAe,MAAgB,OAAO;AAAA,IAC7C;AAAA,EACF;AACF;","names":["Conf","crypto","anonymousId","Conf","trpcClient","crypto","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../../src/services/auth.service.ts","../../src/utils/trpc.ts","../../src/services/analytics.service.ts","../../src/commands/base-command.ts","../../src/utils/version.ts","../../src/commands/login.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 = 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(cmd: Command, context?: 'cloud-features' | 'general'): 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: '🪁 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(chalk.cyan('\\n🚀 Setting up Copilot Cloud authentication...\\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(chalk.yellow('Your authentication has expired. Re-authenticating...'))\n try {\n const loginResult = await this.login({exitAfterLogin: false})\n return loginResult\n } catch (loginError) {\n cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login'))\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({exitAfterLogin}: {exitAfterLogin?: boolean} = {exitAfterLogin: true}): 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) => {\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 analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\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 if (state !== req.query.state) {\n res.status(401).json({message: 'Invalid state'})\n spinner.fail('Invalid state')\n return\n }\n\n this.config.set('cliToken', cliToken)\n res.status(200).json({message: 'Callback called'})\n spinner.succeed(`🪁 Successfully logged in as ${chalk.hex('#7553fc')(user.email)}`)\n if (exitAfterLogin) {\n process.exit(0)\n } else {\n server.close()\n resolve({cliToken, user, organization})\n }\n })\n\n open(`${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`)\n })\n }\n}\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 = 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 = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = 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(flagKey, distinctId)\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","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.58\";\n","import {Config} from '@oclif/core'\n\nimport {AuthService} from '../services/auth.service.js'\nimport {BaseCommand} from './base-command.js'\n\nexport default class CloudLogin extends BaseCommand {\n static override description = 'Login to Copilot Cloud'\n\n static override examples = ['<%= config.bin %> login']\n\n constructor(\n argv: string[],\n config: Config,\n private authService = new AuthService(),\n ) {\n super(argv, config)\n }\n\n public async run(): Promise<void> {\n await this.parse(CloudLogin)\n\n try {\n await this.authService.login()\n } catch (error: unknown) {\n this.gracefulError((error as Error).message)\n }\n }\n}\n"],"mappings":"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","names":["Conf","crypto","anonymousId","Conf","trpcClient","crypto","chalk"]}
|
package/dist/commands/logout.js
CHANGED
|
@@ -281,7 +281,7 @@ import { Command } from "@oclif/core";
|
|
|
281
281
|
import Sentry, { consoleIntegration } from "@sentry/node";
|
|
282
282
|
|
|
283
283
|
// src/utils/version.ts
|
|
284
|
-
var LIB_VERSION = "0.0.
|
|
284
|
+
var LIB_VERSION = "0.0.58";
|
|
285
285
|
|
|
286
286
|
// src/commands/base-command.ts
|
|
287
287
|
import chalk2 from "chalk";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/logout.ts","../../src/services/auth.service.ts","../../src/utils/trpc.ts","../../src/services/analytics.service.ts","../../src/commands/base-command.ts","../../src/utils/version.ts"],"sourcesContent":["import {Config} from '@oclif/core'\nimport chalk from 'chalk'\nimport ora from 'ora'\n\nimport {AuthService} from '../services/auth.service.js'\nimport {BaseCommand} from './base-command.js'\n\nexport default class CloudLogout extends BaseCommand {\n static override description = 'Logout from Copilot Cloud'\n\n static override examples = ['<%= config.bin %> logout']\n\n constructor(\n argv: string[],\n config: Config,\n private authService = new AuthService(),\n ) {\n super(argv, config)\n }\n\n public async run(): Promise<void> {\n await this.parse(CloudLogout)\n this.log('Logging out...\\n')\n await this.authService.logout(this)\n this.log(chalk.green('Successfully logged out!'))\n }\n}\n","// @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 = 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(cmd: Command, context?: 'cloud-features' | 'general'): 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: '🪁 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(chalk.cyan('\\n🚀 Setting up Copilot Cloud authentication...\\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(chalk.yellow('Your authentication has expired. Re-authenticating...'))\n try {\n const loginResult = await this.login({exitAfterLogin: false})\n return loginResult\n } catch (loginError) {\n cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login'))\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({exitAfterLogin}: {exitAfterLogin?: boolean} = {exitAfterLogin: true}): 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) => {\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 analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\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 if (state !== req.query.state) {\n res.status(401).json({message: 'Invalid state'})\n spinner.fail('Invalid state')\n return\n }\n\n this.config.set('cliToken', cliToken)\n res.status(200).json({message: 'Callback called'})\n spinner.succeed(`🪁 Successfully logged in as ${chalk.hex('#7553fc')(user.email)}`)\n if (exitAfterLogin) {\n process.exit(0)\n } else {\n server.close()\n resolve({cliToken, user, organization})\n }\n })\n\n open(`${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`)\n })\n }\n}\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 = 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 = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = 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(flagKey, distinctId)\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","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.57\";\n"],"mappings":"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","names":["chalk","Conf","crypto","anonymousId","Conf","trpcClient","crypto","chalk","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/logout.ts","../../src/services/auth.service.ts","../../src/utils/trpc.ts","../../src/services/analytics.service.ts","../../src/commands/base-command.ts","../../src/utils/version.ts"],"sourcesContent":["import {Config} from '@oclif/core'\nimport chalk from 'chalk'\nimport ora from 'ora'\n\nimport {AuthService} from '../services/auth.service.js'\nimport {BaseCommand} from './base-command.js'\n\nexport default class CloudLogout extends BaseCommand {\n static override description = 'Logout from Copilot Cloud'\n\n static override examples = ['<%= config.bin %> logout']\n\n constructor(\n argv: string[],\n config: Config,\n private authService = new AuthService(),\n ) {\n super(argv, config)\n }\n\n public async run(): Promise<void> {\n await this.parse(CloudLogout)\n this.log('Logging out...\\n')\n await this.authService.logout(this)\n this.log(chalk.green('Successfully logged out!'))\n }\n}\n","// @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 = 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(cmd: Command, context?: 'cloud-features' | 'general'): 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: '🪁 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(chalk.cyan('\\n🚀 Setting up Copilot Cloud authentication...\\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(chalk.yellow('Your authentication has expired. Re-authenticating...'))\n try {\n const loginResult = await this.login({exitAfterLogin: false})\n return loginResult\n } catch (loginError) {\n cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please run: npx copilotkit@latest login'))\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({exitAfterLogin}: {exitAfterLogin?: boolean} = {exitAfterLogin: true}): 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) => {\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 analytics = new AnalyticsService({userId: user.id, organizationId: organization.id, email: user.email})\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 if (state !== req.query.state) {\n res.status(401).json({message: 'Invalid state'})\n spinner.fail('Invalid state')\n return\n }\n\n this.config.set('cliToken', cliToken)\n res.status(200).json({message: 'Callback called'})\n spinner.succeed(`🪁 Successfully logged in as ${chalk.hex('#7553fc')(user.email)}`)\n if (exitAfterLogin) {\n process.exit(0)\n } else {\n server.close()\n resolve({cliToken, user, organization})\n }\n })\n\n open(`${this.COPILOT_CLOUD_BASE_URL}/cli-auth?callbackUrl=http://localhost:${port}/callback&state=${state}`)\n })\n }\n}\n","import {createTRPCClient as trpcClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport const COPILOT_CLOUD_BASE_URL = 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 = 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 = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = 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(flagKey, distinctId)\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","import {Command} from '@oclif/core'\nimport Sentry, {consoleIntegration} from '@sentry/node'\nimport {LIB_VERSION} from '../utils/version.js'\nimport {COPILOT_CLOUD_BASE_URL} from '../utils/trpc.js'\nimport chalk from 'chalk'\n\nexport class BaseCommand extends Command {\n async init() {\n await this.checkCLIVersion()\n\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.init({\n dsn:\n process.env.SENTRY_DSN ||\n 'https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120',\n integrations: [consoleIntegration()],\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n })\n }\n\n async catch(err: any) {\n if (process.env.SENTRY_DISABLED !== 'true') {\n Sentry.captureException(err)\n }\n\n const message = err?.message ?? 'Unknown error'\n\n this.log('\\n' + chalk.red(message) + '\\n')\n\n const exitCode = err?.oclif?.exit ?? 1\n this.exit(exitCode)\n }\n\n async finally() {\n if (process.env.SENTRY_DISABLED === 'true') {\n return\n }\n\n Sentry.close()\n }\n\n async run() {}\n\n async checkCLIVersion() {\n const response = await fetch(`${COPILOT_CLOUD_BASE_URL}/api/healthz`)\n\n const data = await response.json()\n const cloudVersion = data.cliVersion\n\n if (!cloudVersion || cloudVersion === LIB_VERSION) {\n return\n }\n\n // TODO: add this back in, removed for crew ai launch since we don't want to keep releasing cloud\n // this.log(chalk.yellow('================ New version available! =================\\n'))\n // this.log(`You are using CopilotKit CLI v${LIB_VERSION}.`)\n // this.log(`A new CopilotKit CLI version is available (v${cloudVersion}).\\n`)\n // this.log('Please update your CLI to the latest version:\\n\\n')\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('npm:')))}\\t npm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('pnpm:')))}\\t pnpm install -g copilotkit@${cloudVersion}\\n`)\n // this.log(`${chalk.cyan(chalk.underline(chalk.bold('yarn:')))}\\t yarn global add copilotkit@${cloudVersion}\\n`)\n // this.log(chalk.yellow('============================================================\\n\\n'))\n }\n\n async gracefulError(message: string) {\n this.log('\\n' + chalk.red(message))\n process.exit(1)\n }\n}\n","// This is auto generated!\nexport const LIB_VERSION = \"0.0.58\";\n"],"mappings":"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","names":["chalk","Conf","crypto","anonymousId","Conf","trpcClient","crypto","chalk","chalk"]}
|
|
@@ -5,7 +5,7 @@ declare enum RemoteEndpointType {
|
|
|
5
5
|
MCP = "MCP",
|
|
6
6
|
Invalid = "Invalid"
|
|
7
7
|
}
|
|
8
|
-
declare const getHumanReadableEndpointType: (type: RemoteEndpointType) => "
|
|
8
|
+
declare const getHumanReadableEndpointType: (type: RemoteEndpointType) => "LangGraph Platform" | "CopilotKit" | "CrewAI" | "MCP" | "Invalid";
|
|
9
9
|
declare function detectRemoteEndpointType(url: string): Promise<{
|
|
10
10
|
url: string;
|
|
11
11
|
type: RemoteEndpointType;
|
package/dist/utils/version.d.ts
CHANGED
package/dist/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/version.ts"],"sourcesContent":["// This is auto generated!\nexport const LIB_VERSION = \"0.0.
|
|
1
|
+
{"version":3,"sources":["../../src/utils/version.ts"],"sourcesContent":["// This is auto generated!\nexport const LIB_VERSION = \"0.0.58\";\n"],"mappings":";AACO,IAAM,cAAc;","names":[]}
|
package/oclif.manifest.json
CHANGED
|
@@ -55,7 +55,8 @@
|
|
|
55
55
|
"aws-strands-py",
|
|
56
56
|
"a2a",
|
|
57
57
|
"microsoft-agent-framework-dotnet",
|
|
58
|
-
"microsoft-agent-framework-py"
|
|
58
|
+
"microsoft-agent-framework-py",
|
|
59
|
+
"mcp-apps"
|
|
59
60
|
],
|
|
60
61
|
"type": "option"
|
|
61
62
|
},
|
|
@@ -361,5 +362,5 @@
|
|
|
361
362
|
]
|
|
362
363
|
}
|
|
363
364
|
},
|
|
364
|
-
"version": "0.0.
|
|
365
|
+
"version": "0.0.58"
|
|
365
366
|
}
|