copilotkit 0.0.16 → 0.0.18

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.
@@ -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.16";
6
+ var LIB_VERSION = "0.0.18";
7
7
 
8
8
  // src/utils/trpc.ts
9
9
  import { createTRPCClient as createTRPClient_, unstable_httpBatchStreamLink } 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: process.env.SENTRY_DSN || \"https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120\",\n integrations: [\n consoleIntegration(),\n ],\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 super.catch(err)\n return;\n }\n\n Sentry.captureException(err)\n super.catch(err)\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 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.16\";\n","import {createTRPCClient as createTRPClient_, unstable_httpBatchStreamLink} from '@trpc/client'\nimport type {CLIRouter} from '@repo/trpc-cli/cli-router'\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) {\n return createTRPClient_<CLIRouter>({\n links: [\n unstable_httpBatchStreamLink({\n transformer: superjson,\n url: `${COPILOT_CLOUD_BASE_URL}/api/trpc-cli`,\n headers: () => {\n const headers = new Headers()\n headers.set('x-trpc-source', 'cli')\n headers.set('x-cli-token', cliToken)\n return headers\n },\n }),\n ],\n })\n}\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,OAAO,UAAU,0BAA0B;;;ACApC,IAAM,cAAc;;;ACD3B,SAAQ,oBAAoB,kBAAkB,oCAAmC;AAEjF,OAAO,eAAe;AAEf,IAAM,yBAAyB,QAAQ,IAAI,0BAA0B;;;AFA5E,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,KAAK,QAAQ,IAAI,cAAc;AAAA,MAC/B,cAAc;AAAA,QACZ,mBAAmB;AAAA,MACrB;AAAA;AAAA,MAEA,kBAAkB;AAAA;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,KAAU;AACpB,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C,YAAM,MAAM,GAAG;AACf;AAAA,IACF;AAEA,WAAO,iBAAiB,GAAG;AAC3B,UAAM,MAAM,GAAG;AAAA,EACjB;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;AAEA,SAAK,IAAI,MAAM,OAAO,6DAA6D,CAAC;AACpF,SAAK,IAAI,iCAAiC,WAAW,GAAG;AACxD,SAAK,IAAI,+CAA+C,YAAY;AAAA,CAAM;AAC1E,SAAK,IAAI,mDAAmD;AAC5D,SAAK,IAAI,GAAG,MAAM,KAAK,MAAM,UAAU,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,+BAAgC,YAAY;AAAA,CAAI;AAC3G,SAAK,IAAI,GAAG,MAAM,KAAK,MAAM,UAAU,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,gCAAiC,YAAY;AAAA,CAAI;AAC7G,SAAK,IAAI,GAAG,MAAM,KAAK,MAAM,UAAU,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,gCAAiC,YAAY;AAAA,CAAI;AAC7G,SAAK,IAAI,MAAM,OAAO,kEAAkE,CAAC;AAAA,EAC3F;AAAA,EAEA,MAAM,cAAc,SAAiB;AACnC,SAAK,IAAI,OAAM,MAAM,IAAI,OAAO,CAAC;AACjC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
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: process.env.SENTRY_DSN || \"https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120\",\n integrations: [\n consoleIntegration(),\n ],\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 super.catch(err)\n return;\n }\n\n Sentry.captureException(err)\n super.catch(err)\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 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.18\";\n","import {createTRPCClient as createTRPClient_, unstable_httpBatchStreamLink} from '@trpc/client'\nimport type {CLIRouter} from '@repo/trpc-cli/cli-router'\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) {\n return createTRPClient_<CLIRouter>({\n links: [\n unstable_httpBatchStreamLink({\n transformer: superjson,\n url: `${COPILOT_CLOUD_BASE_URL}/api/trpc-cli`,\n headers: () => {\n const headers = new Headers()\n headers.set('x-trpc-source', 'cli')\n headers.set('x-cli-token', cliToken)\n return headers\n },\n }),\n ],\n })\n}\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,OAAO,UAAU,0BAA0B;;;ACApC,IAAM,cAAc;;;ACD3B,SAAQ,oBAAoB,kBAAkB,oCAAmC;AAEjF,OAAO,eAAe;AAEf,IAAM,yBAAyB,QAAQ,IAAI,0BAA0B;;;AFA5E,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,KAAK,QAAQ,IAAI,cAAc;AAAA,MAC/B,cAAc;AAAA,QACZ,mBAAmB;AAAA,MACrB;AAAA;AAAA,MAEA,kBAAkB;AAAA;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,KAAU;AACpB,QAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C,YAAM,MAAM,GAAG;AACf;AAAA,IACF;AAEA,WAAO,iBAAiB,GAAG;AAC3B,UAAM,MAAM,GAAG;AAAA,EACjB;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;AAEA,SAAK,IAAI,MAAM,OAAO,6DAA6D,CAAC;AACpF,SAAK,IAAI,iCAAiC,WAAW,GAAG;AACxD,SAAK,IAAI,+CAA+C,YAAY;AAAA,CAAM;AAC1E,SAAK,IAAI,mDAAmD;AAC5D,SAAK,IAAI,GAAG,MAAM,KAAK,MAAM,UAAU,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,+BAAgC,YAAY;AAAA,CAAI;AAC3G,SAAK,IAAI,GAAG,MAAM,KAAK,MAAM,UAAU,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,gCAAiC,YAAY;AAAA,CAAI;AAC7G,SAAK,IAAI,GAAG,MAAM,KAAK,MAAM,UAAU,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,gCAAiC,YAAY;AAAA,CAAI;AAC7G,SAAK,IAAI,MAAM,OAAO,kEAAkE,CAAC;AAAA,EAC3F;AAAA,EAEA,MAAM,cAAc,SAAiB;AACnC,SAAK,IAAI,OAAM,MAAM,IAAI,OAAO,CAAC;AACjC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
@@ -359,7 +359,7 @@ import { Command } from "@oclif/core";
359
359
  import Sentry, { consoleIntegration } from "@sentry/node";
360
360
 
361
361
  // src/utils/version.ts
362
- var LIB_VERSION = "0.0.16";
362
+ var LIB_VERSION = "0.0.18";
363
363
 
364
364
  // src/commands/base-command.ts
365
365
  import chalk2 from "chalk";
@@ -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\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)\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(`${process.env.COPILOT_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 // Create the tunnel using the service\n const tunnel = await this.tunnelService.create({\n port,\n subdomain: tunnelId,\n })\n // Handle tunnel events\n tunnel.on('request', (info) => {\n this.log(`${chalk.green('➜')} ${chalk.white(new Date().toISOString())} - ${info.method} ${info.path}`)\n })\n\n tunnel.on('error', (err) => {\n this.gracefulError(chalk.red(`Tunnel error: ${err.message}`))\n })\n\n tunnel.on('close', async () => {\n this.log(chalk.yellow('\\nTunnel closed'))\n // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit\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 }\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): Promise<LoginResponse> {\n let cliToken = this.getCLIToken()\n\n // Check authentication\n if (!cliToken) {\n try {\n const {shouldLogin} = 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\n if (shouldLogin) {\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 cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please try again.'))\n process.exit(1)\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 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 const spinner = ora('Waiting for browser authentication to complete...\\n').start()\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 createTRPClient_, unstable_httpBatchStreamLink} from '@trpc/client'\nimport type {CLIRouter} from '@repo/trpc-cli/cli-router'\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) {\n return createTRPClient_<CLIRouter>({\n links: [\n unstable_httpBatchStreamLink({\n transformer: superjson,\n url: `${COPILOT_CLOUD_BASE_URL}/api/trpc-cli`,\n headers: () => {\n const headers = new Headers()\n headers.set('x-trpc-source', 'cli')\n headers.set('x-cli-token', cliToken)\n return headers\n },\n }),\n ],\n })\n}\n","import {Analytics} from '@segment/analytics-node'\nimport {AnalyticsEvents} from './events.js'\nimport Conf from 'conf'\n\nexport class AnalyticsService {\n private segment: Analytics | 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(private readonly authData?: {\n userId: string,\n email: string,\n organizationId: string,\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\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 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 segment_group: this.organizationId,\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","export enum RemoteEndpointType {\n LangGraphPlatform = 'LangGraphPlatform',\n CopilotKit = 'CopilotKit',\n CrewAI = 'CrewAI',\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 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] = await Promise.all([\n isLangGraphPlatformEndpoint(url),\n isCopilotKitEndpoint(url),\n isCrewAIEndpoint(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 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","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\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: process.env.SENTRY_DSN || \"https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120\",\n integrations: [\n consoleIntegration(),\n ],\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 super.catch(err)\n return;\n }\n\n Sentry.captureException(err)\n super.catch(err)\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 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.16\";\n"],"mappings":"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","names":["inquirer","ora","chalk","Conf","crypto","anonymousId","Conf","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\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)\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(`${process.env.COPILOT_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 // Create the tunnel using the service\n const tunnel = await this.tunnelService.create({\n port,\n subdomain: tunnelId,\n })\n // Handle tunnel events\n tunnel.on('request', (info) => {\n this.log(`${chalk.green('➜')} ${chalk.white(new Date().toISOString())} - ${info.method} ${info.path}`)\n })\n\n tunnel.on('error', (err) => {\n this.gracefulError(chalk.red(`Tunnel error: ${err.message}`))\n })\n\n tunnel.on('close', async () => {\n this.log(chalk.yellow('\\nTunnel closed'))\n // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit\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 }\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): Promise<LoginResponse> {\n let cliToken = this.getCLIToken()\n\n // Check authentication\n if (!cliToken) {\n try {\n const {shouldLogin} = 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\n if (shouldLogin) {\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 cmd.log(chalk.red('Could not authenticate with Copilot Cloud. Please try again.'))\n process.exit(1)\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 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 const spinner = ora('Waiting for browser authentication to complete...\\n').start()\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 createTRPClient_, unstable_httpBatchStreamLink} from '@trpc/client'\nimport type {CLIRouter} from '@repo/trpc-cli/cli-router'\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) {\n return createTRPClient_<CLIRouter>({\n links: [\n unstable_httpBatchStreamLink({\n transformer: superjson,\n url: `${COPILOT_CLOUD_BASE_URL}/api/trpc-cli`,\n headers: () => {\n const headers = new Headers()\n headers.set('x-trpc-source', 'cli')\n headers.set('x-cli-token', cliToken)\n return headers\n },\n }),\n ],\n })\n}\n","import {Analytics} from '@segment/analytics-node'\nimport {AnalyticsEvents} from './events.js'\nimport Conf from 'conf'\n\nexport class AnalyticsService {\n private segment: Analytics | 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(private readonly authData?: {\n userId: string,\n email: string,\n organizationId: string,\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\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 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 segment_group: this.organizationId,\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","export enum RemoteEndpointType {\n LangGraphPlatform = 'LangGraphPlatform',\n CopilotKit = 'CopilotKit',\n CrewAI = 'CrewAI',\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 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] = await Promise.all([\n isLangGraphPlatformEndpoint(url),\n isCopilotKitEndpoint(url),\n isCrewAIEndpoint(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 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","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\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: process.env.SENTRY_DSN || \"https://1eea15d32e2eacb0456a77db5e39aeeb@o4507288195170304.ingest.us.sentry.io/4508581448581120\",\n integrations: [\n consoleIntegration(),\n ],\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 super.catch(err)\n return;\n }\n\n Sentry.captureException(err)\n super.catch(err)\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 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.18\";\n"],"mappings":"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","names":["inquirer","ora","chalk","Conf","crypto","anonymousId","Conf","crypto","chalk","chalk","inquirer","ora"]}
@@ -1,8 +1,8 @@
1
1
  // src/commands/init.ts
2
2
  import { Flags as Flags2 } from "@oclif/core";
3
3
  import inquirer2 from "inquirer";
4
- import path4 from "path";
5
- import fs4 from "fs";
4
+ import path5 from "path";
5
+ import fs5 from "fs";
6
6
 
7
7
  // src/services/auth.service.ts
8
8
  import Conf2 from "conf";
@@ -221,7 +221,7 @@ import { Command } from "@oclif/core";
221
221
  import Sentry, { consoleIntegration } from "@sentry/node";
222
222
 
223
223
  // src/utils/version.ts
224
- var LIB_VERSION = "0.0.16";
224
+ var LIB_VERSION = "0.0.18";
225
225
 
226
226
  // src/commands/base-command.ts
227
227
  import chalk2 from "chalk";
@@ -338,7 +338,7 @@ var questions = [
338
338
  {
339
339
  type: "select",
340
340
  name: "crewType",
341
- message: "\u{1F4CB} Select CrewAI implementation type:",
341
+ message: "\u{1F465} What kind of CrewAI implementation would you like to use?",
342
342
  choices: Array.from(CREW_TYPES),
343
343
  when: (answers) => answers.agentFramework === "CrewAI"
344
344
  },
@@ -353,13 +353,13 @@ var questions = [
353
353
  {
354
354
  type: "input",
355
355
  name: "crewUrl",
356
- message: "\u{1F517} Enter your Crew API endpoint:",
356
+ message: "\u{1F517} Enter your Crew's URL:",
357
357
  when: (answers) => answers.agentFramework === "CrewAI" && answers.crewType === "Crews"
358
358
  },
359
359
  {
360
360
  type: "input",
361
361
  name: "crewBearerToken",
362
- message: "\u{1F511} Enter your Crew authentication token:",
362
+ message: "\u{1F511} Enter your Crew's bearer token:",
363
363
  when: (answers) => answers.agentFramework === "CrewAI" && answers.crewType === "Crews",
364
364
  sensitive: true
365
365
  },
@@ -427,7 +427,7 @@ var questions = [
427
427
  type: "yes/no",
428
428
  name: "useCopilotCloud",
429
429
  message: "\u{1FA81} Deploy with Copilot Cloud? (recommended for production)",
430
- when: (answers) => !(answers.agentFramework === "CrewAI" && answers.crewType === "Crews") && answers.agentFramework !== "LangGraph"
430
+ when: (answers) => !(answers.agentFramework === "CrewAI" && answers.crewType === "Crews") && answers.agentFramework !== "LangGraph" && answers.crewType !== "Flows"
431
431
  },
432
432
  // {
433
433
  // type: 'yes/no',
@@ -726,9 +726,42 @@ var AgentTemplates = {
726
726
  }
727
727
  };
728
728
 
729
+ // src/lib/init/scaffold/crew-inputs.ts
730
+ import * as fs4 from "fs/promises";
731
+ import ora5 from "ora";
732
+ import * as path4 from "path";
733
+ async function addCrewInputs(url, token) {
734
+ try {
735
+ const spinner = ora5("Analyzing crew inputs...").start();
736
+ const inputs = await getCrewInputs(url, token);
737
+ spinner.text = "Adding inputs to app/copilotkit/page.tsx...";
738
+ const filePath = path4.join(process.cwd(), "app", "copilotkit", "page.tsx");
739
+ let fileContent = await fs4.readFile(filePath, "utf8");
740
+ const inputsString = JSON.stringify(inputs);
741
+ fileContent = fileContent.replace(/\[["']YOUR_INPUTS_HERE["']\]/g, inputsString);
742
+ await fs4.writeFile(filePath, fileContent, "utf8");
743
+ spinner.succeed("Successfully added crew inputs to app/copilotkit/page.tsx");
744
+ } catch (error) {
745
+ console.error("Error updating crew inputs:", error);
746
+ throw error;
747
+ }
748
+ }
749
+ async function getCrewInputs(url, token) {
750
+ const response = await fetch(`${url}/inputs`, {
751
+ headers: {
752
+ Authorization: `Bearer ${token}`
753
+ }
754
+ });
755
+ if (!response.ok) {
756
+ throw new Error(`Failed to fetch inputs: ${response.statusText}`);
757
+ }
758
+ const data = await response.json();
759
+ return data.inputs;
760
+ }
761
+
729
762
  // src/commands/init.ts
730
763
  import chalk7 from "chalk";
731
- import ora5 from "ora";
764
+ import ora6 from "ora";
732
765
  var CloudInit = class _CloudInit extends BaseCommand {
733
766
  constructor(argv, config, authService = new AuthService()) {
734
767
  super(argv, config);
@@ -749,7 +782,7 @@ var CloudInit = class _CloudInit extends BaseCommand {
749
782
  async run() {
750
783
  const { flags } = await this.parse(_CloudInit);
751
784
  try {
752
- this.log(chalk7.bold(chalk7.cyan("\n\u{1FA81} Welcome to CopilotKit")));
785
+ this.log(chalk7.magenta("\n\u{1FA81} Welcome to CopilotKit"));
753
786
  this.log(chalk7.gray("Let's power up your Next.js project with AI capabilities\n"));
754
787
  this.validateProjectCompatibility(flags);
755
788
  const userAnswers = await this.getUserAnswers();
@@ -764,6 +797,8 @@ var CloudInit = class _CloudInit extends BaseCommand {
764
797
  await scaffoldShadCN(userAnswers);
765
798
  await scaffoldAgent(userAnswers);
766
799
  await scaffoldEnv(flags, userAnswers);
800
+ if (userAnswers.crewType === "Crews" && userAnswers.crewUrl && userAnswers.crewBearerToken)
801
+ await addCrewInputs(userAnswers.crewUrl, userAnswers.crewBearerToken);
767
802
  this.finalSummary(userAnswers);
768
803
  } catch (error) {
769
804
  this.gracefulError(error.message);
@@ -836,7 +871,7 @@ var CloudInit = class _CloudInit extends BaseCommand {
836
871
  const copilotCloudPublicApiKey = await this.trpcClient.getCopilotCloudPublicApiKey.query({ projectId: selectedProjectId });
837
872
  userAnswers.copilotCloudPublicApiKey = copilotCloudPublicApiKey?.key;
838
873
  if (userAnswers.crewUrl && userAnswers.crewName && userAnswers.crewBearerToken) {
839
- const crewSpinner = ora5({
874
+ const crewSpinner = ora6({
840
875
  text: chalk7("\u{1F465} Adding Crew to Copilot Cloud..."),
841
876
  color: "cyan"
842
877
  }).start();
@@ -855,17 +890,17 @@ var CloudInit = class _CloudInit extends BaseCommand {
855
890
  }
856
891
  }
857
892
  validateProjectCompatibility(flags) {
858
- const projectPath = path4.resolve(process.cwd(), flags.dir);
859
- if (!fs4.existsSync(projectPath)) {
893
+ const projectPath = path5.resolve(process.cwd(), flags.dir);
894
+ if (!fs5.existsSync(projectPath)) {
860
895
  this.gracefulError(`Directory ${flags.dir} does not exist. Please provide a valid Next.js project directory.`);
861
896
  return;
862
897
  }
863
- const packageJsonPath = path4.join(projectPath, "package.json");
864
- if (!fs4.existsSync(packageJsonPath)) {
898
+ const packageJsonPath = path5.join(projectPath, "package.json");
899
+ if (!fs5.existsSync(packageJsonPath)) {
865
900
  this.gracefulError(`Directory ${projectPath} does not contain a package.json file. Please provide a valid Next.js project.`);
866
901
  process.exit(1);
867
902
  }
868
- const packageJson = JSON.parse(fs4.readFileSync(packageJsonPath, "utf8"));
903
+ const packageJson = JSON.parse(fs5.readFileSync(packageJsonPath, "utf8"));
869
904
  if (!packageJson.dependencies?.next && !packageJson.devDependencies?.next) {
870
905
  this.gracefulError(`Directory ${projectPath} does not appear to be a Next.js project. Make sure it has next in dependencies.`);
871
906
  process.exit(1);
@@ -878,12 +913,8 @@ var CloudInit = class _CloudInit extends BaseCommand {
878
913
  let agentDevInstructions = "";
879
914
  let agentType = "";
880
915
  let agentSetupMessage = "";
881
- let uiNavigateInstructions = "";
882
916
  if (userAnswers.agentFramework !== "None") {
883
- if (userAnswers.agentFramework === "LangGraph") {
884
- agentType = "LangGraph agent";
885
- agentSetupMessage = `Please refer to the documentation at ${chalk7.blue("https://docs.copilotkit.ai/coagents")} for LangGraph setup instructions.`;
886
- } else if (userAnswers.agentFramework === "CrewAI") {
917
+ if (userAnswers.agentFramework === "CrewAI") {
887
918
  agentType = "CrewAI";
888
919
  if (userAnswers.crewType === "Crews") {
889
920
  agentSetupMessage = `Using your Crew from ${chalk7.cyan(userAnswers.crewUrl || "the provided URL")}.`;
@@ -893,34 +924,19 @@ var CloudInit = class _CloudInit extends BaseCommand {
893
924
  }
894
925
  }
895
926
  }
896
- if (userAnswers.chatUi === "CopilotChat") {
897
- uiNavigateInstructions = `Navigate to ${chalk7.cyan("http://localhost:3000")} to see your CopilotKit chat interface.`;
898
- } else if (userAnswers.chatUi === "CopilotSidebar") {
899
- uiNavigateInstructions = `Navigate to ${chalk7.cyan("http://localhost:3000")} and click on the sidebar icon to open the CopilotKit sidebar.`;
900
- } else if (userAnswers.chatUi === "CopilotPopup") {
901
- uiNavigateInstructions = `Navigate to ${chalk7.cyan("http://localhost:3000")} and click on the popup button to open the CopilotKit popup.`;
902
- } else {
903
- uiNavigateInstructions = `Navigate to ${chalk7.cyan("http://localhost:3000")} to see your CopilotKit interface.`;
904
- }
905
- this.log(chalk7.bold(chalk7.cyan("\n\u{1F389} Your CopilotKit setup is complete!\n")));
906
- this.log(chalk7.bold("\u{1F4AC} User Interface:"));
907
- this.log(chalk7.gray(`We've set up the ${chalk7.cyan(userAnswers.chatUi)} component in your Next.js app.`));
908
- this.log(chalk7.gray(uiNavigateInstructions));
909
- if (agentType) {
910
- this.log(chalk7.bold(`
911
- \u{1F916} ${agentType}:`));
912
- this.log(chalk7.gray(agentSetupMessage));
913
- }
914
- this.log(chalk7.bold("\n\u{1F4CB} Next steps:"));
915
- this.log(` ${chalk7.cyan("1.")} Start your Next.js app:`);
916
- this.log(` ${chalk7.gray("$")} ${chalk7.yellow("npm run dev")}`);
917
- if (agentDevInstructions) {
918
- this.log(` ${chalk7.cyan("2.")} Start your agent:`);
919
- this.log(` ${chalk7.gray("$")} ${chalk7.yellow(`cd agent && ${agentDevInstructions}`)}`);
920
- }
921
- this.log(chalk7.bold("\n\u{1F4DA} Documentation:"));
922
- this.log(` ${chalk7.blue("https://docs.copilotkit.ai")}`);
923
- this.log("");
927
+ this.log("\n-----\n");
928
+ this.log(chalk7.magenta("\u{1F389} Your CopilotKit setup is complete! \u{1F389}\n"));
929
+ this.log(chalk7.bold(`\u{1F4CB} Recap`));
930
+ this.log(` - CopilotKit has been added to your Next.js app.`);
931
+ if (agentSetupMessage) this.log(` - ${agentSetupMessage}`);
932
+ if (userAnswers.useCopilotCloud || userAnswers.crewType === "Crews") this.log(` - With Copilot Cloud.`);
933
+ this.log(chalk7.bold("\n\u{1F680} Next steps:"));
934
+ this.log(` - Start your Next.js app: ${chalk7.gray("$")} ${chalk7.cyan("npm run dev")}`);
935
+ if (agentDevInstructions) this.log(` - Start your agent: ${chalk7.gray("$")} ${chalk7.cyan(`cd agent && ${agentDevInstructions}`)}`);
936
+ this.log(` - Navigate to ${chalk7.blue("http://localhost:3000/copilotkit")}`);
937
+ this.log(` - Talk to your ${userAnswers.agentFramework !== "None" ? "agent" : "application"}.`);
938
+ this.log(` - Read the docs: ${chalk7.blue("https://docs.copilotkit.ai")}`);
939
+ this.log(chalk7.magenta("\nEnjoy building with CopilotKit \u{1FA81}\n"));
924
940
  }
925
941
  };
926
942
  export {