copilotkit 0.0.24 → 0.0.26
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/dev.js +1 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.js +276 -51
- 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/lib/init/index.d.ts +4 -3
- package/dist/lib/init/index.js +203 -19
- package/dist/lib/init/index.js.map +1 -1
- package/dist/lib/init/questions.d.ts +1 -0
- package/dist/lib/init/questions.js +174 -14
- package/dist/lib/init/questions.js.map +1 -1
- package/dist/lib/init/scaffold/agent.d.ts +1 -0
- package/dist/lib/init/scaffold/crew-inputs.js +1 -1
- package/dist/lib/init/scaffold/crew-inputs.js.map +1 -1
- package/dist/lib/init/scaffold/env.d.ts +1 -0
- package/dist/lib/init/scaffold/env.js +3 -4
- package/dist/lib/init/scaffold/env.js.map +1 -1
- package/dist/lib/init/scaffold/index.d.ts +1 -0
- package/dist/lib/init/scaffold/index.js +111 -7
- package/dist/lib/init/scaffold/index.js.map +1 -1
- package/dist/lib/init/scaffold/langgraph-assistants.js +3 -4
- package/dist/lib/init/scaffold/langgraph-assistants.js.map +1 -1
- package/dist/lib/init/scaffold/packages.d.ts +1 -0
- package/dist/lib/init/scaffold/shadcn.d.ts +1 -0
- package/dist/lib/init/scaffold/shadcn.js +107 -2
- package/dist/lib/init/scaffold/shadcn.js.map +1 -1
- package/dist/lib/init/types/index.d.ts +2 -1
- package/dist/lib/init/types/index.js +108 -2
- package/dist/lib/init/types/index.js.map +1 -1
- package/dist/lib/init/types/questions.d.ts +164 -36
- package/dist/lib/init/types/questions.js +109 -3
- package/dist/lib/init/types/questions.js.map +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 +1 -1
- package/package.json +1 -1
|
@@ -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(argv: string[], config: Config, private authService = new AuthService()) {\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): Promise<LoginResponse> {\n let cliToken = this.getCLIToken()\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 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 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 {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","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 // 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.24\";\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(argv: string[], config: Config, private authService = new AuthService()) {\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): Promise<LoginResponse> {\n let cliToken = this.getCLIToken()\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 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 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 {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","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 // 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.26\";\n"],"mappings":"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","names":["chalk","Conf","crypto","anonymousId","Conf","trpcClient","crypto","chalk","chalk"]}
|
package/dist/lib/init/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export { questions } from './questions.js';
|
|
2
|
+
export { AGENT_FRAMEWORKS, AgentFrameworkSchema, ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema, LANGGRAPH_AGENTS, LangGraphAgentSchema, NameSchema, Question, TokenSchema, UrlSchema, YES_NO, YesNoSchema, sanitizers } from './types/questions.js';
|
|
3
|
+
export { ChatTemplate, StarterTemplate, Template, templateMapping } from './types/templates.js';
|
|
2
4
|
export { scaffoldShadCN } from './scaffold/shadcn.js';
|
|
3
5
|
export { scaffoldEnv } from './scaffold/env.js';
|
|
4
6
|
export { cloneGitHubSubdirectory, isValidGitHubUrl } from './scaffold/github.js';
|
|
5
7
|
export { scaffoldPackages } from './scaffold/packages.js';
|
|
6
8
|
export { AgentTemplates, scaffoldAgent } from './scaffold/agent.js';
|
|
7
9
|
export { addCrewInputs } from './scaffold/crew-inputs.js';
|
|
8
|
-
export { AGENT_FRAMEWORKS, AgentFramework, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponent, Config, ConfigFlags, CrewFlowTemplate, CrewType, Fields, LANGGRAPH_AGENTS, LangGraphAgent, Question, YesNo } from './types/questions.js';
|
|
9
|
-
export { ChatTemplate, StarterTemplate, Template, templateMapping } from './types/templates.js';
|
|
10
|
-
import 'ora';
|
|
11
10
|
import '@oclif/core/interfaces';
|
|
11
|
+
import 'zod';
|
|
12
|
+
import 'ora';
|
package/dist/lib/init/index.js
CHANGED
|
@@ -1,15 +1,108 @@
|
|
|
1
1
|
// src/lib/init/types/questions.ts
|
|
2
|
+
import { z } from "zod";
|
|
2
3
|
import { Flags } from "@oclif/core";
|
|
3
4
|
var AGENT_FRAMEWORKS = ["CrewAI", "LangGraph", "None"];
|
|
4
5
|
var CREW_TYPES = ["Crews", "Flows"];
|
|
5
6
|
var CHAT_COMPONENTS = ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"];
|
|
6
7
|
var LANGGRAPH_AGENTS = ["Python Starter", "TypeScript Starter", "None"];
|
|
7
8
|
var CREW_FLOW_TEMPLATES = ["Starter", "None"];
|
|
9
|
+
var YES_NO = ["Yes", "No"];
|
|
10
|
+
var sanitizers = {
|
|
11
|
+
// Remove trailing slash from URLs
|
|
12
|
+
url: (value) => {
|
|
13
|
+
if (!value) return value;
|
|
14
|
+
return value.trim().replace(/\/+$/, "");
|
|
15
|
+
},
|
|
16
|
+
// Trim whitespace from strings
|
|
17
|
+
trim: (value) => {
|
|
18
|
+
if (!value) return value;
|
|
19
|
+
return value.trim();
|
|
20
|
+
},
|
|
21
|
+
// Lowercase strings
|
|
22
|
+
lowercase: (value) => {
|
|
23
|
+
if (!value) return value;
|
|
24
|
+
return value.toLowerCase().trim();
|
|
25
|
+
},
|
|
26
|
+
// Clean API keys (remove whitespace)
|
|
27
|
+
apiKey: (value) => {
|
|
28
|
+
if (!value) return value;
|
|
29
|
+
return value.trim().replace(/\s/g, "");
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var AgentFrameworkSchema = z.enum(AGENT_FRAMEWORKS);
|
|
33
|
+
var CrewTypeSchema = z.enum(CREW_TYPES);
|
|
34
|
+
var ChatComponentSchema = z.enum(CHAT_COMPONENTS);
|
|
35
|
+
var LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS);
|
|
36
|
+
var CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES);
|
|
37
|
+
var YesNoSchema = z.enum(YES_NO);
|
|
38
|
+
var UrlSchema = z.preprocess(
|
|
39
|
+
(val) => sanitizers.url(String(val)),
|
|
40
|
+
z.string().url("Please enter a valid URL").min(1, "URL is required")
|
|
41
|
+
);
|
|
42
|
+
var TokenSchema = z.preprocess(
|
|
43
|
+
(val) => sanitizers.trim(String(val)),
|
|
44
|
+
z.string().min(1, "Token is required")
|
|
45
|
+
);
|
|
46
|
+
var ApiKeySchema = z.preprocess(
|
|
47
|
+
(val) => sanitizers.apiKey(String(val)),
|
|
48
|
+
z.string().min(1, "API key is required")
|
|
49
|
+
);
|
|
50
|
+
var NameSchema = z.preprocess(
|
|
51
|
+
(val) => sanitizers.trim(String(val)),
|
|
52
|
+
z.string().min(1, "Name is required")
|
|
53
|
+
);
|
|
54
|
+
var ConfigSchema = z.object({
|
|
55
|
+
// Core fields
|
|
56
|
+
copilotKitVersion: z.string().optional(),
|
|
57
|
+
agentFramework: AgentFrameworkSchema,
|
|
58
|
+
chatUi: ChatComponentSchema.optional(),
|
|
59
|
+
// Yes/No fields
|
|
60
|
+
alreadyDeployed: YesNoSchema.optional(),
|
|
61
|
+
fastApiEnabled: YesNoSchema.optional(),
|
|
62
|
+
useCopilotCloud: YesNoSchema.optional(),
|
|
63
|
+
// LangGraph specific fields
|
|
64
|
+
langGraphAgent: LangGraphAgentSchema.optional(),
|
|
65
|
+
langGraphPlatform: YesNoSchema.optional(),
|
|
66
|
+
langGraphPlatformUrl: UrlSchema.optional(),
|
|
67
|
+
langGraphRemoteEndpointURL: UrlSchema.optional(),
|
|
68
|
+
// CrewAI specific fields
|
|
69
|
+
crewType: CrewTypeSchema.optional(),
|
|
70
|
+
crewName: NameSchema.optional(),
|
|
71
|
+
crewUrl: UrlSchema.optional(),
|
|
72
|
+
crewBearerToken: TokenSchema.optional(),
|
|
73
|
+
crewFlowAgent: CrewFlowTemplateSchema.optional(),
|
|
74
|
+
// API keys and tokens
|
|
75
|
+
copilotCloudPublicApiKey: z.string().optional(),
|
|
76
|
+
langSmithApiKey: ApiKeySchema.optional(),
|
|
77
|
+
llmToken: ApiKeySchema.optional()
|
|
78
|
+
}).refine(
|
|
79
|
+
(data) => {
|
|
80
|
+
if (data.agentFramework === "CrewAI" && data.crewType === "Crews") {
|
|
81
|
+
return !!data.crewUrl && !!data.crewBearerToken;
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
message: "Crew URL and bearer token are required for CrewAI Crews",
|
|
87
|
+
path: ["crewUrl", "crewBearerToken"]
|
|
88
|
+
}
|
|
89
|
+
).refine(
|
|
90
|
+
(data) => {
|
|
91
|
+
if (data.agentFramework === "LangGraph" && data.alreadyDeployed === "Yes" && data.langGraphPlatform === "Yes") {
|
|
92
|
+
return !!data.langGraphPlatformUrl && !!data.langSmithApiKey;
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
message: "LangGraph Platform URL and LangSmith API key are required",
|
|
98
|
+
path: ["langGraphPlatformUrl", "langSmithApiKey"]
|
|
99
|
+
}
|
|
100
|
+
);
|
|
8
101
|
var ConfigFlags = {
|
|
9
102
|
copilotKitVersion: Flags.string({ description: "CopilotKit version to use (e.g. 1.7.0)" }),
|
|
10
103
|
agentFramework: Flags.string({ description: "Agent framework to power your copilot", options: AGENT_FRAMEWORKS }),
|
|
11
|
-
fastApiEnabled: Flags.string({ description: "Use FastAPI to serve your agent locally", options:
|
|
12
|
-
useCopilotCloud: Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options:
|
|
104
|
+
fastApiEnabled: Flags.string({ description: "Use FastAPI to serve your agent locally", options: YES_NO }),
|
|
105
|
+
useCopilotCloud: Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: YES_NO }),
|
|
13
106
|
chatUi: Flags.string({ description: "Chat UI component to add to your app", options: CHAT_COMPONENTS }),
|
|
14
107
|
langGraphAgent: Flags.string({ description: "LangGraph agent template to use", options: LANGGRAPH_AGENTS }),
|
|
15
108
|
crewType: Flags.string({ description: "CrewAI implementation type", options: CREW_TYPES }),
|
|
@@ -46,13 +139,34 @@ var templateMapping = {
|
|
|
46
139
|
};
|
|
47
140
|
|
|
48
141
|
// src/lib/init/questions.ts
|
|
142
|
+
var validateUrl = (input) => {
|
|
143
|
+
try {
|
|
144
|
+
const sanitized = sanitizers.url(input);
|
|
145
|
+
const result = UrlSchema.safeParse(sanitized);
|
|
146
|
+
if (result.success) return true;
|
|
147
|
+
return result.error.errors[0]?.message || "Invalid URL format";
|
|
148
|
+
} catch (error) {
|
|
149
|
+
return "Invalid URL format";
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
var validateRequired = (input) => {
|
|
153
|
+
return sanitizers.trim(input) ? true : "This field is required";
|
|
154
|
+
};
|
|
49
155
|
var questions = [
|
|
50
156
|
// Core setup questions - always shown first
|
|
51
157
|
{
|
|
52
158
|
type: "select",
|
|
53
159
|
name: "agentFramework",
|
|
54
160
|
message: "\u{1F916} Choose your AI framework:",
|
|
55
|
-
choices: Array.from(AGENT_FRAMEWORKS)
|
|
161
|
+
choices: Array.from(AGENT_FRAMEWORKS),
|
|
162
|
+
validate: (input) => {
|
|
163
|
+
try {
|
|
164
|
+
AgentFrameworkSchema.parse(input);
|
|
165
|
+
return true;
|
|
166
|
+
} catch (error) {
|
|
167
|
+
return "Please select a valid framework";
|
|
168
|
+
}
|
|
169
|
+
}
|
|
56
170
|
},
|
|
57
171
|
// CrewAI specific questions - shown when CrewAI selected
|
|
58
172
|
{
|
|
@@ -60,7 +174,15 @@ var questions = [
|
|
|
60
174
|
name: "crewType",
|
|
61
175
|
message: "\u{1F465} What kind of CrewAI implementation would you like to use?",
|
|
62
176
|
choices: Array.from(CREW_TYPES),
|
|
63
|
-
when: (answers) => answers.agentFramework === "CrewAI"
|
|
177
|
+
when: (answers) => answers.agentFramework === "CrewAI",
|
|
178
|
+
validate: (input) => {
|
|
179
|
+
try {
|
|
180
|
+
CrewTypeSchema.parse(input);
|
|
181
|
+
return true;
|
|
182
|
+
} catch (error) {
|
|
183
|
+
return "Please select a valid crew type";
|
|
184
|
+
}
|
|
185
|
+
}
|
|
64
186
|
},
|
|
65
187
|
// CrewAI Crews specific questions - shown when CrewAI Crews selected
|
|
66
188
|
{
|
|
@@ -68,20 +190,26 @@ var questions = [
|
|
|
68
190
|
name: "crewName",
|
|
69
191
|
message: "\u{1F465} What would you like to name your crew? (can be anything)",
|
|
70
192
|
when: (answers) => answers.agentFramework === "CrewAI" && answers.crewType === "Crews",
|
|
71
|
-
default: "MyCopilotCrew"
|
|
193
|
+
default: "MyCopilotCrew",
|
|
194
|
+
validate: validateRequired,
|
|
195
|
+
sanitize: sanitizers.trim
|
|
72
196
|
},
|
|
73
197
|
{
|
|
74
198
|
type: "input",
|
|
75
199
|
name: "crewUrl",
|
|
76
200
|
message: "\u{1F517} Enter your Crew's URL:",
|
|
77
|
-
when: (answers) => answers.agentFramework === "CrewAI" && answers.crewType === "Crews"
|
|
201
|
+
when: (answers) => answers.agentFramework === "CrewAI" && answers.crewType === "Crews",
|
|
202
|
+
validate: validateUrl,
|
|
203
|
+
sanitize: sanitizers.url
|
|
78
204
|
},
|
|
79
205
|
{
|
|
80
206
|
type: "input",
|
|
81
207
|
name: "crewBearerToken",
|
|
82
208
|
message: "\u{1F511} Enter your Crew's bearer token:",
|
|
83
209
|
when: (answers) => answers.agentFramework === "CrewAI" && answers.crewType === "Crews",
|
|
84
|
-
sensitive: true
|
|
210
|
+
sensitive: true,
|
|
211
|
+
validate: validateRequired,
|
|
212
|
+
sanitize: sanitizers.trim
|
|
85
213
|
},
|
|
86
214
|
// CrewAI Flows specific questions - shown when CrewAI Flows selected
|
|
87
215
|
{
|
|
@@ -96,25 +224,45 @@ var questions = [
|
|
|
96
224
|
type: "yes/no",
|
|
97
225
|
name: "alreadyDeployed",
|
|
98
226
|
message: "\u{1F680} Is your LangGraph agent already deployed?",
|
|
99
|
-
when: (answers) => answers.agentFramework === "LangGraph"
|
|
227
|
+
when: (answers) => answers.agentFramework === "LangGraph",
|
|
228
|
+
validate: (input) => {
|
|
229
|
+
try {
|
|
230
|
+
YesNoSchema.parse(input);
|
|
231
|
+
return true;
|
|
232
|
+
} catch (error) {
|
|
233
|
+
return "Please select Yes or No";
|
|
234
|
+
}
|
|
235
|
+
}
|
|
100
236
|
},
|
|
101
237
|
{
|
|
102
238
|
type: "yes/no",
|
|
103
239
|
name: "langGraphPlatform",
|
|
104
240
|
message: "\u{1F99C}\u{1F517} Is it hosted with LangGraph Platform (local or cloud)?",
|
|
105
|
-
when: (answers) => answers.agentFramework === "LangGraph" && answers.alreadyDeployed === "Yes"
|
|
241
|
+
when: (answers) => answers.agentFramework === "LangGraph" && answers.alreadyDeployed === "Yes",
|
|
242
|
+
validate: (input) => {
|
|
243
|
+
try {
|
|
244
|
+
YesNoSchema.parse(input);
|
|
245
|
+
return true;
|
|
246
|
+
} catch (error) {
|
|
247
|
+
return "Please select Yes or No";
|
|
248
|
+
}
|
|
249
|
+
}
|
|
106
250
|
},
|
|
107
251
|
{
|
|
108
252
|
type: "input",
|
|
109
253
|
name: "langGraphPlatformUrl",
|
|
110
254
|
message: "\u{1F99C}\u{1F517} Enter your LangGraph platform URL:",
|
|
111
|
-
when: (answers) => answers.agentFramework === "LangGraph" && answers.alreadyDeployed === "Yes" && answers.langGraphPlatform === "Yes"
|
|
255
|
+
when: (answers) => answers.agentFramework === "LangGraph" && answers.alreadyDeployed === "Yes" && answers.langGraphPlatform === "Yes",
|
|
256
|
+
validate: validateUrl,
|
|
257
|
+
sanitize: sanitizers.url
|
|
112
258
|
},
|
|
113
259
|
{
|
|
114
260
|
type: "input",
|
|
115
261
|
name: "langGraphRemoteEndpointURL",
|
|
116
262
|
message: "\u{1F50C} Enter your LangGraph endpoint URL:",
|
|
117
|
-
when: (answers) => answers.agentFramework === "LangGraph" && answers.alreadyDeployed === "Yes" && answers.langGraphPlatform === "No"
|
|
263
|
+
when: (answers) => answers.agentFramework === "LangGraph" && answers.alreadyDeployed === "Yes" && answers.langGraphPlatform === "No",
|
|
264
|
+
validate: validateUrl,
|
|
265
|
+
sanitize: sanitizers.url
|
|
118
266
|
},
|
|
119
267
|
{
|
|
120
268
|
type: "select",
|
|
@@ -128,14 +276,24 @@ var questions = [
|
|
|
128
276
|
name: "langSmithApiKey",
|
|
129
277
|
message: "\u{1F99C}\u{1F517} Enter your LangSmith API key (required by LangGraph Platform) :",
|
|
130
278
|
when: (answers) => answers.agentFramework === "LangGraph" && answers.langGraphPlatform === "Yes",
|
|
131
|
-
sensitive: true
|
|
279
|
+
sensitive: true,
|
|
280
|
+
validate: validateRequired,
|
|
281
|
+
sanitize: sanitizers.apiKey
|
|
132
282
|
},
|
|
133
283
|
// Deployment options
|
|
134
284
|
{
|
|
135
285
|
type: "yes/no",
|
|
136
286
|
name: "useCopilotCloud",
|
|
137
287
|
message: "\u{1FA81} Deploy with Copilot Cloud? (recommended for production)",
|
|
138
|
-
when: (answers) => !(answers.agentFramework === "CrewAI" && answers.crewType === "Crews") && answers.crewType !== "Flows" && answers.alreadyDeployed === "Yes"
|
|
288
|
+
when: (answers) => !(answers.agentFramework === "CrewAI" && answers.crewType === "Crews") && answers.crewType !== "Flows" && answers.alreadyDeployed === "Yes",
|
|
289
|
+
validate: (input) => {
|
|
290
|
+
try {
|
|
291
|
+
YesNoSchema.parse(input);
|
|
292
|
+
return true;
|
|
293
|
+
} catch (error) {
|
|
294
|
+
return "Please select Yes or No";
|
|
295
|
+
}
|
|
296
|
+
}
|
|
139
297
|
},
|
|
140
298
|
// {
|
|
141
299
|
// type: 'yes/no',
|
|
@@ -161,7 +319,9 @@ var questions = [
|
|
|
161
319
|
name: "llmToken",
|
|
162
320
|
message: "\u{1F511} Enter your OpenAI API key (required for agent functionality):",
|
|
163
321
|
when: (answers) => answers.agentFramework === "LangGraph" && answers.alreadyDeployed === "No" || answers.agentFramework === "CrewAI" && answers.crewType === "Flows",
|
|
164
|
-
sensitive: true
|
|
322
|
+
sensitive: true,
|
|
323
|
+
validate: validateRequired,
|
|
324
|
+
sanitize: sanitizers.apiKey
|
|
165
325
|
}
|
|
166
326
|
];
|
|
167
327
|
|
|
@@ -192,6 +352,18 @@ async function scaffoldShadCN(userAnswers) {
|
|
|
192
352
|
components.push(templateMapping.RemoteEndpoint);
|
|
193
353
|
break;
|
|
194
354
|
}
|
|
355
|
+
} else {
|
|
356
|
+
switch (userAnswers.chatUi) {
|
|
357
|
+
case "CopilotChat":
|
|
358
|
+
components.push(...templateMapping.CopilotChat);
|
|
359
|
+
break;
|
|
360
|
+
case "CopilotSidebar":
|
|
361
|
+
components.push(...templateMapping.CopilotSidebar);
|
|
362
|
+
break;
|
|
363
|
+
case "CopilotPopup":
|
|
364
|
+
components.push(...templateMapping.CopilotPopup);
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
195
367
|
}
|
|
196
368
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
197
369
|
try {
|
|
@@ -218,7 +390,7 @@ import fs from "fs";
|
|
|
218
390
|
async function getLangGraphAgents(url, langSmithApiKey) {
|
|
219
391
|
try {
|
|
220
392
|
const response = await fetch(
|
|
221
|
-
`${url}/assistants/search`,
|
|
393
|
+
`${url.trim().replace(/\/$/, "")}/assistants/search`,
|
|
222
394
|
{
|
|
223
395
|
method: "POST",
|
|
224
396
|
headers: {
|
|
@@ -231,10 +403,9 @@ async function getLangGraphAgents(url, langSmithApiKey) {
|
|
|
231
403
|
})
|
|
232
404
|
}
|
|
233
405
|
);
|
|
234
|
-
|
|
235
|
-
return result;
|
|
406
|
+
return await response.json();
|
|
236
407
|
} catch (error) {
|
|
237
|
-
throw new Error(
|
|
408
|
+
throw new Error(`Failed to get LangGraph agents: ${error}`);
|
|
238
409
|
}
|
|
239
410
|
}
|
|
240
411
|
|
|
@@ -567,7 +738,7 @@ async function addCrewInputs(url, token) {
|
|
|
567
738
|
}
|
|
568
739
|
}
|
|
569
740
|
async function getCrewInputs(url, token) {
|
|
570
|
-
const response = await fetch(`${url}/inputs`, {
|
|
741
|
+
const response = await fetch(`${url.trim()}/inputs`, {
|
|
571
742
|
headers: {
|
|
572
743
|
Authorization: `Bearer ${token}`
|
|
573
744
|
}
|
|
@@ -580,16 +751,29 @@ async function getCrewInputs(url, token) {
|
|
|
580
751
|
}
|
|
581
752
|
export {
|
|
582
753
|
AGENT_FRAMEWORKS,
|
|
754
|
+
AgentFrameworkSchema,
|
|
583
755
|
AgentTemplates,
|
|
756
|
+
ApiKeySchema,
|
|
584
757
|
CHAT_COMPONENTS,
|
|
585
758
|
CREW_FLOW_TEMPLATES,
|
|
586
759
|
CREW_TYPES,
|
|
760
|
+
ChatComponentSchema,
|
|
587
761
|
ConfigFlags,
|
|
762
|
+
ConfigSchema,
|
|
763
|
+
CrewFlowTemplateSchema,
|
|
764
|
+
CrewTypeSchema,
|
|
588
765
|
LANGGRAPH_AGENTS,
|
|
766
|
+
LangGraphAgentSchema,
|
|
767
|
+
NameSchema,
|
|
768
|
+
TokenSchema,
|
|
769
|
+
UrlSchema,
|
|
770
|
+
YES_NO,
|
|
771
|
+
YesNoSchema,
|
|
589
772
|
addCrewInputs,
|
|
590
773
|
cloneGitHubSubdirectory,
|
|
591
774
|
isValidGitHubUrl,
|
|
592
775
|
questions,
|
|
776
|
+
sanitizers,
|
|
593
777
|
scaffoldAgent,
|
|
594
778
|
scaffoldEnv,
|
|
595
779
|
scaffoldPackages,
|