copilotkit 0.0.43-alpha.1 → 0.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/base-command.js +1 -1
- package/dist/commands/base-command.js.map +1 -1
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.js +41 -19
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dev.js +1 -17
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.d.ts +2 -6
- package/dist/commands/init.js +299 -378
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +1 -17
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +1 -17
- package/dist/commands/logout.js.map +1 -1
- package/dist/lib/init/index.d.ts +2 -2
- package/dist/lib/init/index.js +198 -234
- package/dist/lib/init/index.js.map +1 -1
- package/dist/lib/init/questions.d.ts +1 -3
- package/dist/lib/init/questions.js +183 -211
- package/dist/lib/init/questions.js.map +1 -1
- package/dist/lib/init/scaffold/env.js +3 -13
- package/dist/lib/init/scaffold/env.js.map +1 -1
- package/dist/lib/init/scaffold/index.js +24 -35
- package/dist/lib/init/scaffold/index.js.map +1 -1
- package/dist/lib/init/scaffold/shadcn.js +21 -22
- package/dist/lib/init/scaffold/shadcn.js.map +1 -1
- package/dist/lib/init/types/index.d.ts +1 -1
- package/dist/lib/init/types/index.js +9 -16
- package/dist/lib/init/types/index.js.map +1 -1
- package/dist/lib/init/types/questions.d.ts +9 -11
- package/dist/lib/init/types/questions.js +7 -14
- package/dist/lib/init/types/questions.js.map +1 -1
- package/dist/lib/init/types/templates.js +2 -2
- package/dist/lib/init/types/templates.js.map +1 -1
- package/dist/services/analytics.service.d.ts +0 -4
- package/dist/services/analytics.service.js +0 -16
- package/dist/services/analytics.service.js.map +1 -1
- package/dist/services/auth.service.js +0 -16
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/events.d.ts +15 -23
- 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 +26 -15
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/init/scaffold/shadcn.ts","../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/utils.ts","../../../../src/lib/init/types/templates.ts"],"sourcesContent":["import spawn from 'cross-spawn'\nimport {templateMapping, Config} from '../types/index.js'\n\nexport async function scaffoldShadCN(flags: any, userAnswers: Config) {\n try {\n // Determine which components to install based on user choices\n const components: string[] = []\n\n // Add additional components based on agent framework\n switch (userAnswers.mode) {\n case 'LangGraph':\n components.push(templateMapping.LangGraphGeneric)\n if (userAnswers.deploymentChoice === 'Self-hosted' || userAnswers.useCopilotCloud === 'No') {\n if (userAnswers.langGraphPlatform === 'Yes') {\n components.push(templateMapping.LangGraphPlatformRuntime)\n } else {\n components.push(templateMapping.RemoteEndpoint)\n }\n }\n break\n case 'CrewAI':\n if (userAnswers.crewType === 'Crews') {\n components.push(...templateMapping.CrewEnterprise)\n } else if (userAnswers.crewType === 'Flows') {\n components.push(...templateMapping.CrewFlowsEnterprise)\n } else {\n components.push(templateMapping.RemoteEndpoint)\n }\n break\n case 'MCP':\n components.push(templateMapping.McpStarter)\n if (userAnswers.deploymentChoice === 'Self-hosted' || userAnswers.useCopilotCloud === 'No') {\n components.push(templateMapping.McpRuntime)\n }\n break\n case 'Standard':\n components.push(templateMapping.StandardStarter)\n if (userAnswers.deploymentChoice === 'Self-hosted' || userAnswers.useCopilotCloud === 'No') {\n components.push(templateMapping.StandardRuntime)\n }\n break\n default:\n return\n }\n\n // Small pause before running shadcn\n await new Promise((resolve) => setTimeout(resolve, 100))\n\n try {\n // Run shadcn with inherited stdio for all streams to allow for user input\n const result = spawn.sync('npx', ['shadcn@latest', 'add', ...components], {\n stdio: 'inherit', // This ensures stdin/stdout/stderr are all passed through\n })\n\n if (result.status !== 0) {\n throw new Error(`The shadcn installation process exited with code ${result.status}`)\n }\n } catch (error) {\n throw error\n }\n } catch (error) {\n throw error\n }\n}\n","import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n// NEW: Deployment choice options for Branch B\nexport const DEPLOYMENT_CHOICES = ['Copilot Cloud', 'Self-hosted'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n// NEW: Deployment choice schema for Branch B\nexport const DeploymentChoiceSchema = z.enum(DEPLOYMENT_CHOICES)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n // DEPRECATED: useCopilotCloud - consolidated with signupForCopilotCloud\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n\n // NEW: A/B/C test fields\n deploymentChoice: DeploymentChoiceSchema.optional(), // For branch B only (Cloud vs Self-hosted)\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n // NEW: A/B/C test flags\n 'deployment-choice': Flags.string({\n description: 'Choose between Copilot Cloud or Self-hosted deployment',\n options: DEPLOYMENT_CHOICES,\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n","export type ChatTemplate = 'CopilotChat' | 'CopilotPopup' | 'CopilotSidebar'\n\nexport type StarterTemplate =\n | 'LangGraphPlatform'\n | 'RemoteEndpoint'\n | 'Standard'\n | 'CrewEnterprise'\n | 'CrewFlowsStarter'\n\nexport type Template = ChatTemplate | StarterTemplate\n\nconst BASE_URL = 'https://registry.copilotkit.ai/r'\n\nexport const templateMapping = {\n // Runtimes\n RemoteEndpoint: `${BASE_URL}/remote-endpoint.json`,\n LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-runtime.json`,\n\n // CrewAI\n CrewEnterprise: [`${BASE_URL}/coagents-crew-starter.json`],\n CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],\n\n // LangGraph\n LangGraphGeneric: `${BASE_URL}/generic-lg-starter.json`,\n LangGraphStarter: [`${BASE_URL}/langgraph-platform-starter.json`, `${BASE_URL}/coagents-starter-ui.json`],\n\n // No Agent\n StandardStarter: `${BASE_URL}/standard-starter.json`,\n StandardRuntime: `${BASE_URL}/standard-runtime.json`,\n\n // MCP\n McpStarter: `${BASE_URL}/mcp-starter.json`,\n McpRuntime: `${BASE_URL}/mcp-starter-runtime.json`,\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/init/scaffold/shadcn.ts","../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/utils.ts","../../../../src/lib/init/types/templates.ts"],"sourcesContent":["import spawn from 'cross-spawn'\nimport {templateMapping, Config} from '../types/index.js'\n\nexport async function scaffoldShadCN(flags: any, userAnswers: Config) {\n try {\n // Determine which components to install based on user choices\n const components: string[] = []\n\n // Add additional components based on agent framework\n switch (userAnswers.mode) {\n case 'LangGraph':\n if (userAnswers.langGraphAgent || flags.booth) {\n components.push(...templateMapping.LangGraphStarter)\n } else {\n components.push(templateMapping.LangGraphGeneric)\n if (userAnswers.useCopilotCloud !== 'Yes') {\n if (userAnswers.langGraphPlatform === 'Yes') {\n components.push(templateMapping.LangGraphPlatformRuntime)\n } else {\n components.push(templateMapping.RemoteEndpoint)\n }\n }\n }\n break\n case 'CrewAI':\n if (userAnswers.crewType === 'Crews') {\n components.push(...templateMapping.CrewEnterprise)\n } else if (userAnswers.crewType === 'Flows') {\n components.push(...templateMapping.CrewFlowsEnterprise)\n } else {\n components.push(templateMapping.RemoteEndpoint)\n }\n break\n case 'MCP':\n components.push(templateMapping.McpStarter)\n if (userAnswers.useCopilotCloud !== 'Yes') {\n components.push(templateMapping.McpRuntime)\n }\n break\n case 'Standard':\n components.push(templateMapping.StandardStarter)\n if (userAnswers.useCopilotCloud !== 'Yes') {\n components.push(templateMapping.StandardRuntime)\n }\n break\n default:\n return\n }\n\n // Small pause before running shadcn\n await new Promise((resolve) => setTimeout(resolve, 100))\n\n try {\n // Run shadcn with inherited stdio for all streams to allow for user input\n const result = spawn.sync('npx', ['shadcn@latest', 'add', ...components], {\n stdio: 'inherit', // This ensures stdin/stdout/stderr are all passed through\n })\n\n if (result.status !== 0) {\n throw new Error(`The shadcn installation process exited with code ${result.status}`)\n }\n } catch (error) {\n throw error\n }\n } catch (error) {\n throw error\n }\n}\n","import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // NEW: Early signup field\n signupForCopilotCloud: YesNoSchema.optional(),\n\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n 'signup-for-copilot-cloud': Flags.string({\n description: 'Sign up for Copilot Cloud for error tracking and debugging insights',\n options: YES_NO,\n }),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n","export type ChatTemplate = 'CopilotChat' | 'CopilotPopup' | 'CopilotSidebar'\n\nexport type StarterTemplate =\n | 'LangGraphPlatform'\n | 'RemoteEndpoint'\n | 'Standard'\n | 'CrewEnterprise'\n | 'CrewFlowsStarter'\n\nexport type Template = ChatTemplate | StarterTemplate\n\nconst BASE_URL = 'https://registry.copilotkit.ai/r'\n\nexport const templateMapping = {\n // Runtimes\n RemoteEndpoint: `${BASE_URL}/remote-endpoint-starter.json`,\n LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-starter.json`,\n\n // CrewAI\n CrewEnterprise: [`${BASE_URL}/coagents-crew-starter.json`],\n CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],\n\n // LangGraph\n LangGraphGeneric: `${BASE_URL}/generic-lg-starter.json`,\n LangGraphStarter: [`${BASE_URL}/langgraph-platform-starter.json`, `${BASE_URL}/coagents-starter-ui.json`],\n\n // No Agent\n StandardStarter: `${BASE_URL}/standard-starter.json`,\n StandardRuntime: `${BASE_URL}/standard-runtime.json`,\n\n // MCP\n McpStarter: `${BASE_URL}/mcp-starter.json`,\n McpRuntime: `${BASE_URL}/mcp-starter-runtime.json`,\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema,
|
|
1
|
+
export { ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema, LANGGRAPH_AGENTS, LLMApiKeySchema, LangGraphAgentSchema, MODES, ModeSchema, NameSchema, Question, TokenSchema, UrlSchema, YES_NO, YesNoSchema, sanitizers } from './questions.js';
|
|
2
2
|
export { ChatTemplate, StarterTemplate, Template, templateMapping } from './templates.js';
|
|
3
3
|
import '@oclif/core/interfaces';
|
|
4
4
|
import 'zod';
|
|
@@ -14,7 +14,6 @@ var CHAT_COMPONENTS = ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopu
|
|
|
14
14
|
var LANGGRAPH_AGENTS = ["Python Starter", "TypeScript Starter"];
|
|
15
15
|
var CREW_FLOW_TEMPLATES = ["Starter"];
|
|
16
16
|
var YES_NO = ["Yes", "No"];
|
|
17
|
-
var DEPLOYMENT_CHOICES = ["Copilot Cloud", "Self-hosted"];
|
|
18
17
|
var sanitizers = {
|
|
19
18
|
// Remove trailing slash from URLs
|
|
20
19
|
url: (value) => {
|
|
@@ -43,7 +42,6 @@ var ChatComponentSchema = z.enum(CHAT_COMPONENTS);
|
|
|
43
42
|
var LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS);
|
|
44
43
|
var CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES);
|
|
45
44
|
var YesNoSchema = z.enum(YES_NO);
|
|
46
|
-
var DeploymentChoiceSchema = z.enum(DEPLOYMENT_CHOICES);
|
|
47
45
|
var UrlSchema = z.preprocess(
|
|
48
46
|
(val) => sanitizers.url(String(val)),
|
|
49
47
|
z.string().url("Please enter a valid URL").min(1, "URL is required")
|
|
@@ -56,6 +54,8 @@ var ApiKeySchema = z.preprocess(
|
|
|
56
54
|
var LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional());
|
|
57
55
|
var NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, "Name is required"));
|
|
58
56
|
var ConfigSchema = z.object({
|
|
57
|
+
// NEW: Early signup field
|
|
58
|
+
signupForCopilotCloud: YesNoSchema.optional(),
|
|
59
59
|
// Core fields
|
|
60
60
|
copilotKitVersion: z.string().optional(),
|
|
61
61
|
mode: ModeSchema,
|
|
@@ -63,7 +63,6 @@ var ConfigSchema = z.object({
|
|
|
63
63
|
// Yes/No fields
|
|
64
64
|
alreadyDeployed: YesNoSchema.optional(),
|
|
65
65
|
fastApiEnabled: YesNoSchema.optional(),
|
|
66
|
-
// DEPRECATED: useCopilotCloud - consolidated with signupForCopilotCloud
|
|
67
66
|
useCopilotCloud: YesNoSchema.optional(),
|
|
68
67
|
// LangGraph specific fields
|
|
69
68
|
langGraphAgent: LangGraphAgentSchema.optional(),
|
|
@@ -81,10 +80,7 @@ var ConfigSchema = z.object({
|
|
|
81
80
|
llmToken: LLMApiKeySchema.optional(),
|
|
82
81
|
// IDE Documentation setup fields
|
|
83
82
|
setupIDEDocs: YesNoSchema.optional(),
|
|
84
|
-
selectedIDE: z.union([z.enum(["cursor", "windsurf"]), z.literal("skip")]).optional()
|
|
85
|
-
// NEW: A/B/C test fields
|
|
86
|
-
deploymentChoice: DeploymentChoiceSchema.optional()
|
|
87
|
-
// For branch B only (Cloud vs Self-hosted)
|
|
83
|
+
selectedIDE: z.union([z.enum(["cursor", "windsurf"]), z.literal("skip")]).optional()
|
|
88
84
|
}).refine(
|
|
89
85
|
(data) => {
|
|
90
86
|
if (data.mode === "CrewAI") {
|
|
@@ -110,6 +106,10 @@ var ConfigSchema = z.object({
|
|
|
110
106
|
);
|
|
111
107
|
var ConfigFlags = {
|
|
112
108
|
booth: Flags.boolean({ description: "Use CopilotKit in booth mode", default: false, char: "b" }),
|
|
109
|
+
"signup-for-copilot-cloud": Flags.string({
|
|
110
|
+
description: "Sign up for Copilot Cloud for error tracking and debugging insights",
|
|
111
|
+
options: YES_NO
|
|
112
|
+
}),
|
|
113
113
|
mode: Flags.string({ description: "How you will be interacting with AI", options: MODES, char: "m" }),
|
|
114
114
|
"copilotkit-version": Flags.string({ description: "CopilotKit version to use (e.g. 1.7.0)" }),
|
|
115
115
|
"use-copilot-cloud": Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: YES_NO }),
|
|
@@ -124,11 +124,6 @@ var ConfigFlags = {
|
|
|
124
124
|
"selected-ide": Flags.string({
|
|
125
125
|
description: "IDE to configure with documentation rules",
|
|
126
126
|
options: ["cursor", "windsurf", "skip"]
|
|
127
|
-
}),
|
|
128
|
-
// NEW: A/B/C test flags
|
|
129
|
-
"deployment-choice": Flags.string({
|
|
130
|
-
description: "Choose between Copilot Cloud or Self-hosted deployment",
|
|
131
|
-
options: DEPLOYMENT_CHOICES
|
|
132
127
|
})
|
|
133
128
|
};
|
|
134
129
|
|
|
@@ -136,8 +131,8 @@ var ConfigFlags = {
|
|
|
136
131
|
var BASE_URL = "https://registry.copilotkit.ai/r";
|
|
137
132
|
var templateMapping = {
|
|
138
133
|
// Runtimes
|
|
139
|
-
RemoteEndpoint: `${BASE_URL}/remote-endpoint.json`,
|
|
140
|
-
LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-
|
|
134
|
+
RemoteEndpoint: `${BASE_URL}/remote-endpoint-starter.json`,
|
|
135
|
+
LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-starter.json`,
|
|
141
136
|
// CrewAI
|
|
142
137
|
CrewEnterprise: [`${BASE_URL}/coagents-crew-starter.json`],
|
|
143
138
|
CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],
|
|
@@ -161,8 +156,6 @@ export {
|
|
|
161
156
|
ConfigSchema,
|
|
162
157
|
CrewFlowTemplateSchema,
|
|
163
158
|
CrewTypeSchema,
|
|
164
|
-
DEPLOYMENT_CHOICES,
|
|
165
|
-
DeploymentChoiceSchema,
|
|
166
159
|
LANGGRAPH_AGENTS,
|
|
167
160
|
LLMApiKeySchema,
|
|
168
161
|
LangGraphAgentSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/utils.ts","../../../../src/lib/init/types/templates.ts"],"sourcesContent":["import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n// NEW: Deployment choice options for Branch B\nexport const DEPLOYMENT_CHOICES = ['Copilot Cloud', 'Self-hosted'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n// NEW: Deployment choice schema for Branch B\nexport const DeploymentChoiceSchema = z.enum(DEPLOYMENT_CHOICES)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n // DEPRECATED: useCopilotCloud - consolidated with signupForCopilotCloud\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n\n // NEW: A/B/C test fields\n deploymentChoice: DeploymentChoiceSchema.optional(), // For branch B only (Cloud vs Self-hosted)\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n // NEW: A/B/C test flags\n 'deployment-choice': Flags.string({\n description: 'Choose between Copilot Cloud or Self-hosted deployment',\n options: DEPLOYMENT_CHOICES,\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n","export type ChatTemplate = 'CopilotChat' | 'CopilotPopup' | 'CopilotSidebar'\n\nexport type StarterTemplate =\n | 'LangGraphPlatform'\n | 'RemoteEndpoint'\n | 'Standard'\n | 'CrewEnterprise'\n | 'CrewFlowsStarter'\n\nexport type Template = ChatTemplate | StarterTemplate\n\nconst BASE_URL = 'https://registry.copilotkit.ai/r'\n\nexport const templateMapping = {\n // Runtimes\n RemoteEndpoint: `${BASE_URL}/remote-endpoint.json`,\n LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-runtime.json`,\n\n // CrewAI\n CrewEnterprise: [`${BASE_URL}/coagents-crew-starter.json`],\n CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],\n\n // LangGraph\n LangGraphGeneric: `${BASE_URL}/generic-lg-starter.json`,\n LangGraphStarter: [`${BASE_URL}/langgraph-platform-starter.json`, `${BASE_URL}/coagents-starter-ui.json`],\n\n // No Agent\n StandardStarter: `${BASE_URL}/standard-starter.json`,\n StandardRuntime: `${BASE_URL}/standard-runtime.json`,\n\n // MCP\n McpStarter: `${BASE_URL}/mcp-starter.json`,\n McpRuntime: `${BASE_URL}/mcp-starter-runtime.json`,\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/utils.ts","../../../../src/lib/init/types/templates.ts"],"sourcesContent":["import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // NEW: Early signup field\n signupForCopilotCloud: YesNoSchema.optional(),\n\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n 'signup-for-copilot-cloud': Flags.string({\n description: 'Sign up for Copilot Cloud for error tracking and debugging insights',\n options: YES_NO,\n }),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n","export type ChatTemplate = 'CopilotChat' | 'CopilotPopup' | 'CopilotSidebar'\n\nexport type StarterTemplate =\n | 'LangGraphPlatform'\n | 'RemoteEndpoint'\n | 'Standard'\n | 'CrewEnterprise'\n | 'CrewFlowsStarter'\n\nexport type Template = ChatTemplate | StarterTemplate\n\nconst BASE_URL = 'https://registry.copilotkit.ai/r'\n\nexport const templateMapping = {\n // Runtimes\n RemoteEndpoint: `${BASE_URL}/remote-endpoint-starter.json`,\n LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-starter.json`,\n\n // CrewAI\n CrewEnterprise: [`${BASE_URL}/coagents-crew-starter.json`],\n CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],\n\n // LangGraph\n LangGraphGeneric: `${BASE_URL}/generic-lg-starter.json`,\n LangGraphStarter: [`${BASE_URL}/langgraph-platform-starter.json`, `${BASE_URL}/coagents-starter-ui.json`],\n\n // No Agent\n StandardStarter: `${BASE_URL}/standard-starter.json`,\n StandardRuntime: `${BASE_URL}/standard-runtime.json`,\n\n // MCP\n McpStarter: `${BASE_URL}/mcp-starter.json`,\n McpRuntime: `${BASE_URL}/mcp-starter-runtime.json`,\n}\n"],"mappings":"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","names":[]}
|
|
@@ -7,7 +7,6 @@ declare const CHAT_COMPONENTS: readonly ["CopilotChat", "CopilotSidebar", "Headl
|
|
|
7
7
|
declare const LANGGRAPH_AGENTS: readonly ["Python Starter", "TypeScript Starter"];
|
|
8
8
|
declare const CREW_FLOW_TEMPLATES: readonly ["Starter"];
|
|
9
9
|
declare const YES_NO: readonly ["Yes", "No"];
|
|
10
|
-
declare const DEPLOYMENT_CHOICES: readonly ["Copilot Cloud", "Self-hosted"];
|
|
11
10
|
declare const sanitizers: {
|
|
12
11
|
url: (value: string) => string;
|
|
13
12
|
trim: (value: string) => string;
|
|
@@ -20,13 +19,13 @@ declare const ChatComponentSchema: z.ZodEnum<["CopilotChat", "CopilotSidebar", "
|
|
|
20
19
|
declare const LangGraphAgentSchema: z.ZodEnum<["Python Starter", "TypeScript Starter"]>;
|
|
21
20
|
declare const CrewFlowTemplateSchema: z.ZodEnum<["Starter"]>;
|
|
22
21
|
declare const YesNoSchema: z.ZodEnum<["Yes", "No"]>;
|
|
23
|
-
declare const DeploymentChoiceSchema: z.ZodEnum<["Copilot Cloud", "Self-hosted"]>;
|
|
24
22
|
declare const UrlSchema: z.ZodEffects<z.ZodString, string, unknown>;
|
|
25
23
|
declare const TokenSchema: z.ZodEffects<z.ZodString, string, unknown>;
|
|
26
24
|
declare const ApiKeySchema: z.ZodEffects<z.ZodString, string, unknown>;
|
|
27
25
|
declare const LLMApiKeySchema: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
|
|
28
26
|
declare const NameSchema: z.ZodEffects<z.ZodString, string, unknown>;
|
|
29
27
|
declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
28
|
+
signupForCopilotCloud: z.ZodOptional<z.ZodEnum<["Yes", "No"]>>;
|
|
30
29
|
copilotKitVersion: z.ZodOptional<z.ZodString>;
|
|
31
30
|
mode: z.ZodEnum<["LangGraph", "CrewAI", "Mastra", "LlamaIndex", "Agno", "AG2", "MCP", "Standard"]>;
|
|
32
31
|
chatUi: z.ZodOptional<z.ZodEnum<["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"]>>;
|
|
@@ -46,9 +45,9 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
46
45
|
llmToken: z.ZodOptional<z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>>;
|
|
47
46
|
setupIDEDocs: z.ZodOptional<z.ZodEnum<["Yes", "No"]>>;
|
|
48
47
|
selectedIDE: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["cursor", "windsurf"]>, z.ZodLiteral<"skip">]>>;
|
|
49
|
-
deploymentChoice: z.ZodOptional<z.ZodEnum<["Copilot Cloud", "Self-hosted"]>>;
|
|
50
48
|
}, "strip", z.ZodTypeAny, {
|
|
51
49
|
mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
|
|
50
|
+
signupForCopilotCloud?: "Yes" | "No" | undefined;
|
|
52
51
|
copilotKitVersion?: string | undefined;
|
|
53
52
|
chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
|
|
54
53
|
alreadyDeployed?: "Yes" | "No" | undefined;
|
|
@@ -67,9 +66,9 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
67
66
|
llmToken?: string | undefined;
|
|
68
67
|
setupIDEDocs?: "Yes" | "No" | undefined;
|
|
69
68
|
selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
|
|
70
|
-
deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
|
|
71
69
|
}, {
|
|
72
70
|
mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
|
|
71
|
+
signupForCopilotCloud?: "Yes" | "No" | undefined;
|
|
73
72
|
copilotKitVersion?: string | undefined;
|
|
74
73
|
chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
|
|
75
74
|
alreadyDeployed?: "Yes" | "No" | undefined;
|
|
@@ -88,9 +87,9 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
88
87
|
llmToken?: unknown;
|
|
89
88
|
setupIDEDocs?: "Yes" | "No" | undefined;
|
|
90
89
|
selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
|
|
91
|
-
deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
|
|
92
90
|
}>, {
|
|
93
91
|
mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
|
|
92
|
+
signupForCopilotCloud?: "Yes" | "No" | undefined;
|
|
94
93
|
copilotKitVersion?: string | undefined;
|
|
95
94
|
chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
|
|
96
95
|
alreadyDeployed?: "Yes" | "No" | undefined;
|
|
@@ -109,9 +108,9 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
109
108
|
llmToken?: string | undefined;
|
|
110
109
|
setupIDEDocs?: "Yes" | "No" | undefined;
|
|
111
110
|
selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
|
|
112
|
-
deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
|
|
113
111
|
}, {
|
|
114
112
|
mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
|
|
113
|
+
signupForCopilotCloud?: "Yes" | "No" | undefined;
|
|
115
114
|
copilotKitVersion?: string | undefined;
|
|
116
115
|
chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
|
|
117
116
|
alreadyDeployed?: "Yes" | "No" | undefined;
|
|
@@ -130,9 +129,9 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
130
129
|
llmToken?: unknown;
|
|
131
130
|
setupIDEDocs?: "Yes" | "No" | undefined;
|
|
132
131
|
selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
|
|
133
|
-
deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
|
|
134
132
|
}>, {
|
|
135
133
|
mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
|
|
134
|
+
signupForCopilotCloud?: "Yes" | "No" | undefined;
|
|
136
135
|
copilotKitVersion?: string | undefined;
|
|
137
136
|
chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
|
|
138
137
|
alreadyDeployed?: "Yes" | "No" | undefined;
|
|
@@ -151,9 +150,9 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
151
150
|
llmToken?: string | undefined;
|
|
152
151
|
setupIDEDocs?: "Yes" | "No" | undefined;
|
|
153
152
|
selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
|
|
154
|
-
deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
|
|
155
153
|
}, {
|
|
156
154
|
mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
|
|
155
|
+
signupForCopilotCloud?: "Yes" | "No" | undefined;
|
|
157
156
|
copilotKitVersion?: string | undefined;
|
|
158
157
|
chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
|
|
159
158
|
alreadyDeployed?: "Yes" | "No" | undefined;
|
|
@@ -172,7 +171,6 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
|
172
171
|
llmToken?: unknown;
|
|
173
172
|
setupIDEDocs?: "Yes" | "No" | undefined;
|
|
174
173
|
selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
|
|
175
|
-
deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
|
|
176
174
|
}>;
|
|
177
175
|
type Config = z.infer<typeof ConfigSchema>;
|
|
178
176
|
type Question = {
|
|
@@ -191,6 +189,7 @@ type Question = {
|
|
|
191
189
|
};
|
|
192
190
|
declare const ConfigFlags: {
|
|
193
191
|
booth: _oclif_core_interfaces.BooleanFlag<boolean>;
|
|
192
|
+
'signup-for-copilot-cloud': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
194
193
|
mode: _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
195
194
|
'copilotkit-version': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
196
195
|
'use-copilot-cloud': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
@@ -203,7 +202,6 @@ declare const ConfigFlags: {
|
|
|
203
202
|
'llm-token': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
204
203
|
'setup-ide-docs': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
205
204
|
'selected-ide': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
206
|
-
'deployment-choice': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
207
205
|
};
|
|
208
206
|
|
|
209
|
-
export { ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, type Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema,
|
|
207
|
+
export { ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, type Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema, LANGGRAPH_AGENTS, LLMApiKeySchema, LangGraphAgentSchema, MODES, ModeSchema, NameSchema, type Question, TokenSchema, UrlSchema, YES_NO, YesNoSchema, sanitizers };
|
|
@@ -14,7 +14,6 @@ var CHAT_COMPONENTS = ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopu
|
|
|
14
14
|
var LANGGRAPH_AGENTS = ["Python Starter", "TypeScript Starter"];
|
|
15
15
|
var CREW_FLOW_TEMPLATES = ["Starter"];
|
|
16
16
|
var YES_NO = ["Yes", "No"];
|
|
17
|
-
var DEPLOYMENT_CHOICES = ["Copilot Cloud", "Self-hosted"];
|
|
18
17
|
var sanitizers = {
|
|
19
18
|
// Remove trailing slash from URLs
|
|
20
19
|
url: (value) => {
|
|
@@ -43,7 +42,6 @@ var ChatComponentSchema = z.enum(CHAT_COMPONENTS);
|
|
|
43
42
|
var LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS);
|
|
44
43
|
var CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES);
|
|
45
44
|
var YesNoSchema = z.enum(YES_NO);
|
|
46
|
-
var DeploymentChoiceSchema = z.enum(DEPLOYMENT_CHOICES);
|
|
47
45
|
var UrlSchema = z.preprocess(
|
|
48
46
|
(val) => sanitizers.url(String(val)),
|
|
49
47
|
z.string().url("Please enter a valid URL").min(1, "URL is required")
|
|
@@ -56,6 +54,8 @@ var ApiKeySchema = z.preprocess(
|
|
|
56
54
|
var LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional());
|
|
57
55
|
var NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, "Name is required"));
|
|
58
56
|
var ConfigSchema = z.object({
|
|
57
|
+
// NEW: Early signup field
|
|
58
|
+
signupForCopilotCloud: YesNoSchema.optional(),
|
|
59
59
|
// Core fields
|
|
60
60
|
copilotKitVersion: z.string().optional(),
|
|
61
61
|
mode: ModeSchema,
|
|
@@ -63,7 +63,6 @@ var ConfigSchema = z.object({
|
|
|
63
63
|
// Yes/No fields
|
|
64
64
|
alreadyDeployed: YesNoSchema.optional(),
|
|
65
65
|
fastApiEnabled: YesNoSchema.optional(),
|
|
66
|
-
// DEPRECATED: useCopilotCloud - consolidated with signupForCopilotCloud
|
|
67
66
|
useCopilotCloud: YesNoSchema.optional(),
|
|
68
67
|
// LangGraph specific fields
|
|
69
68
|
langGraphAgent: LangGraphAgentSchema.optional(),
|
|
@@ -81,10 +80,7 @@ var ConfigSchema = z.object({
|
|
|
81
80
|
llmToken: LLMApiKeySchema.optional(),
|
|
82
81
|
// IDE Documentation setup fields
|
|
83
82
|
setupIDEDocs: YesNoSchema.optional(),
|
|
84
|
-
selectedIDE: z.union([z.enum(["cursor", "windsurf"]), z.literal("skip")]).optional()
|
|
85
|
-
// NEW: A/B/C test fields
|
|
86
|
-
deploymentChoice: DeploymentChoiceSchema.optional()
|
|
87
|
-
// For branch B only (Cloud vs Self-hosted)
|
|
83
|
+
selectedIDE: z.union([z.enum(["cursor", "windsurf"]), z.literal("skip")]).optional()
|
|
88
84
|
}).refine(
|
|
89
85
|
(data) => {
|
|
90
86
|
if (data.mode === "CrewAI") {
|
|
@@ -110,6 +106,10 @@ var ConfigSchema = z.object({
|
|
|
110
106
|
);
|
|
111
107
|
var ConfigFlags = {
|
|
112
108
|
booth: Flags.boolean({ description: "Use CopilotKit in booth mode", default: false, char: "b" }),
|
|
109
|
+
"signup-for-copilot-cloud": Flags.string({
|
|
110
|
+
description: "Sign up for Copilot Cloud for error tracking and debugging insights",
|
|
111
|
+
options: YES_NO
|
|
112
|
+
}),
|
|
113
113
|
mode: Flags.string({ description: "How you will be interacting with AI", options: MODES, char: "m" }),
|
|
114
114
|
"copilotkit-version": Flags.string({ description: "CopilotKit version to use (e.g. 1.7.0)" }),
|
|
115
115
|
"use-copilot-cloud": Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: YES_NO }),
|
|
@@ -124,11 +124,6 @@ var ConfigFlags = {
|
|
|
124
124
|
"selected-ide": Flags.string({
|
|
125
125
|
description: "IDE to configure with documentation rules",
|
|
126
126
|
options: ["cursor", "windsurf", "skip"]
|
|
127
|
-
}),
|
|
128
|
-
// NEW: A/B/C test flags
|
|
129
|
-
"deployment-choice": Flags.string({
|
|
130
|
-
description: "Choose between Copilot Cloud or Self-hosted deployment",
|
|
131
|
-
options: DEPLOYMENT_CHOICES
|
|
132
127
|
})
|
|
133
128
|
};
|
|
134
129
|
export {
|
|
@@ -141,8 +136,6 @@ export {
|
|
|
141
136
|
ConfigSchema,
|
|
142
137
|
CrewFlowTemplateSchema,
|
|
143
138
|
CrewTypeSchema,
|
|
144
|
-
DEPLOYMENT_CHOICES,
|
|
145
|
-
DeploymentChoiceSchema,
|
|
146
139
|
LANGGRAPH_AGENTS,
|
|
147
140
|
LLMApiKeySchema,
|
|
148
141
|
LangGraphAgentSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/utils.ts"],"sourcesContent":["import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n// NEW: Deployment choice options for Branch B\nexport const DEPLOYMENT_CHOICES = ['Copilot Cloud', 'Self-hosted'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n// NEW: Deployment choice schema for Branch B\nexport const DeploymentChoiceSchema = z.enum(DEPLOYMENT_CHOICES)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n // DEPRECATED: useCopilotCloud - consolidated with signupForCopilotCloud\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n\n // NEW: A/B/C test fields\n deploymentChoice: DeploymentChoiceSchema.optional(), // For branch B only (Cloud vs Self-hosted)\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n // NEW: A/B/C test flags\n 'deployment-choice': Flags.string({\n description: 'Choose between Copilot Cloud or Self-hosted deployment',\n options: DEPLOYMENT_CHOICES,\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n"],"mappings":";AAAA,SAAQ,SAAQ;AAChB,SAAQ,aAAY;;;ACDb,IAAM,cAAc,CAAC,QAAyB;AACnD,SAAO,IAAI,SAAS,WAAW,KAAK,IAAI,SAAS,WAAW,KAAK,IAAI,SAAS,SAAS;AACzF;;;ADGO,IAAM,QAAQ,CAAC,aAAa,UAAU,UAAU,cAAc,QAAQ,OAAO,OAAO,UAAU;AAC9F,IAAM,aAAa,CAAC,SAAS,OAAO;AACpC,IAAM,kBAAkB,CAAC,eAAe,kBAAkB,YAAY,cAAc;AACpF,IAAM,mBAAmB,CAAC,kBAAkB,oBAAoB;AAChE,IAAM,sBAAsB,CAAC,SAAS;AACtC,IAAM,SAAS,CAAC,OAAO,IAAI;AAE3B,IAAM,qBAAqB,CAAC,iBAAiB,aAAa;AAG1D,IAAM,aAAa;AAAA;AAAA,EAExB,KAAK,CAAC,UAA0B;AAC9B,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAAA,EACxC;AAAA;AAAA,EAGA,MAAM,CAAC,UAA0B;AAC/B,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,KAAK;AAAA,EACpB;AAAA;AAAA,EAGA,WAAW,CAAC,UAA0B;AACpC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,YAAY,EAAE,KAAK;AAAA,EAClC;AAAA;AAAA,EAGA,QAAQ,CAAC,UAA0B;AACjC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,EAAE;AAAA,EACvC;AACF;AAKO,IAAM,aAAa,EAAE,KAAK,KAAK;AAC/B,IAAM,iBAAiB,EAAE,KAAK,UAAU;AACxC,IAAM,sBAAsB,EAAE,KAAK,eAAe;AAClD,IAAM,uBAAuB,EAAE,KAAK,gBAAgB;AACpD,IAAM,yBAAyB,EAAE,KAAK,mBAAmB;AACzD,IAAM,cAAc,EAAE,KAAK,MAAM;AAEjC,IAAM,yBAAyB,EAAE,KAAK,kBAAkB;AAGxD,IAAM,YAAY,EAAE;AAAA,EACzB,CAAC,QAAQ,WAAW,IAAI,OAAO,GAAG,CAAC;AAAA,EACnC,EAAE,OAAO,EAAE,IAAI,0BAA0B,EAAE,IAAI,GAAG,iBAAiB;AACrE;AAGO,IAAM,cAAc,EAAE,WAAW,CAAC,QAAQ,WAAW,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB,CAAC;AAG9G,IAAM,eAAe,EAAE;AAAA,EAC5B,CAAC,QAAQ,WAAW,OAAO,OAAO,GAAG,CAAC;AAAA,EACtC,EAAE,OAAO,EAAE,IAAI,GAAG,qBAAqB;AACzC;AAEO,IAAM,kBAAkB,EAAE,WAAW,CAAC,QAAQ,WAAW,OAAO,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC;AAGnG,IAAM,aAAa,EAAE,WAAW,CAAC,QAAQ,WAAW,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,kBAAkB,CAAC;AAG5G,IAAM,eAAe,EACzB,OAAO;AAAA;AAAA,EAEN,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA,EACvC,MAAM;AAAA,EACN,QAAQ,oBAAoB,SAAS;AAAA;AAAA,EAGrC,iBAAiB,YAAY,SAAS;AAAA,EACtC,gBAAgB,YAAY,SAAS;AAAA;AAAA,EAErC,iBAAiB,YAAY,SAAS;AAAA;AAAA,EAGtC,gBAAgB,qBAAqB,SAAS;AAAA,EAC9C,mBAAmB,YAAY,SAAS;AAAA,EACxC,sBAAsB,UAAU,SAAS;AAAA,EACzC,4BAA4B,UAAU,SAAS;AAAA;AAAA,EAG/C,UAAU,eAAe,SAAS;AAAA,EAClC,UAAU,WAAW,SAAS;AAAA,EAC9B,SAAS,UAAU,SAAS;AAAA,EAC5B,iBAAiB,YAAY,SAAS;AAAA;AAAA,EAGtC,0BAA0B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,iBAAiB,aAAa,SAAS;AAAA,EACvC,UAAU,gBAAgB,SAAS;AAAA;AAAA,EAGnC,cAAc,YAAY,SAAS;AAAA,EACnC,aAAa,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,UAAU,CAAC,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,SAAS;AAAA;AAAA,EAGnF,kBAAkB,uBAAuB,SAAS;AAAA;AACpD,CAAC,EACA;AAAA,EACC,CAAC,SAAS;AAER,QAAI,KAAK,SAAS,UAAU;AAC1B,aAAO,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,MAAM,CAAC,WAAW,iBAAiB;AAAA,EACrC;AACF,EACC;AAAA,EACC,CAAC,SAAS;AAER,QAAI,KAAK,SAAS,eAAe,KAAK,oBAAoB,SAAS,KAAK,sBAAsB,OAAO;AACnG,aAAQ,CAAC,CAAC,KAAK,wBAAwB,CAAC,CAAC,KAAK,mBAAoB,YAAY,KAAK,wBAAwB,EAAE;AAAA,IAC/G;AACA,WAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,MAAM,CAAC,wBAAwB,iBAAiB;AAAA,EAClD;AACF;AAmBK,IAAM,cAAc;AAAA,EACzB,OAAO,MAAM,QAAQ,EAAC,aAAa,gCAAgC,SAAS,OAAO,MAAM,IAAG,CAAC;AAAA,EAC7F,MAAM,MAAM,OAAO,EAAC,aAAa,uCAAuC,SAAS,OAAO,MAAM,IAAG,CAAC;AAAA,EAClG,sBAAsB,MAAM,OAAO,EAAC,aAAa,yCAAwC,CAAC;AAAA,EAC1F,qBAAqB,MAAM,OAAO,EAAC,aAAa,kDAAkD,SAAS,OAAM,CAAC;AAAA,EAClH,mBAAmB,MAAM,OAAO,EAAC,aAAa,mCAAmC,SAAS,iBAAgB,CAAC;AAAA,EAC3G,aAAa,MAAM,OAAO,EAAC,aAAa,8BAA8B,SAAS,WAAU,CAAC;AAAA,EAC1F,aAAa,MAAM,OAAO,EAAC,aAAa,6BAA4B,CAAC;AAAA,EACrE,YAAY,MAAM,OAAO,EAAC,aAAa,qCAAoC,CAAC;AAAA,EAC5E,qBAAqB,MAAM,OAAO,EAAC,aAAa,yCAAwC,CAAC;AAAA,EACzF,qBAAqB,MAAM,OAAO,EAAC,aAAa,gDAA+C,CAAC;AAAA,EAChG,aAAa,MAAM,OAAO,EAAC,aAAa,0CAAyC,CAAC;AAAA,EAClF,kBAAkB,MAAM,OAAO,EAAC,aAAa,mDAAmD,SAAS,OAAM,CAAC;AAAA,EAChH,gBAAgB,MAAM,OAAO;AAAA,IAC3B,aAAa;AAAA,IACb,SAAS,CAAC,UAAU,YAAY,MAAM;AAAA,EACxC,CAAC;AAAA;AAAA,EAED,qBAAqB,MAAM,OAAO;AAAA,IAChC,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC;AACH;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/utils.ts"],"sourcesContent":["import {z} from 'zod'\nimport {Flags} from '@oclif/core'\nimport {isLocalhost} from '../utils.js'\n\n// ===== Core Constants =====\nexport const MODES = ['LangGraph', 'CrewAI', 'Mastra', 'LlamaIndex', 'Agno', 'AG2', 'MCP', 'Standard'] as const\nexport const CREW_TYPES = ['Crews', 'Flows'] as const\nexport const CHAT_COMPONENTS = ['CopilotChat', 'CopilotSidebar', 'Headless', 'CopilotPopup'] as const\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter'] as const\nexport const CREW_FLOW_TEMPLATES = ['Starter'] as const\nexport const YES_NO = ['Yes', 'No'] as const\n\n// ===== Sanitizers =====\nexport const sanitizers = {\n // Remove trailing slash from URLs\n url: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\/+$/, '')\n },\n\n // Trim whitespace from strings\n trim: (value: string): string => {\n if (!value) return value\n return value.trim()\n },\n\n // Lowercase strings\n lowercase: (value: string): string => {\n if (!value) return value\n return value.toLowerCase().trim()\n },\n\n // Clean API keys (remove whitespace)\n apiKey: (value: string): string => {\n if (!value) return value\n return value.trim().replace(/\\s/g, '')\n },\n}\n\n// ===== Zod Schemas =====\n\n// Basic schemas\nexport const ModeSchema = z.enum(MODES)\nexport const CrewTypeSchema = z.enum(CREW_TYPES)\nexport const ChatComponentSchema = z.enum(CHAT_COMPONENTS)\nexport const LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS)\nexport const CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES)\nexport const YesNoSchema = z.enum(YES_NO)\n\n// URL validation schema with preprocessing to remove trailing slash\nexport const UrlSchema = z.preprocess(\n (val) => sanitizers.url(String(val)),\n z.string().url('Please enter a valid URL').min(1, 'URL is required'),\n)\n\n// Token validation schema with preprocessing to trim\nexport const TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Token is required'))\n\n// API key validation schema with preprocessing to remove whitespace\nexport const ApiKeySchema = z.preprocess(\n (val) => sanitizers.apiKey(String(val)),\n z.string().min(1, 'API key is required'),\n)\n\nexport const LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional())\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, 'Name is required'))\n\n// Config schema\nexport const ConfigSchema = z\n .object({\n // NEW: Early signup field\n signupForCopilotCloud: YesNoSchema.optional(),\n\n // Core fields\n copilotKitVersion: z.string().optional(),\n mode: ModeSchema,\n chatUi: ChatComponentSchema.optional(),\n\n // Yes/No fields\n alreadyDeployed: YesNoSchema.optional(),\n fastApiEnabled: YesNoSchema.optional(),\n useCopilotCloud: YesNoSchema.optional(),\n\n // LangGraph specific fields\n langGraphAgent: LangGraphAgentSchema.optional(),\n langGraphPlatform: YesNoSchema.optional(),\n langGraphPlatformUrl: UrlSchema.optional(),\n langGraphRemoteEndpointURL: UrlSchema.optional(),\n\n // CrewAI specific fields\n crewType: CrewTypeSchema.optional(),\n crewName: NameSchema.optional(),\n crewUrl: UrlSchema.optional(),\n crewBearerToken: TokenSchema.optional(),\n\n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: LLMApiKeySchema.optional(),\n\n // IDE Documentation setup fields\n setupIDEDocs: YesNoSchema.optional(),\n selectedIDE: z.union([z.enum(['cursor', 'windsurf']), z.literal('skip')]).optional(),\n })\n .refine(\n (data) => {\n // If CrewAI is selected, require crew URL and bearer token\n if (data.mode === 'CrewAI') {\n return !!data.crewUrl && !!data.crewBearerToken\n }\n return true\n },\n {\n message: 'Crew URL and bearer token are required for CrewAI',\n path: ['crewUrl', 'crewBearerToken'],\n },\n )\n .refine(\n (data) => {\n // If LangGraph is selected with LangGraph Platform, require platform URL and LangSmith API key\n if (data.mode === 'LangGraph' && data.alreadyDeployed === 'Yes' && data.langGraphPlatform === 'Yes') {\n return (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) || isLocalhost(data.langGraphPlatformUrl || '')\n }\n return true\n },\n {\n message: 'LangGraph Platform URL and LangSmith API key are required',\n path: ['langGraphPlatformUrl', 'langSmithApiKey'],\n },\n )\n\n// Export the inferred type from the schema\nexport type Config = z.infer<typeof ConfigSchema>\n\n// Question type definition with improved validation and sanitization\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: keyof Config\n message: string\n choices?: readonly string[] | (() => Promise<{name: string; value: string}[]>)\n default?: string\n when?: (answers: Partial<Config>) => boolean | Promise<boolean>\n sensitive?: boolean\n validate?: (input: string) => true | string // Return true if valid, error message string if invalid\n sanitize?: (input: string) => string // Function to sanitize input before validation\n}\n\n// CLI flags definition with descriptions\nexport const ConfigFlags = {\n booth: Flags.boolean({description: 'Use CopilotKit in booth mode', default: false, char: 'b'}),\n 'signup-for-copilot-cloud': Flags.string({\n description: 'Sign up for Copilot Cloud for error tracking and debugging insights',\n options: YES_NO,\n }),\n mode: Flags.string({description: 'How you will be interacting with AI', options: MODES, char: 'm'}),\n 'copilotkit-version': Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n 'use-copilot-cloud': Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n 'langgraph-agent': Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n 'crew-type': Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n 'crew-name': Flags.string({description: 'Name for your CrewAI agent'}),\n 'crew-url': Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n 'crew-bearer-token': Flags.string({description: 'Bearer token for CrewAI authentication'}),\n 'langsmith-api-key': Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n 'llm-token': Flags.string({description: 'API key for your preferred LLM provider'}),\n 'setup-ide-docs': Flags.string({description: 'Setup IDE documentation rules for AI assistance', options: YES_NO}),\n 'selected-ide': Flags.string({\n description: 'IDE to configure with documentation rules',\n options: ['cursor', 'windsurf', 'skip'],\n }),\n}\n","export const isLocalhost = (url: string): boolean => {\n return url.includes('localhost') || url.includes('127.0.0.1') || url.includes('0.0.0.0')\n}\n"],"mappings":";AAAA,SAAQ,SAAQ;AAChB,SAAQ,aAAY;;;ACDb,IAAM,cAAc,CAAC,QAAyB;AACnD,SAAO,IAAI,SAAS,WAAW,KAAK,IAAI,SAAS,WAAW,KAAK,IAAI,SAAS,SAAS;AACzF;;;ADGO,IAAM,QAAQ,CAAC,aAAa,UAAU,UAAU,cAAc,QAAQ,OAAO,OAAO,UAAU;AAC9F,IAAM,aAAa,CAAC,SAAS,OAAO;AACpC,IAAM,kBAAkB,CAAC,eAAe,kBAAkB,YAAY,cAAc;AACpF,IAAM,mBAAmB,CAAC,kBAAkB,oBAAoB;AAChE,IAAM,sBAAsB,CAAC,SAAS;AACtC,IAAM,SAAS,CAAC,OAAO,IAAI;AAG3B,IAAM,aAAa;AAAA;AAAA,EAExB,KAAK,CAAC,UAA0B;AAC9B,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAAA,EACxC;AAAA;AAAA,EAGA,MAAM,CAAC,UAA0B;AAC/B,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,KAAK;AAAA,EACpB;AAAA;AAAA,EAGA,WAAW,CAAC,UAA0B;AACpC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,YAAY,EAAE,KAAK;AAAA,EAClC;AAAA;AAAA,EAGA,QAAQ,CAAC,UAA0B;AACjC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,EAAE;AAAA,EACvC;AACF;AAKO,IAAM,aAAa,EAAE,KAAK,KAAK;AAC/B,IAAM,iBAAiB,EAAE,KAAK,UAAU;AACxC,IAAM,sBAAsB,EAAE,KAAK,eAAe;AAClD,IAAM,uBAAuB,EAAE,KAAK,gBAAgB;AACpD,IAAM,yBAAyB,EAAE,KAAK,mBAAmB;AACzD,IAAM,cAAc,EAAE,KAAK,MAAM;AAGjC,IAAM,YAAY,EAAE;AAAA,EACzB,CAAC,QAAQ,WAAW,IAAI,OAAO,GAAG,CAAC;AAAA,EACnC,EAAE,OAAO,EAAE,IAAI,0BAA0B,EAAE,IAAI,GAAG,iBAAiB;AACrE;AAGO,IAAM,cAAc,EAAE,WAAW,CAAC,QAAQ,WAAW,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB,CAAC;AAG9G,IAAM,eAAe,EAAE;AAAA,EAC5B,CAAC,QAAQ,WAAW,OAAO,OAAO,GAAG,CAAC;AAAA,EACtC,EAAE,OAAO,EAAE,IAAI,GAAG,qBAAqB;AACzC;AAEO,IAAM,kBAAkB,EAAE,WAAW,CAAC,QAAQ,WAAW,OAAO,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC;AAGnG,IAAM,aAAa,EAAE,WAAW,CAAC,QAAQ,WAAW,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,kBAAkB,CAAC;AAG5G,IAAM,eAAe,EACzB,OAAO;AAAA;AAAA,EAEN,uBAAuB,YAAY,SAAS;AAAA;AAAA,EAG5C,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA,EACvC,MAAM;AAAA,EACN,QAAQ,oBAAoB,SAAS;AAAA;AAAA,EAGrC,iBAAiB,YAAY,SAAS;AAAA,EACtC,gBAAgB,YAAY,SAAS;AAAA,EACrC,iBAAiB,YAAY,SAAS;AAAA;AAAA,EAGtC,gBAAgB,qBAAqB,SAAS;AAAA,EAC9C,mBAAmB,YAAY,SAAS;AAAA,EACxC,sBAAsB,UAAU,SAAS;AAAA,EACzC,4BAA4B,UAAU,SAAS;AAAA;AAAA,EAG/C,UAAU,eAAe,SAAS;AAAA,EAClC,UAAU,WAAW,SAAS;AAAA,EAC9B,SAAS,UAAU,SAAS;AAAA,EAC5B,iBAAiB,YAAY,SAAS;AAAA;AAAA,EAGtC,0BAA0B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,iBAAiB,aAAa,SAAS;AAAA,EACvC,UAAU,gBAAgB,SAAS;AAAA;AAAA,EAGnC,cAAc,YAAY,SAAS;AAAA,EACnC,aAAa,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,UAAU,CAAC,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,SAAS;AACrF,CAAC,EACA;AAAA,EACC,CAAC,SAAS;AAER,QAAI,KAAK,SAAS,UAAU;AAC1B,aAAO,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,MAAM,CAAC,WAAW,iBAAiB;AAAA,EACrC;AACF,EACC;AAAA,EACC,CAAC,SAAS;AAER,QAAI,KAAK,SAAS,eAAe,KAAK,oBAAoB,SAAS,KAAK,sBAAsB,OAAO;AACnG,aAAQ,CAAC,CAAC,KAAK,wBAAwB,CAAC,CAAC,KAAK,mBAAoB,YAAY,KAAK,wBAAwB,EAAE;AAAA,IAC/G;AACA,WAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,MAAM,CAAC,wBAAwB,iBAAiB;AAAA,EAClD;AACF;AAmBK,IAAM,cAAc;AAAA,EACzB,OAAO,MAAM,QAAQ,EAAC,aAAa,gCAAgC,SAAS,OAAO,MAAM,IAAG,CAAC;AAAA,EAC7F,4BAA4B,MAAM,OAAO;AAAA,IACvC,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC;AAAA,EACD,MAAM,MAAM,OAAO,EAAC,aAAa,uCAAuC,SAAS,OAAO,MAAM,IAAG,CAAC;AAAA,EAClG,sBAAsB,MAAM,OAAO,EAAC,aAAa,yCAAwC,CAAC;AAAA,EAC1F,qBAAqB,MAAM,OAAO,EAAC,aAAa,kDAAkD,SAAS,OAAM,CAAC;AAAA,EAClH,mBAAmB,MAAM,OAAO,EAAC,aAAa,mCAAmC,SAAS,iBAAgB,CAAC;AAAA,EAC3G,aAAa,MAAM,OAAO,EAAC,aAAa,8BAA8B,SAAS,WAAU,CAAC;AAAA,EAC1F,aAAa,MAAM,OAAO,EAAC,aAAa,6BAA4B,CAAC;AAAA,EACrE,YAAY,MAAM,OAAO,EAAC,aAAa,qCAAoC,CAAC;AAAA,EAC5E,qBAAqB,MAAM,OAAO,EAAC,aAAa,yCAAwC,CAAC;AAAA,EACzF,qBAAqB,MAAM,OAAO,EAAC,aAAa,gDAA+C,CAAC;AAAA,EAChG,aAAa,MAAM,OAAO,EAAC,aAAa,0CAAyC,CAAC;AAAA,EAClF,kBAAkB,MAAM,OAAO,EAAC,aAAa,mDAAmD,SAAS,OAAM,CAAC;AAAA,EAChH,gBAAgB,MAAM,OAAO;AAAA,IAC3B,aAAa;AAAA,IACb,SAAS,CAAC,UAAU,YAAY,MAAM;AAAA,EACxC,CAAC;AACH;","names":[]}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
var BASE_URL = "https://registry.copilotkit.ai/r";
|
|
3
3
|
var templateMapping = {
|
|
4
4
|
// Runtimes
|
|
5
|
-
RemoteEndpoint: `${BASE_URL}/remote-endpoint.json`,
|
|
6
|
-
LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-
|
|
5
|
+
RemoteEndpoint: `${BASE_URL}/remote-endpoint-starter.json`,
|
|
6
|
+
LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-starter.json`,
|
|
7
7
|
// CrewAI
|
|
8
8
|
CrewEnterprise: [`${BASE_URL}/coagents-crew-starter.json`],
|
|
9
9
|
CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/init/types/templates.ts"],"sourcesContent":["export type ChatTemplate = 'CopilotChat' | 'CopilotPopup' | 'CopilotSidebar'\n\nexport type StarterTemplate =\n | 'LangGraphPlatform'\n | 'RemoteEndpoint'\n | 'Standard'\n | 'CrewEnterprise'\n | 'CrewFlowsStarter'\n\nexport type Template = ChatTemplate | StarterTemplate\n\nconst BASE_URL = 'https://registry.copilotkit.ai/r'\n\nexport const templateMapping = {\n // Runtimes\n RemoteEndpoint: `${BASE_URL}/remote-endpoint.json`,\n LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/init/types/templates.ts"],"sourcesContent":["export type ChatTemplate = 'CopilotChat' | 'CopilotPopup' | 'CopilotSidebar'\n\nexport type StarterTemplate =\n | 'LangGraphPlatform'\n | 'RemoteEndpoint'\n | 'Standard'\n | 'CrewEnterprise'\n | 'CrewFlowsStarter'\n\nexport type Template = ChatTemplate | StarterTemplate\n\nconst BASE_URL = 'https://registry.copilotkit.ai/r'\n\nexport const templateMapping = {\n // Runtimes\n RemoteEndpoint: `${BASE_URL}/remote-endpoint-starter.json`,\n LangGraphPlatformRuntime: `${BASE_URL}/langgraph-platform-starter.json`,\n\n // CrewAI\n CrewEnterprise: [`${BASE_URL}/coagents-crew-starter.json`],\n CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],\n\n // LangGraph\n LangGraphGeneric: `${BASE_URL}/generic-lg-starter.json`,\n LangGraphStarter: [`${BASE_URL}/langgraph-platform-starter.json`, `${BASE_URL}/coagents-starter-ui.json`],\n\n // No Agent\n StandardStarter: `${BASE_URL}/standard-starter.json`,\n StandardRuntime: `${BASE_URL}/standard-runtime.json`,\n\n // MCP\n McpStarter: `${BASE_URL}/mcp-starter.json`,\n McpRuntime: `${BASE_URL}/mcp-starter-runtime.json`,\n}\n"],"mappings":";AAWA,IAAM,WAAW;AAEV,IAAM,kBAAkB;AAAA;AAAA,EAE7B,gBAAgB,GAAG,QAAQ;AAAA,EAC3B,0BAA0B,GAAG,QAAQ;AAAA;AAAA,EAGrC,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B;AAAA,EACzD,qBAAqB,CAAC,GAAG,QAAQ,qCAAqC;AAAA;AAAA,EAGtE,kBAAkB,GAAG,QAAQ;AAAA,EAC7B,kBAAkB,CAAC,GAAG,QAAQ,oCAAoC,GAAG,QAAQ,2BAA2B;AAAA;AAAA,EAGxG,iBAAiB,GAAG,QAAQ;AAAA,EAC5B,iBAAiB,GAAG,QAAQ;AAAA;AAAA,EAG5B,YAAY,GAAG,QAAQ;AAAA,EACvB,YAAY,GAAG,QAAQ;AACzB;","names":[]}
|
|
@@ -25,10 +25,6 @@ declare class AnalyticsService {
|
|
|
25
25
|
* Check if a feature flag is enabled
|
|
26
26
|
*/
|
|
27
27
|
isFeatureEnabled(flagKey: string): Promise<boolean>;
|
|
28
|
-
/**
|
|
29
|
-
* Get feature flag payload
|
|
30
|
-
*/
|
|
31
|
-
getFeatureFlagPayload(flagKey: string): Promise<any>;
|
|
32
28
|
/**
|
|
33
29
|
* Shutdown analytics services
|
|
34
30
|
*/
|
|
@@ -100,22 +100,6 @@ var AnalyticsService = class {
|
|
|
100
100
|
return false;
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Get feature flag payload
|
|
105
|
-
*/
|
|
106
|
-
async getFeatureFlagPayload(flagKey) {
|
|
107
|
-
if (!this.posthog) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
try {
|
|
111
|
-
const distinctId = this.userId || this.getAnonymousId();
|
|
112
|
-
const payload = await this.posthog.getFeatureFlagPayload(flagKey, distinctId);
|
|
113
|
-
return payload;
|
|
114
|
-
} catch (error) {
|
|
115
|
-
console.warn(`Failed to get feature flag payload ${flagKey}:`, error);
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
103
|
/**
|
|
120
104
|
* Shutdown analytics services
|
|
121
105
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/analytics.service.ts"],"sourcesContent":["import {Analytics} from '@segment/analytics-node'\nimport {PostHog} from 'posthog-node'\nimport {AnalyticsEvents} from './events.js'\nimport Conf from 'conf'\n\nexport class AnalyticsService {\n private segment: Analytics | undefined\n private posthog: PostHog | undefined\n private globalProperties: Record<string, any> = {}\n private userId: string | undefined\n private email: string | undefined\n private organizationId: string | undefined\n private config = new Conf({projectName: 'CopilotKitCLI'})\n\n constructor(\n private readonly authData?: {\n userId: string\n email: string\n organizationId: string\n },\n ) {\n if (process.env.SEGMENT_DISABLED === 'true') {\n return\n }\n\n const segmentWriteKey = process.env.SEGMENT_WRITE_KEY || '9Pv6QyExYef2P4hPz4gks6QAvNMi2AOf'\n\n this.globalProperties = {\n service: 'cli',\n }\n\n if (this.authData?.userId) {\n this.userId = this.authData.userId\n }\n\n if (this.authData?.email) {\n this.email = this.authData.email\n this.globalProperties.email = this.authData.email\n }\n\n if (this.authData?.organizationId) {\n this.organizationId = this.authData.organizationId\n }\n\n this.segment = new Analytics({\n writeKey: segmentWriteKey,\n disable: process.env.SEGMENT_DISABLE === 'true',\n })\n\n // Initialize PostHog for feature flags\n if (process.env.POSTHOG_DISABLED !== 'true') {\n const posthogKey = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = process.env.POSTHOG_HOST || 'https://eu.i.posthog.com'\n\n this.posthog = new PostHog(posthogKey, {\n host: posthogHost,\n })\n }\n\n const config = new Conf({projectName: 'CopilotKitCLI'})\n if (!config.get('anonymousId')) {\n config.set('anonymousId', crypto.randomUUID())\n }\n }\n\n private getAnonymousId(): string {\n const anonymousId = this.config.get('anonymousId')\n if (!anonymousId) {\n const anonymousId = crypto.randomUUID()\n this.config.set('anonymousId', anonymousId)\n return anonymousId\n }\n\n return anonymousId as string\n }\n\n public track<K extends keyof AnalyticsEvents>(\n event: Omit<Parameters<Analytics['track']>[0], 'userId'> & {\n event: K\n properties: AnalyticsEvents[K]\n },\n ): Promise<void> {\n if (!this.segment) {\n return Promise.resolve()\n }\n\n const payload = {\n userId: this.userId ? this.userId : undefined,\n email: this.email ? this.email : undefined,\n anonymousId: this.getAnonymousId(),\n event: event.event,\n properties: {\n ...this.globalProperties,\n ...event.properties,\n $groups: this.organizationId\n ? {\n segment_group: this.organizationId,\n }\n : undefined,\n eventProperties: {\n ...event.properties,\n ...this.globalProperties,\n },\n },\n }\n\n return new Promise((resolve, reject) => {\n this.segment!.track(payload, (err) => {\n if (err) {\n // Resolve anyway\n resolve()\n }\n\n resolve()\n })\n })\n }\n\n /**\n * Check if a feature flag is enabled\n */\n public async isFeatureEnabled(flagKey: string): Promise<boolean> {\n if (!this.posthog) {\n return false\n }\n\n try {\n // Use authenticated user ID if available, otherwise use anonymous ID\n const distinctId = this.userId || this.getAnonymousId()\n const flag = await this.posthog.isFeatureEnabled(flagKey, distinctId)\n return Boolean(flag)\n } catch (error) {\n // If there's an error checking the flag, return false (flag disabled)\n console.warn(`Failed to check feature flag ${flagKey}:`, error)\n return false\n }\n }\n\n /**\n *
|
|
1
|
+
{"version":3,"sources":["../../src/services/analytics.service.ts"],"sourcesContent":["import {Analytics} from '@segment/analytics-node'\nimport {PostHog} from 'posthog-node'\nimport {AnalyticsEvents} from './events.js'\nimport Conf from 'conf'\n\nexport class AnalyticsService {\n private segment: Analytics | undefined\n private posthog: PostHog | undefined\n private globalProperties: Record<string, any> = {}\n private userId: string | undefined\n private email: string | undefined\n private organizationId: string | undefined\n private config = new Conf({projectName: 'CopilotKitCLI'})\n\n constructor(\n private readonly authData?: {\n userId: string\n email: string\n organizationId: string\n },\n ) {\n if (process.env.SEGMENT_DISABLED === 'true') {\n return\n }\n\n const segmentWriteKey = process.env.SEGMENT_WRITE_KEY || '9Pv6QyExYef2P4hPz4gks6QAvNMi2AOf'\n\n this.globalProperties = {\n service: 'cli',\n }\n\n if (this.authData?.userId) {\n this.userId = this.authData.userId\n }\n\n if (this.authData?.email) {\n this.email = this.authData.email\n this.globalProperties.email = this.authData.email\n }\n\n if (this.authData?.organizationId) {\n this.organizationId = this.authData.organizationId\n }\n\n this.segment = new Analytics({\n writeKey: segmentWriteKey,\n disable: process.env.SEGMENT_DISABLE === 'true',\n })\n\n // Initialize PostHog for feature flags\n if (process.env.POSTHOG_DISABLED !== 'true') {\n const posthogKey = process.env.POSTHOG_KEY || 'phc_XZdymVYjrph9Mi0xZYGNyCKexxgblXRR1jMENCtdz5Q' // Default key\n const posthogHost = process.env.POSTHOG_HOST || 'https://eu.i.posthog.com'\n\n this.posthog = new PostHog(posthogKey, {\n host: posthogHost,\n })\n }\n\n const config = new Conf({projectName: 'CopilotKitCLI'})\n if (!config.get('anonymousId')) {\n config.set('anonymousId', crypto.randomUUID())\n }\n }\n\n private getAnonymousId(): string {\n const anonymousId = this.config.get('anonymousId')\n if (!anonymousId) {\n const anonymousId = crypto.randomUUID()\n this.config.set('anonymousId', anonymousId)\n return anonymousId\n }\n\n return anonymousId as string\n }\n\n public track<K extends keyof AnalyticsEvents>(\n event: Omit<Parameters<Analytics['track']>[0], 'userId'> & {\n event: K\n properties: AnalyticsEvents[K]\n },\n ): Promise<void> {\n if (!this.segment) {\n return Promise.resolve()\n }\n\n const payload = {\n userId: this.userId ? this.userId : undefined,\n email: this.email ? this.email : undefined,\n anonymousId: this.getAnonymousId(),\n event: event.event,\n properties: {\n ...this.globalProperties,\n ...event.properties,\n $groups: this.organizationId\n ? {\n segment_group: this.organizationId,\n }\n : undefined,\n eventProperties: {\n ...event.properties,\n ...this.globalProperties,\n },\n },\n }\n\n return new Promise((resolve, reject) => {\n this.segment!.track(payload, (err) => {\n if (err) {\n // Resolve anyway\n resolve()\n }\n\n resolve()\n })\n })\n }\n\n /**\n * Check if a feature flag is enabled\n */\n public async isFeatureEnabled(flagKey: string): Promise<boolean> {\n if (!this.posthog) {\n return false\n }\n\n try {\n // Use authenticated user ID if available, otherwise use anonymous ID\n const distinctId = this.userId || this.getAnonymousId()\n const flag = await this.posthog.isFeatureEnabled(flagKey, distinctId)\n return Boolean(flag)\n } catch (error) {\n // If there's an error checking the flag, return false (flag disabled)\n console.warn(`Failed to check feature flag ${flagKey}:`, error)\n return false\n }\n }\n\n /**\n * Shutdown analytics services\n */\n public async shutdown(): Promise<void> {\n if (this.posthog) {\n await this.posthog.shutdown()\n }\n }\n}\n"],"mappings":"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","names":["anonymousId"]}
|
|
@@ -132,22 +132,6 @@ var AnalyticsService = class {
|
|
|
132
132
|
return false;
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
-
/**
|
|
136
|
-
* Get feature flag payload
|
|
137
|
-
*/
|
|
138
|
-
async getFeatureFlagPayload(flagKey) {
|
|
139
|
-
if (!this.posthog) {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
try {
|
|
143
|
-
const distinctId = this.userId || this.getAnonymousId();
|
|
144
|
-
const payload = await this.posthog.getFeatureFlagPayload(flagKey, distinctId);
|
|
145
|
-
return payload;
|
|
146
|
-
} catch (error) {
|
|
147
|
-
console.warn(`Failed to get feature flag payload ${flagKey}:`, error);
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
135
|
/**
|
|
152
136
|
* Shutdown analytics services
|
|
153
137
|
*/
|