copilotkit 0.0.57 → 0.0.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/dist/commands/base-command.js +9 -6
  3. package/dist/commands/base-command.js.map +1 -1
  4. package/dist/commands/create.d.ts +1 -1
  5. package/dist/commands/create.js +234 -59
  6. package/dist/commands/create.js.map +1 -1
  7. package/dist/commands/dev.js +94 -35
  8. package/dist/commands/dev.js.map +1 -1
  9. package/dist/commands/init.d.ts +0 -20
  10. package/dist/commands/init.js +243 -209
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/login.js +44 -20
  13. package/dist/commands/login.js.map +1 -1
  14. package/dist/commands/logout.js +44 -20
  15. package/dist/commands/logout.js.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib/init/ide-docs.d.ts +1 -1
  18. package/dist/lib/init/ide-docs.js +19 -5
  19. package/dist/lib/init/ide-docs.js.map +1 -1
  20. package/dist/lib/init/index.js +171 -67
  21. package/dist/lib/init/index.js.map +1 -1
  22. package/dist/lib/init/questions.d.ts +1 -1
  23. package/dist/lib/init/questions.js +77 -18
  24. package/dist/lib/init/questions.js.map +1 -1
  25. package/dist/lib/init/scaffold/agent.js +30 -23
  26. package/dist/lib/init/scaffold/agent.js.map +1 -1
  27. package/dist/lib/init/scaffold/crew-inputs.js +17 -4
  28. package/dist/lib/init/scaffold/crew-inputs.js.map +1 -1
  29. package/dist/lib/init/scaffold/env.js +14 -11
  30. package/dist/lib/init/scaffold/env.js.map +1 -1
  31. package/dist/lib/init/scaffold/github.js +27 -6
  32. package/dist/lib/init/scaffold/github.js.map +1 -1
  33. package/dist/lib/init/scaffold/index.js +152 -62
  34. package/dist/lib/init/scaffold/index.js.map +1 -1
  35. package/dist/lib/init/scaffold/langgraph-assistants.js +14 -11
  36. package/dist/lib/init/scaffold/langgraph-assistants.js.map +1 -1
  37. package/dist/lib/init/scaffold/packages.js +3 -1
  38. package/dist/lib/init/scaffold/packages.js.map +1 -1
  39. package/dist/lib/init/scaffold/shadcn.js +88 -23
  40. package/dist/lib/init/scaffold/shadcn.js.map +1 -1
  41. package/dist/lib/init/types/index.js +77 -18
  42. package/dist/lib/init/types/index.js.map +1 -1
  43. package/dist/lib/init/types/questions.d.ts +19 -19
  44. package/dist/lib/init/types/questions.js +73 -17
  45. package/dist/lib/init/types/questions.js.map +1 -1
  46. package/dist/lib/init/types/templates.d.ts +2 -2
  47. package/dist/lib/init/types/templates.js +4 -1
  48. package/dist/lib/init/types/templates.js.map +1 -1
  49. package/dist/lib/init/utils.js.map +1 -1
  50. package/dist/services/analytics.service.d.ts +1 -1
  51. package/dist/services/analytics.service.js +4 -1
  52. package/dist/services/analytics.service.js.map +1 -1
  53. package/dist/services/auth.service.d.ts +1 -1
  54. package/dist/services/auth.service.js +35 -14
  55. package/dist/services/auth.service.js.map +1 -1
  56. package/dist/services/events.d.ts +33 -33
  57. package/dist/services/tunnel.service.js.map +1 -1
  58. package/dist/utils/detect-endpoint-type.utils.d.ts +1 -1
  59. package/dist/utils/detect-endpoint-type.utils.js +11 -4
  60. package/dist/utils/detect-endpoint-type.utils.js.map +1 -1
  61. package/dist/utils/trpc.js.map +1 -1
  62. package/dist/utils/version.d.ts +1 -1
  63. package/dist/utils/version.js +1 -1
  64. package/dist/utils/version.js.map +1 -1
  65. package/oclif.manifest.json +6 -163
  66. package/package.json +8 -4
@@ -11,10 +11,27 @@ var isLocalhost = (url) => {
11
11
  };
12
12
 
13
13
  // src/lib/init/types/questions.ts
14
- var MODES = ["LangGraph", "CrewAI", "Mastra", "LlamaIndex", "Agno", "AG2", "MCP", "Standard"];
14
+ var MODES = [
15
+ "LangGraph",
16
+ "CrewAI",
17
+ "Mastra",
18
+ "LlamaIndex",
19
+ "Agno",
20
+ "AG2",
21
+ "MCP",
22
+ "Standard"
23
+ ];
15
24
  var CREW_TYPES = ["Crews", "Flows"];
16
- var CHAT_COMPONENTS = ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"];
17
- var LANGGRAPH_AGENTS = ["Python Starter", "TypeScript Starter"];
25
+ var CHAT_COMPONENTS = [
26
+ "CopilotChat",
27
+ "CopilotSidebar",
28
+ "Headless",
29
+ "CopilotPopup"
30
+ ];
31
+ var LANGGRAPH_AGENTS = [
32
+ "Python Starter",
33
+ "TypeScript Starter"
34
+ ];
18
35
  var CREW_FLOW_TEMPLATES = ["Starter"];
19
36
  var YES_NO = ["Yes", "No"];
20
37
  var DEPLOYMENT_CHOICES = ["Copilot Cloud", "Self-hosted"];
@@ -51,13 +68,22 @@ var UrlSchema = z.preprocess(
51
68
  (val) => sanitizers.url(String(val)),
52
69
  z.string().url("Please enter a valid URL").min(1, "URL is required")
53
70
  );
54
- var TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, "Token is required"));
71
+ var TokenSchema = z.preprocess(
72
+ (val) => sanitizers.trim(String(val)),
73
+ z.string().min(1, "Token is required")
74
+ );
55
75
  var ApiKeySchema = z.preprocess(
56
76
  (val) => sanitizers.apiKey(String(val)),
57
77
  z.string().min(1, "API key is required")
58
78
  );
59
- var LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional());
60
- var NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, "Name is required"));
79
+ var LLMApiKeySchema = z.preprocess(
80
+ (val) => sanitizers.apiKey(String(val)),
81
+ z.string().optional()
82
+ );
83
+ var NameSchema = z.preprocess(
84
+ (val) => sanitizers.trim(String(val)),
85
+ z.string().min(1, "Name is required")
86
+ );
61
87
  var ConfigSchema = z.object({
62
88
  // Core fields
63
89
  copilotKitVersion: z.string().optional(),
@@ -112,18 +138,48 @@ var ConfigSchema = z.object({
112
138
  }
113
139
  );
114
140
  var ConfigFlags = {
115
- booth: Flags.boolean({ description: "Use CopilotKit in booth mode", default: false, char: "b" }),
116
- mode: Flags.string({ description: "How you will be interacting with AI", options: MODES, char: "m" }),
117
- "copilotkit-version": Flags.string({ description: "CopilotKit version to use (e.g. 1.7.0)" }),
118
- "use-copilot-cloud": Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: YES_NO }),
119
- "langgraph-agent": Flags.string({ description: "LangGraph agent template to use", options: LANGGRAPH_AGENTS }),
120
- "crew-type": Flags.string({ description: "CrewAI implementation type", options: CREW_TYPES }),
141
+ booth: Flags.boolean({
142
+ description: "Use CopilotKit in booth mode",
143
+ default: false,
144
+ char: "b"
145
+ }),
146
+ mode: Flags.string({
147
+ description: "How you will be interacting with AI",
148
+ options: MODES,
149
+ char: "m"
150
+ }),
151
+ "copilotkit-version": Flags.string({
152
+ description: "CopilotKit version to use (e.g. 1.7.0)"
153
+ }),
154
+ "use-copilot-cloud": Flags.string({
155
+ description: "Use Copilot Cloud for production-ready hosting",
156
+ options: YES_NO
157
+ }),
158
+ "langgraph-agent": Flags.string({
159
+ description: "LangGraph agent template to use",
160
+ options: LANGGRAPH_AGENTS
161
+ }),
162
+ "crew-type": Flags.string({
163
+ description: "CrewAI implementation type",
164
+ options: CREW_TYPES
165
+ }),
121
166
  "crew-name": Flags.string({ description: "Name for your CrewAI agent" }),
122
- "crew-url": Flags.string({ description: "URL endpoint for your CrewAI agent" }),
123
- "crew-bearer-token": Flags.string({ description: "Bearer token for CrewAI authentication" }),
124
- "langsmith-api-key": Flags.string({ description: "LangSmith API key for LangGraph observability" }),
125
- "llm-token": Flags.string({ description: "API key for your preferred LLM provider" }),
126
- "setup-ide-docs": Flags.string({ description: "Setup IDE documentation rules for AI assistance", options: YES_NO }),
167
+ "crew-url": Flags.string({
168
+ description: "URL endpoint for your CrewAI agent"
169
+ }),
170
+ "crew-bearer-token": Flags.string({
171
+ description: "Bearer token for CrewAI authentication"
172
+ }),
173
+ "langsmith-api-key": Flags.string({
174
+ description: "LangSmith API key for LangGraph observability"
175
+ }),
176
+ "llm-token": Flags.string({
177
+ description: "API key for your preferred LLM provider"
178
+ }),
179
+ "setup-ide-docs": Flags.string({
180
+ description: "Setup IDE documentation rules for AI assistance",
181
+ options: YES_NO
182
+ }),
127
183
  "selected-ide": Flags.string({
128
184
  description: "IDE to configure with documentation rules",
129
185
  options: ["cursor", "windsurf", "skip"]
@@ -146,7 +202,10 @@ var templateMapping = {
146
202
  CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],
147
203
  // LangGraph
148
204
  LangGraphGeneric: `${BASE_URL}/generic-lg-starter.json`,
149
- LangGraphStarter: [`${BASE_URL}/langgraph-platform-starter.json`, `${BASE_URL}/coagents-starter-ui.json`],
205
+ LangGraphStarter: [
206
+ `${BASE_URL}/langgraph-platform-starter.json`,
207
+ `${BASE_URL}/coagents-starter-ui.json`
208
+ ],
150
209
  // No Agent
151
210
  StandardStarter: `${BASE_URL}/standard-starter.json`,
152
211
  StandardRuntime: `${BASE_URL}/standard-runtime.json`,
@@ -194,12 +253,18 @@ async function scaffoldShadCN(flags, userAnswers) {
194
253
  }
195
254
  await new Promise((resolve) => setTimeout(resolve, 100));
196
255
  try {
197
- const result = spawn.sync("npx", ["shadcn@latest", "add", ...components], {
198
- stdio: "inherit"
199
- // This ensures stdin/stdout/stderr are all passed through
200
- });
256
+ const result = spawn.sync(
257
+ "npx",
258
+ ["shadcn@latest", "add", ...components],
259
+ {
260
+ stdio: "inherit"
261
+ // This ensures stdin/stdout/stderr are all passed through
262
+ }
263
+ );
201
264
  if (result.status !== 0) {
202
- throw new Error(`The shadcn installation process exited with code ${result.status}`);
265
+ throw new Error(
266
+ `The shadcn installation process exited with code ${result.status}`
267
+ );
203
268
  }
204
269
  } catch (error) {
205
270
  throw error;
@@ -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.langGraphPlatform === 'Yes') {\n components.push(templateMapping.LangGraphPlatformRuntime)\n } else {\n components.push(templateMapping.RemoteEndpoint)\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 components.push(templateMapping.LangGraphGeneric);\n if (userAnswers.langGraphPlatform === \"Yes\") {\n components.push(templateMapping.LangGraphPlatformRuntime);\n } else {\n components.push(templateMapping.RemoteEndpoint);\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 (\n userAnswers.deploymentChoice === \"Self-hosted\" ||\n userAnswers.useCopilotCloud === \"No\"\n ) {\n components.push(templateMapping.McpRuntime);\n }\n break;\n case \"Standard\":\n components.push(templateMapping.StandardStarter);\n if (\n userAnswers.deploymentChoice === \"Self-hosted\" ||\n userAnswers.useCopilotCloud === \"No\"\n ) {\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(\n \"npx\",\n [\"shadcn@latest\", \"add\", ...components],\n {\n stdio: \"inherit\", // This ensures stdin/stdout/stderr are all passed through\n },\n );\n\n if (result.status !== 0) {\n throw new Error(\n `The shadcn installation process exited with code ${result.status}`,\n );\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 = [\n \"LangGraph\",\n \"CrewAI\",\n \"Mastra\",\n \"LlamaIndex\",\n \"Agno\",\n \"AG2\",\n \"MCP\",\n \"Standard\",\n] as const;\nexport const CREW_TYPES = [\"Crews\", \"Flows\"] as const;\nexport const CHAT_COMPONENTS = [\n \"CopilotChat\",\n \"CopilotSidebar\",\n \"Headless\",\n \"CopilotPopup\",\n] as const;\nexport const LANGGRAPH_AGENTS = [\n \"Python Starter\",\n \"TypeScript Starter\",\n] 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(\n (val) => sanitizers.trim(String(val)),\n z.string().min(1, \"Token is required\"),\n);\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(\n (val) => sanitizers.apiKey(String(val)),\n z.string().optional(),\n);\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess(\n (val) => sanitizers.trim(String(val)),\n z.string().min(1, \"Name is required\"),\n);\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\n .union([z.enum([\"cursor\", \"windsurf\"]), z.literal(\"skip\")])\n .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 (\n data.mode === \"LangGraph\" &&\n data.alreadyDeployed === \"Yes\" &&\n data.langGraphPlatform === \"Yes\"\n ) {\n return (\n (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) ||\n isLocalhost(data.langGraphPlatformUrl || \"\")\n );\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?:\n | readonly string[]\n | (() => 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({\n description: \"Use CopilotKit in booth mode\",\n default: false,\n char: \"b\",\n }),\n mode: Flags.string({\n description: \"How you will be interacting with AI\",\n options: MODES,\n char: \"m\",\n }),\n \"copilotkit-version\": Flags.string({\n description: \"CopilotKit version to use (e.g. 1.7.0)\",\n }),\n \"use-copilot-cloud\": Flags.string({\n description: \"Use Copilot Cloud for production-ready hosting\",\n options: YES_NO,\n }),\n \"langgraph-agent\": Flags.string({\n description: \"LangGraph agent template to use\",\n options: LANGGRAPH_AGENTS,\n }),\n \"crew-type\": Flags.string({\n description: \"CrewAI implementation type\",\n options: CREW_TYPES,\n }),\n \"crew-name\": Flags.string({ description: \"Name for your CrewAI agent\" }),\n \"crew-url\": Flags.string({\n description: \"URL endpoint for your CrewAI agent\",\n }),\n \"crew-bearer-token\": Flags.string({\n description: \"Bearer token for CrewAI authentication\",\n }),\n \"langsmith-api-key\": Flags.string({\n description: \"LangSmith API key for LangGraph observability\",\n }),\n \"llm-token\": Flags.string({\n description: \"API key for your preferred LLM provider\",\n }),\n \"setup-ide-docs\": Flags.string({\n description: \"Setup IDE documentation rules for AI assistance\",\n options: YES_NO,\n }),\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 (\n url.includes(\"localhost\") ||\n url.includes(\"127.0.0.1\") ||\n url.includes(\"0.0.0.0\")\n );\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: [\n `${BASE_URL}/langgraph-platform-starter.json`,\n `${BASE_URL}/coagents-starter-ui.json`,\n ],\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":[]}
@@ -8,10 +8,27 @@ var isLocalhost = (url) => {
8
8
  };
9
9
 
10
10
  // src/lib/init/types/questions.ts
11
- var MODES = ["LangGraph", "CrewAI", "Mastra", "LlamaIndex", "Agno", "AG2", "MCP", "Standard"];
11
+ var MODES = [
12
+ "LangGraph",
13
+ "CrewAI",
14
+ "Mastra",
15
+ "LlamaIndex",
16
+ "Agno",
17
+ "AG2",
18
+ "MCP",
19
+ "Standard"
20
+ ];
12
21
  var CREW_TYPES = ["Crews", "Flows"];
13
- var CHAT_COMPONENTS = ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"];
14
- var LANGGRAPH_AGENTS = ["Python Starter", "TypeScript Starter"];
22
+ var CHAT_COMPONENTS = [
23
+ "CopilotChat",
24
+ "CopilotSidebar",
25
+ "Headless",
26
+ "CopilotPopup"
27
+ ];
28
+ var LANGGRAPH_AGENTS = [
29
+ "Python Starter",
30
+ "TypeScript Starter"
31
+ ];
15
32
  var CREW_FLOW_TEMPLATES = ["Starter"];
16
33
  var YES_NO = ["Yes", "No"];
17
34
  var DEPLOYMENT_CHOICES = ["Copilot Cloud", "Self-hosted"];
@@ -48,13 +65,22 @@ var UrlSchema = z.preprocess(
48
65
  (val) => sanitizers.url(String(val)),
49
66
  z.string().url("Please enter a valid URL").min(1, "URL is required")
50
67
  );
51
- var TokenSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, "Token is required"));
68
+ var TokenSchema = z.preprocess(
69
+ (val) => sanitizers.trim(String(val)),
70
+ z.string().min(1, "Token is required")
71
+ );
52
72
  var ApiKeySchema = z.preprocess(
53
73
  (val) => sanitizers.apiKey(String(val)),
54
74
  z.string().min(1, "API key is required")
55
75
  );
56
- var LLMApiKeySchema = z.preprocess((val) => sanitizers.apiKey(String(val)), z.string().optional());
57
- var NameSchema = z.preprocess((val) => sanitizers.trim(String(val)), z.string().min(1, "Name is required"));
76
+ var LLMApiKeySchema = z.preprocess(
77
+ (val) => sanitizers.apiKey(String(val)),
78
+ z.string().optional()
79
+ );
80
+ var NameSchema = z.preprocess(
81
+ (val) => sanitizers.trim(String(val)),
82
+ z.string().min(1, "Name is required")
83
+ );
58
84
  var ConfigSchema = z.object({
59
85
  // Core fields
60
86
  copilotKitVersion: z.string().optional(),
@@ -109,18 +135,48 @@ var ConfigSchema = z.object({
109
135
  }
110
136
  );
111
137
  var ConfigFlags = {
112
- booth: Flags.boolean({ description: "Use CopilotKit in booth mode", default: false, char: "b" }),
113
- mode: Flags.string({ description: "How you will be interacting with AI", options: MODES, char: "m" }),
114
- "copilotkit-version": Flags.string({ description: "CopilotKit version to use (e.g. 1.7.0)" }),
115
- "use-copilot-cloud": Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: YES_NO }),
116
- "langgraph-agent": Flags.string({ description: "LangGraph agent template to use", options: LANGGRAPH_AGENTS }),
117
- "crew-type": Flags.string({ description: "CrewAI implementation type", options: CREW_TYPES }),
138
+ booth: Flags.boolean({
139
+ description: "Use CopilotKit in booth mode",
140
+ default: false,
141
+ char: "b"
142
+ }),
143
+ mode: Flags.string({
144
+ description: "How you will be interacting with AI",
145
+ options: MODES,
146
+ char: "m"
147
+ }),
148
+ "copilotkit-version": Flags.string({
149
+ description: "CopilotKit version to use (e.g. 1.7.0)"
150
+ }),
151
+ "use-copilot-cloud": Flags.string({
152
+ description: "Use Copilot Cloud for production-ready hosting",
153
+ options: YES_NO
154
+ }),
155
+ "langgraph-agent": Flags.string({
156
+ description: "LangGraph agent template to use",
157
+ options: LANGGRAPH_AGENTS
158
+ }),
159
+ "crew-type": Flags.string({
160
+ description: "CrewAI implementation type",
161
+ options: CREW_TYPES
162
+ }),
118
163
  "crew-name": Flags.string({ description: "Name for your CrewAI agent" }),
119
- "crew-url": Flags.string({ description: "URL endpoint for your CrewAI agent" }),
120
- "crew-bearer-token": Flags.string({ description: "Bearer token for CrewAI authentication" }),
121
- "langsmith-api-key": Flags.string({ description: "LangSmith API key for LangGraph observability" }),
122
- "llm-token": Flags.string({ description: "API key for your preferred LLM provider" }),
123
- "setup-ide-docs": Flags.string({ description: "Setup IDE documentation rules for AI assistance", options: YES_NO }),
164
+ "crew-url": Flags.string({
165
+ description: "URL endpoint for your CrewAI agent"
166
+ }),
167
+ "crew-bearer-token": Flags.string({
168
+ description: "Bearer token for CrewAI authentication"
169
+ }),
170
+ "langsmith-api-key": Flags.string({
171
+ description: "LangSmith API key for LangGraph observability"
172
+ }),
173
+ "llm-token": Flags.string({
174
+ description: "API key for your preferred LLM provider"
175
+ }),
176
+ "setup-ide-docs": Flags.string({
177
+ description: "Setup IDE documentation rules for AI assistance",
178
+ options: YES_NO
179
+ }),
124
180
  "selected-ide": Flags.string({
125
181
  description: "IDE to configure with documentation rules",
126
182
  options: ["cursor", "windsurf", "skip"]
@@ -143,7 +199,10 @@ var templateMapping = {
143
199
  CrewFlowsEnterprise: [`${BASE_URL}/coagents-starter-crewai-flows.json`],
144
200
  // LangGraph
145
201
  LangGraphGeneric: `${BASE_URL}/generic-lg-starter.json`,
146
- LangGraphStarter: [`${BASE_URL}/langgraph-platform-starter.json`, `${BASE_URL}/coagents-starter-ui.json`],
202
+ LangGraphStarter: [
203
+ `${BASE_URL}/langgraph-platform-starter.json`,
204
+ `${BASE_URL}/coagents-starter-ui.json`
205
+ ],
147
206
  // No Agent
148
207
  StandardStarter: `${BASE_URL}/standard-starter.json`,
149
208
  StandardRuntime: `${BASE_URL}/standard-runtime.json`,
@@ -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 = [\n \"LangGraph\",\n \"CrewAI\",\n \"Mastra\",\n \"LlamaIndex\",\n \"Agno\",\n \"AG2\",\n \"MCP\",\n \"Standard\",\n] as const;\nexport const CREW_TYPES = [\"Crews\", \"Flows\"] as const;\nexport const CHAT_COMPONENTS = [\n \"CopilotChat\",\n \"CopilotSidebar\",\n \"Headless\",\n \"CopilotPopup\",\n] as const;\nexport const LANGGRAPH_AGENTS = [\n \"Python Starter\",\n \"TypeScript Starter\",\n] 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(\n (val) => sanitizers.trim(String(val)),\n z.string().min(1, \"Token is required\"),\n);\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(\n (val) => sanitizers.apiKey(String(val)),\n z.string().optional(),\n);\n\n// Name validation schema with preprocessing to trim\nexport const NameSchema = z.preprocess(\n (val) => sanitizers.trim(String(val)),\n z.string().min(1, \"Name is required\"),\n);\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\n .union([z.enum([\"cursor\", \"windsurf\"]), z.literal(\"skip\")])\n .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 (\n data.mode === \"LangGraph\" &&\n data.alreadyDeployed === \"Yes\" &&\n data.langGraphPlatform === \"Yes\"\n ) {\n return (\n (!!data.langGraphPlatformUrl && !!data.langSmithApiKey) ||\n isLocalhost(data.langGraphPlatformUrl || \"\")\n );\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?:\n | readonly string[]\n | (() => 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({\n description: \"Use CopilotKit in booth mode\",\n default: false,\n char: \"b\",\n }),\n mode: Flags.string({\n description: \"How you will be interacting with AI\",\n options: MODES,\n char: \"m\",\n }),\n \"copilotkit-version\": Flags.string({\n description: \"CopilotKit version to use (e.g. 1.7.0)\",\n }),\n \"use-copilot-cloud\": Flags.string({\n description: \"Use Copilot Cloud for production-ready hosting\",\n options: YES_NO,\n }),\n \"langgraph-agent\": Flags.string({\n description: \"LangGraph agent template to use\",\n options: LANGGRAPH_AGENTS,\n }),\n \"crew-type\": Flags.string({\n description: \"CrewAI implementation type\",\n options: CREW_TYPES,\n }),\n \"crew-name\": Flags.string({ description: \"Name for your CrewAI agent\" }),\n \"crew-url\": Flags.string({\n description: \"URL endpoint for your CrewAI agent\",\n }),\n \"crew-bearer-token\": Flags.string({\n description: \"Bearer token for CrewAI authentication\",\n }),\n \"langsmith-api-key\": Flags.string({\n description: \"LangSmith API key for LangGraph observability\",\n }),\n \"llm-token\": Flags.string({\n description: \"API key for your preferred LLM provider\",\n }),\n \"setup-ide-docs\": Flags.string({\n description: \"Setup IDE documentation rules for AI assistance\",\n options: YES_NO,\n }),\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 (\n url.includes(\"localhost\") ||\n url.includes(\"127.0.0.1\") ||\n url.includes(\"0.0.0.0\")\n );\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: [\n `${BASE_URL}/langgraph-platform-starter.json`,\n `${BASE_URL}/coagents-starter-ui.json`,\n ],\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":[]}
@@ -48,7 +48,7 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
48
48
  selectedIDE: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["cursor", "windsurf"]>, z.ZodLiteral<"skip">]>>;
49
49
  deploymentChoice: z.ZodOptional<z.ZodEnum<["Copilot Cloud", "Self-hosted"]>>;
50
50
  }, "strip", z.ZodTypeAny, {
51
- mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
51
+ mode: "LangGraph" | "CrewAI" | "Mastra" | "LlamaIndex" | "Agno" | "AG2" | "MCP" | "Standard";
52
52
  copilotKitVersion?: string | undefined;
53
53
  chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
54
54
  alreadyDeployed?: "Yes" | "No" | undefined;
@@ -69,7 +69,7 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
69
69
  selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
70
70
  deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
71
71
  }, {
72
- mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
72
+ mode: "LangGraph" | "CrewAI" | "Mastra" | "LlamaIndex" | "Agno" | "AG2" | "MCP" | "Standard";
73
73
  copilotKitVersion?: string | undefined;
74
74
  chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
75
75
  alreadyDeployed?: "Yes" | "No" | undefined;
@@ -90,7 +90,7 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
90
90
  selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
91
91
  deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
92
92
  }>, {
93
- mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
93
+ mode: "LangGraph" | "CrewAI" | "Mastra" | "LlamaIndex" | "Agno" | "AG2" | "MCP" | "Standard";
94
94
  copilotKitVersion?: string | undefined;
95
95
  chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
96
96
  alreadyDeployed?: "Yes" | "No" | undefined;
@@ -111,7 +111,7 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
111
111
  selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
112
112
  deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
113
113
  }, {
114
- mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
114
+ mode: "LangGraph" | "CrewAI" | "Mastra" | "LlamaIndex" | "Agno" | "AG2" | "MCP" | "Standard";
115
115
  copilotKitVersion?: string | undefined;
116
116
  chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
117
117
  alreadyDeployed?: "Yes" | "No" | undefined;
@@ -132,7 +132,7 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
132
132
  selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
133
133
  deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
134
134
  }>, {
135
- mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
135
+ mode: "LangGraph" | "CrewAI" | "Mastra" | "LlamaIndex" | "Agno" | "AG2" | "MCP" | "Standard";
136
136
  copilotKitVersion?: string | undefined;
137
137
  chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
138
138
  alreadyDeployed?: "Yes" | "No" | undefined;
@@ -153,7 +153,7 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
153
153
  selectedIDE?: "cursor" | "windsurf" | "skip" | undefined;
154
154
  deploymentChoice?: "Copilot Cloud" | "Self-hosted" | undefined;
155
155
  }, {
156
- mode: "CrewAI" | "MCP" | "LangGraph" | "Standard" | "Mastra" | "LlamaIndex" | "Agno" | "AG2";
156
+ mode: "LangGraph" | "CrewAI" | "Mastra" | "LlamaIndex" | "Agno" | "AG2" | "MCP" | "Standard";
157
157
  copilotKitVersion?: string | undefined;
158
158
  chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
159
159
  alreadyDeployed?: "Yes" | "No" | undefined;
@@ -176,7 +176,7 @@ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
176
176
  }>;
177
177
  type Config = z.infer<typeof ConfigSchema>;
178
178
  type Question = {
179
- type: 'input' | 'yes/no' | 'select';
179
+ type: "input" | "yes/no" | "select";
180
180
  name: keyof Config;
181
181
  message: string;
182
182
  choices?: readonly string[] | (() => Promise<{
@@ -192,18 +192,18 @@ type Question = {
192
192
  declare const ConfigFlags: {
193
193
  booth: _oclif_core_interfaces.BooleanFlag<boolean>;
194
194
  mode: _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
195
- 'copilotkit-version': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
196
- 'use-copilot-cloud': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
197
- 'langgraph-agent': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
198
- 'crew-type': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
199
- 'crew-name': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
200
- 'crew-url': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
201
- 'crew-bearer-token': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
202
- 'langsmith-api-key': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
203
- 'llm-token': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
204
- 'setup-ide-docs': _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
205
- '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>;
195
+ "copilotkit-version": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
196
+ "use-copilot-cloud": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
197
+ "langgraph-agent": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
198
+ "crew-type": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
199
+ "crew-name": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
200
+ "crew-url": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
201
+ "crew-bearer-token": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
202
+ "langsmith-api-key": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
203
+ "llm-token": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
204
+ "setup-ide-docs": _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
205
+ "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
207
  };
208
208
 
209
209
  export { ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, type Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema, DEPLOYMENT_CHOICES, DeploymentChoiceSchema, LANGGRAPH_AGENTS, LLMApiKeySchema, LangGraphAgentSchema, MODES, ModeSchema, NameSchema, type Question, TokenSchema, UrlSchema, YES_NO, YesNoSchema, sanitizers };