copilotkit 0.0.24 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/commands/base-command.js +1 -1
  2. package/dist/commands/base-command.js.map +1 -1
  3. package/dist/commands/dev.js +1 -1
  4. package/dist/commands/dev.js.map +1 -1
  5. package/dist/commands/init.js +276 -51
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/login.js +1 -1
  8. package/dist/commands/login.js.map +1 -1
  9. package/dist/commands/logout.js +1 -1
  10. package/dist/commands/logout.js.map +1 -1
  11. package/dist/lib/init/index.d.ts +4 -3
  12. package/dist/lib/init/index.js +203 -19
  13. package/dist/lib/init/index.js.map +1 -1
  14. package/dist/lib/init/questions.d.ts +1 -0
  15. package/dist/lib/init/questions.js +174 -14
  16. package/dist/lib/init/questions.js.map +1 -1
  17. package/dist/lib/init/scaffold/agent.d.ts +1 -0
  18. package/dist/lib/init/scaffold/crew-inputs.js +1 -1
  19. package/dist/lib/init/scaffold/crew-inputs.js.map +1 -1
  20. package/dist/lib/init/scaffold/env.d.ts +1 -0
  21. package/dist/lib/init/scaffold/env.js +3 -4
  22. package/dist/lib/init/scaffold/env.js.map +1 -1
  23. package/dist/lib/init/scaffold/index.d.ts +1 -0
  24. package/dist/lib/init/scaffold/index.js +111 -7
  25. package/dist/lib/init/scaffold/index.js.map +1 -1
  26. package/dist/lib/init/scaffold/langgraph-assistants.js +3 -4
  27. package/dist/lib/init/scaffold/langgraph-assistants.js.map +1 -1
  28. package/dist/lib/init/scaffold/packages.d.ts +1 -0
  29. package/dist/lib/init/scaffold/shadcn.d.ts +1 -0
  30. package/dist/lib/init/scaffold/shadcn.js +107 -2
  31. package/dist/lib/init/scaffold/shadcn.js.map +1 -1
  32. package/dist/lib/init/types/index.d.ts +2 -1
  33. package/dist/lib/init/types/index.js +108 -2
  34. package/dist/lib/init/types/index.js.map +1 -1
  35. package/dist/lib/init/types/questions.d.ts +164 -36
  36. package/dist/lib/init/types/questions.js +109 -3
  37. package/dist/lib/init/types/questions.js.map +1 -1
  38. package/dist/utils/version.d.ts +1 -1
  39. package/dist/utils/version.js +1 -1
  40. package/dist/utils/version.js.map +1 -1
  41. package/oclif.manifest.json +1 -1
  42. 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/types/templates.ts"],"sourcesContent":["import spawn from \"cross-spawn\"\nimport { \n templateMapping, \n Config \n} from \"../types/index.js\"\n\nexport async function scaffoldShadCN(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 if (userAnswers.agentFramework !== 'None') {\n switch (userAnswers.agentFramework) {\n case 'LangGraph':\n if (userAnswers.langGraphAgent && userAnswers.langGraphAgent !== 'None') {\n components.push(...templateMapping.LangGraphStarter)\n } else {\n components.push(templateMapping.LangGraphGeneric)\n }\n break\n case 'CrewAI':\n if (userAnswers.crewType === 'Crews') {\n components.push(...templateMapping.CrewEnterprise)\n } else if (userAnswers.crewFlowAgent) {\n components.push(...templateMapping.CrewFlowsStarter)\n } else {\n components.push(templateMapping.RemoteEndpoint)\n }\n break\n default:\n components.push(templateMapping.RemoteEndpoint)\n break\n }\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}","import { Flags } from \"@oclif/core\"\n\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: Fields\n message: string\n choices?: string[]\n default?: string\n when?: (answers: Record<string, any>) => boolean\n sensitive?: boolean\n}\n\n// Agent framework options\nexport const AGENT_FRAMEWORKS = ['CrewAI', 'LangGraph', 'None'] as const;\nexport type AgentFramework = typeof AGENT_FRAMEWORKS[number];\n\n// CrewAI types\nexport const CREW_TYPES = ['Crews', 'Flows'] as const;\nexport type CrewType = typeof CREW_TYPES[number];\n\n// UI component options\nexport const CHAT_COMPONENTS = ['CopilotChat','CopilotSidebar', 'Headless', 'CopilotPopup'] as const;\nexport type ChatComponent = typeof CHAT_COMPONENTS[number];\n\n// LangGraph agent types\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter', 'None'] as const;\nexport type LangGraphAgent = typeof LANGGRAPH_AGENTS[number];\n\n// CrewAI Flow templates\nexport const CREW_FLOW_TEMPLATES = ['Starter', 'None'] as const;\nexport type CrewFlowTemplate = typeof CREW_FLOW_TEMPLATES[number];\n\n// Yes/No type for consistent options\nexport type YesNo = 'Yes' | 'No';\n\n// All possible field names for questions\nexport type Fields = \n \"copilotKitVersion\" | \n \"agentFramework\" | \n \"alreadyDeployed\" |\n \"fastApiEnabled\" | \n \"useCopilotCloud\" | \n \"chatUi\" | \n \"langGraphAgent\" | \n \"langGraphPlatform\" |\n \"langGraphPlatformUrl\" | \n \"crewType\" | \n \"crewName\" | \n \"langGraphRemoteEndpointURL\" |\n \"crewUrl\" | \n \"crewBearerToken\" | \n \"langSmithApiKey\" | \n \"llmToken\" |\n \"crewFlowAgent\";\n\n// Complete configuration shape that holds all possible answers\nexport interface Config {\n copilotKitVersion: string;\n agentFramework: AgentFramework;\n alreadyDeployed?: YesNo;\n fastApiEnabled?: YesNo;\n useCopilotCloud?: YesNo;\n chatUi: ChatComponent;\n\n // LangGraph\n langGraphAgent?: LangGraphAgent;\n langGraphPlatform?: YesNo;\n langGraphPlatformUrl?: string;\n langGraphRemoteEndpointURL?: string;\n\n // CrewAI\n crewType?: CrewType;\n crewName?: string;\n crewUrl?: string;\n crewBearerToken?: string;\n crewFlowAgent?: string;\n\n // API keys and tokens\n copilotCloudPublicApiKey?: string;\n langSmithApiKey?: string;\n llmToken?: string;\n}\n\n// CLI flags definition - single source of truth for flag descriptions\nexport const ConfigFlags = {\n copilotKitVersion: Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n agentFramework: Flags.string({description: 'Agent framework to power your copilot', options: AGENT_FRAMEWORKS}),\n fastApiEnabled: Flags.string({description: 'Use FastAPI to serve your agent locally', options: ['Yes', 'No']}),\n useCopilotCloud: Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: ['Yes', 'No']}),\n chatUi: Flags.string({description: 'Chat UI component to add to your app', options: CHAT_COMPONENTS}),\n langGraphAgent: Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n crewType: Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n crewName: Flags.string({description: 'Name for your CrewAI agent'}),\n crewUrl: Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n crewBearerToken: Flags.string({description: 'Bearer token for CrewAI authentication'}),\n langSmithApiKey: Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n llmToken: Flags.string({description: 'API key for your preferred LLM provider'}),\n crewFlowAgent: Flags.string({description: 'CrewAI Flow template to use', options: CREW_FLOW_TEMPLATES}),\n}","export type ChatTemplate = \n \"CopilotChat\" |\n \"CopilotPopup\" |\n \"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 \"LangGraphPlatform\": `${BASE_URL}/langgraph-platform-starter.json`,\n \"RemoteEndpoint\": `${BASE_URL}/remote-endpoint-starter.json`,\n \"CrewEnterprise\": [\n `${BASE_URL}/coagents-crew-starter.json`,\n ],\n\n \"LangGraphGeneric\": `${BASE_URL}/generic-lg-starter.json`,\n\n \"CrewFlowsStarter\": [\n `${BASE_URL}/coagents-starter-ui.json`,\n `${BASE_URL}/agent-layout.json`,\n `${BASE_URL}/remote-endpoint.json`\n ],\n\n \"LangGraphStarter\": [\n `${BASE_URL}/langgraph-platform-starter.json`,\n `${BASE_URL}/coagents-starter-ui.json`,\n ],\n\n \"Standard\": `${BASE_URL}/standard-starter.json`,\n \"CopilotChat\": `${BASE_URL}/chat.json`,\n \"CopilotPopup\": `${BASE_URL}/popup.json`,\n \"CopilotSidebar\": `${BASE_URL}/sidebar.json`,\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/types/templates.ts"],"sourcesContent":["import spawn from \"cross-spawn\"\nimport { \n templateMapping, \n Config \n} from \"../types/index.js\"\n\nexport async function scaffoldShadCN(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 if (userAnswers.agentFramework !== 'None') {\n switch (userAnswers.agentFramework) {\n case 'LangGraph':\n if (userAnswers.langGraphAgent && userAnswers.langGraphAgent !== 'None') {\n components.push(...templateMapping.LangGraphStarter)\n } else {\n components.push(templateMapping.LangGraphGeneric)\n }\n break\n case 'CrewAI':\n if (userAnswers.crewType === 'Crews') {\n components.push(...templateMapping.CrewEnterprise)\n } else if (userAnswers.crewFlowAgent) {\n components.push(...templateMapping.CrewFlowsStarter)\n } else {\n components.push(templateMapping.RemoteEndpoint)\n }\n break\n default:\n components.push(templateMapping.RemoteEndpoint)\n break\n }\n } else {\n switch (userAnswers.chatUi) {\n case 'CopilotChat':\n components.push(...templateMapping.CopilotChat)\n break\n case 'CopilotSidebar':\n components.push(...templateMapping.CopilotSidebar)\n break\n case 'CopilotPopup':\n components.push(...templateMapping.CopilotPopup)\n break\n }\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}","import { z } from 'zod';\nimport { Flags } from \"@oclif/core\"\n\n// ===== Core Constants =====\nexport const AGENT_FRAMEWORKS = ['CrewAI', 'LangGraph', 'None'] 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', 'None'] as const;\nexport const CREW_FLOW_TEMPLATES = ['Starter', 'None'] 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 AgentFrameworkSchema = z.enum(AGENT_FRAMEWORKS);\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(\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\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.object({\n // Core fields\n copilotKitVersion: z.string().optional(),\n agentFramework: AgentFrameworkSchema,\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 crewFlowAgent: CrewFlowTemplateSchema.optional(),\n \n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: ApiKeySchema.optional(),\n})\n.refine(\n (data) => {\n // If CrewAI is selected with Crews type, require crew URL and bearer token\n if (data.agentFramework === 'CrewAI' && data.crewType === 'Crews') {\n return !!data.crewUrl && !!data.crewBearerToken;\n }\n return true;\n },\n {\n message: \"Crew URL and bearer token are required for CrewAI Crews\",\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.agentFramework === 'LangGraph' && \n data.alreadyDeployed === 'Yes' && \n data.langGraphPlatform === 'Yes'\n ) {\n return !!data.langGraphPlatformUrl && !!data.langSmithApiKey;\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[];\n default?: string;\n when?: (answers: Partial<Config>) => 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 copilotKitVersion: Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n agentFramework: Flags.string({description: 'Agent framework to power your copilot', options: AGENT_FRAMEWORKS}),\n fastApiEnabled: Flags.string({description: 'Use FastAPI to serve your agent locally', options: YES_NO}),\n useCopilotCloud: Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n chatUi: Flags.string({description: 'Chat UI component to add to your app', options: CHAT_COMPONENTS}),\n langGraphAgent: Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n crewType: Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n crewName: Flags.string({description: 'Name for your CrewAI agent'}),\n crewUrl: Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n crewBearerToken: Flags.string({description: 'Bearer token for CrewAI authentication'}),\n langSmithApiKey: Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n llmToken: Flags.string({description: 'API key for your preferred LLM provider'}),\n crewFlowAgent: Flags.string({description: 'CrewAI Flow template to use', options: CREW_FLOW_TEMPLATES}),\n}","export type ChatTemplate = \n \"CopilotChat\" |\n \"CopilotPopup\" |\n \"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 \"LangGraphPlatform\": `${BASE_URL}/langgraph-platform-starter.json`,\n \"RemoteEndpoint\": `${BASE_URL}/remote-endpoint-starter.json`,\n \"CrewEnterprise\": [\n `${BASE_URL}/coagents-crew-starter.json`,\n ],\n\n \"LangGraphGeneric\": `${BASE_URL}/generic-lg-starter.json`,\n\n \"CrewFlowsStarter\": [\n `${BASE_URL}/coagents-starter-ui.json`,\n `${BASE_URL}/agent-layout.json`,\n `${BASE_URL}/remote-endpoint.json`\n ],\n\n \"LangGraphStarter\": [\n `${BASE_URL}/langgraph-platform-starter.json`,\n `${BASE_URL}/coagents-starter-ui.json`,\n ],\n\n \"Standard\": `${BASE_URL}/standard-starter.json`,\n \"CopilotChat\": `${BASE_URL}/chat.json`,\n \"CopilotPopup\": `${BASE_URL}/popup.json`,\n \"CopilotSidebar\": `${BASE_URL}/sidebar.json`,\n}"],"mappings":"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","names":[]}
@@ -1,3 +1,4 @@
1
- export { AGENT_FRAMEWORKS, AgentFramework, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponent, Config, ConfigFlags, CrewFlowTemplate, CrewType, Fields, LANGGRAPH_AGENTS, LangGraphAgent, Question, YesNo } from './questions.js';
1
+ export { AGENT_FRAMEWORKS, AgentFrameworkSchema, ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema, LANGGRAPH_AGENTS, LangGraphAgentSchema, NameSchema, Question, TokenSchema, UrlSchema, YES_NO, YesNoSchema, sanitizers } from './questions.js';
2
2
  export { ChatTemplate, StarterTemplate, Template, templateMapping } from './templates.js';
3
3
  import '@oclif/core/interfaces';
4
+ import 'zod';
@@ -1,15 +1,108 @@
1
1
  // src/lib/init/types/questions.ts
2
+ import { z } from "zod";
2
3
  import { Flags } from "@oclif/core";
3
4
  var AGENT_FRAMEWORKS = ["CrewAI", "LangGraph", "None"];
4
5
  var CREW_TYPES = ["Crews", "Flows"];
5
6
  var CHAT_COMPONENTS = ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"];
6
7
  var LANGGRAPH_AGENTS = ["Python Starter", "TypeScript Starter", "None"];
7
8
  var CREW_FLOW_TEMPLATES = ["Starter", "None"];
9
+ var YES_NO = ["Yes", "No"];
10
+ var sanitizers = {
11
+ // Remove trailing slash from URLs
12
+ url: (value) => {
13
+ if (!value) return value;
14
+ return value.trim().replace(/\/+$/, "");
15
+ },
16
+ // Trim whitespace from strings
17
+ trim: (value) => {
18
+ if (!value) return value;
19
+ return value.trim();
20
+ },
21
+ // Lowercase strings
22
+ lowercase: (value) => {
23
+ if (!value) return value;
24
+ return value.toLowerCase().trim();
25
+ },
26
+ // Clean API keys (remove whitespace)
27
+ apiKey: (value) => {
28
+ if (!value) return value;
29
+ return value.trim().replace(/\s/g, "");
30
+ }
31
+ };
32
+ var AgentFrameworkSchema = z.enum(AGENT_FRAMEWORKS);
33
+ var CrewTypeSchema = z.enum(CREW_TYPES);
34
+ var ChatComponentSchema = z.enum(CHAT_COMPONENTS);
35
+ var LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS);
36
+ var CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES);
37
+ var YesNoSchema = z.enum(YES_NO);
38
+ var UrlSchema = z.preprocess(
39
+ (val) => sanitizers.url(String(val)),
40
+ z.string().url("Please enter a valid URL").min(1, "URL is required")
41
+ );
42
+ var TokenSchema = z.preprocess(
43
+ (val) => sanitizers.trim(String(val)),
44
+ z.string().min(1, "Token is required")
45
+ );
46
+ var ApiKeySchema = z.preprocess(
47
+ (val) => sanitizers.apiKey(String(val)),
48
+ z.string().min(1, "API key is required")
49
+ );
50
+ var NameSchema = z.preprocess(
51
+ (val) => sanitizers.trim(String(val)),
52
+ z.string().min(1, "Name is required")
53
+ );
54
+ var ConfigSchema = z.object({
55
+ // Core fields
56
+ copilotKitVersion: z.string().optional(),
57
+ agentFramework: AgentFrameworkSchema,
58
+ chatUi: ChatComponentSchema.optional(),
59
+ // Yes/No fields
60
+ alreadyDeployed: YesNoSchema.optional(),
61
+ fastApiEnabled: YesNoSchema.optional(),
62
+ useCopilotCloud: YesNoSchema.optional(),
63
+ // LangGraph specific fields
64
+ langGraphAgent: LangGraphAgentSchema.optional(),
65
+ langGraphPlatform: YesNoSchema.optional(),
66
+ langGraphPlatformUrl: UrlSchema.optional(),
67
+ langGraphRemoteEndpointURL: UrlSchema.optional(),
68
+ // CrewAI specific fields
69
+ crewType: CrewTypeSchema.optional(),
70
+ crewName: NameSchema.optional(),
71
+ crewUrl: UrlSchema.optional(),
72
+ crewBearerToken: TokenSchema.optional(),
73
+ crewFlowAgent: CrewFlowTemplateSchema.optional(),
74
+ // API keys and tokens
75
+ copilotCloudPublicApiKey: z.string().optional(),
76
+ langSmithApiKey: ApiKeySchema.optional(),
77
+ llmToken: ApiKeySchema.optional()
78
+ }).refine(
79
+ (data) => {
80
+ if (data.agentFramework === "CrewAI" && data.crewType === "Crews") {
81
+ return !!data.crewUrl && !!data.crewBearerToken;
82
+ }
83
+ return true;
84
+ },
85
+ {
86
+ message: "Crew URL and bearer token are required for CrewAI Crews",
87
+ path: ["crewUrl", "crewBearerToken"]
88
+ }
89
+ ).refine(
90
+ (data) => {
91
+ if (data.agentFramework === "LangGraph" && data.alreadyDeployed === "Yes" && data.langGraphPlatform === "Yes") {
92
+ return !!data.langGraphPlatformUrl && !!data.langSmithApiKey;
93
+ }
94
+ return true;
95
+ },
96
+ {
97
+ message: "LangGraph Platform URL and LangSmith API key are required",
98
+ path: ["langGraphPlatformUrl", "langSmithApiKey"]
99
+ }
100
+ );
8
101
  var ConfigFlags = {
9
102
  copilotKitVersion: Flags.string({ description: "CopilotKit version to use (e.g. 1.7.0)" }),
10
103
  agentFramework: Flags.string({ description: "Agent framework to power your copilot", options: AGENT_FRAMEWORKS }),
11
- fastApiEnabled: Flags.string({ description: "Use FastAPI to serve your agent locally", options: ["Yes", "No"] }),
12
- useCopilotCloud: Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: ["Yes", "No"] }),
104
+ fastApiEnabled: Flags.string({ description: "Use FastAPI to serve your agent locally", options: YES_NO }),
105
+ useCopilotCloud: Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: YES_NO }),
13
106
  chatUi: Flags.string({ description: "Chat UI component to add to your app", options: CHAT_COMPONENTS }),
14
107
  langGraphAgent: Flags.string({ description: "LangGraph agent template to use", options: LANGGRAPH_AGENTS }),
15
108
  crewType: Flags.string({ description: "CrewAI implementation type", options: CREW_TYPES }),
@@ -46,11 +139,24 @@ var templateMapping = {
46
139
  };
47
140
  export {
48
141
  AGENT_FRAMEWORKS,
142
+ AgentFrameworkSchema,
143
+ ApiKeySchema,
49
144
  CHAT_COMPONENTS,
50
145
  CREW_FLOW_TEMPLATES,
51
146
  CREW_TYPES,
147
+ ChatComponentSchema,
52
148
  ConfigFlags,
149
+ ConfigSchema,
150
+ CrewFlowTemplateSchema,
151
+ CrewTypeSchema,
53
152
  LANGGRAPH_AGENTS,
153
+ LangGraphAgentSchema,
154
+ NameSchema,
155
+ TokenSchema,
156
+ UrlSchema,
157
+ YES_NO,
158
+ YesNoSchema,
159
+ sanitizers,
54
160
  templateMapping
55
161
  };
56
162
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/types/templates.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\"\n\nexport type Question = {\n type: 'input' | 'yes/no' | 'select'\n name: Fields\n message: string\n choices?: string[]\n default?: string\n when?: (answers: Record<string, any>) => boolean\n sensitive?: boolean\n}\n\n// Agent framework options\nexport const AGENT_FRAMEWORKS = ['CrewAI', 'LangGraph', 'None'] as const;\nexport type AgentFramework = typeof AGENT_FRAMEWORKS[number];\n\n// CrewAI types\nexport const CREW_TYPES = ['Crews', 'Flows'] as const;\nexport type CrewType = typeof CREW_TYPES[number];\n\n// UI component options\nexport const CHAT_COMPONENTS = ['CopilotChat','CopilotSidebar', 'Headless', 'CopilotPopup'] as const;\nexport type ChatComponent = typeof CHAT_COMPONENTS[number];\n\n// LangGraph agent types\nexport const LANGGRAPH_AGENTS = ['Python Starter', 'TypeScript Starter', 'None'] as const;\nexport type LangGraphAgent = typeof LANGGRAPH_AGENTS[number];\n\n// CrewAI Flow templates\nexport const CREW_FLOW_TEMPLATES = ['Starter', 'None'] as const;\nexport type CrewFlowTemplate = typeof CREW_FLOW_TEMPLATES[number];\n\n// Yes/No type for consistent options\nexport type YesNo = 'Yes' | 'No';\n\n// All possible field names for questions\nexport type Fields = \n \"copilotKitVersion\" | \n \"agentFramework\" | \n \"alreadyDeployed\" |\n \"fastApiEnabled\" | \n \"useCopilotCloud\" | \n \"chatUi\" | \n \"langGraphAgent\" | \n \"langGraphPlatform\" |\n \"langGraphPlatformUrl\" | \n \"crewType\" | \n \"crewName\" | \n \"langGraphRemoteEndpointURL\" |\n \"crewUrl\" | \n \"crewBearerToken\" | \n \"langSmithApiKey\" | \n \"llmToken\" |\n \"crewFlowAgent\";\n\n// Complete configuration shape that holds all possible answers\nexport interface Config {\n copilotKitVersion: string;\n agentFramework: AgentFramework;\n alreadyDeployed?: YesNo;\n fastApiEnabled?: YesNo;\n useCopilotCloud?: YesNo;\n chatUi: ChatComponent;\n\n // LangGraph\n langGraphAgent?: LangGraphAgent;\n langGraphPlatform?: YesNo;\n langGraphPlatformUrl?: string;\n langGraphRemoteEndpointURL?: string;\n\n // CrewAI\n crewType?: CrewType;\n crewName?: string;\n crewUrl?: string;\n crewBearerToken?: string;\n crewFlowAgent?: string;\n\n // API keys and tokens\n copilotCloudPublicApiKey?: string;\n langSmithApiKey?: string;\n llmToken?: string;\n}\n\n// CLI flags definition - single source of truth for flag descriptions\nexport const ConfigFlags = {\n copilotKitVersion: Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n agentFramework: Flags.string({description: 'Agent framework to power your copilot', options: AGENT_FRAMEWORKS}),\n fastApiEnabled: Flags.string({description: 'Use FastAPI to serve your agent locally', options: ['Yes', 'No']}),\n useCopilotCloud: Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: ['Yes', 'No']}),\n chatUi: Flags.string({description: 'Chat UI component to add to your app', options: CHAT_COMPONENTS}),\n langGraphAgent: Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n crewType: Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n crewName: Flags.string({description: 'Name for your CrewAI agent'}),\n crewUrl: Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n crewBearerToken: Flags.string({description: 'Bearer token for CrewAI authentication'}),\n langSmithApiKey: Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n llmToken: Flags.string({description: 'API key for your preferred LLM provider'}),\n crewFlowAgent: Flags.string({description: 'CrewAI Flow template to use', options: CREW_FLOW_TEMPLATES}),\n}","export type ChatTemplate = \n \"CopilotChat\" |\n \"CopilotPopup\" |\n \"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 \"LangGraphPlatform\": `${BASE_URL}/langgraph-platform-starter.json`,\n \"RemoteEndpoint\": `${BASE_URL}/remote-endpoint-starter.json`,\n \"CrewEnterprise\": [\n `${BASE_URL}/coagents-crew-starter.json`,\n ],\n\n \"LangGraphGeneric\": `${BASE_URL}/generic-lg-starter.json`,\n\n \"CrewFlowsStarter\": [\n `${BASE_URL}/coagents-starter-ui.json`,\n `${BASE_URL}/agent-layout.json`,\n `${BASE_URL}/remote-endpoint.json`\n ],\n\n \"LangGraphStarter\": [\n `${BASE_URL}/langgraph-platform-starter.json`,\n `${BASE_URL}/coagents-starter-ui.json`,\n ],\n\n \"Standard\": `${BASE_URL}/standard-starter.json`,\n \"CopilotChat\": `${BASE_URL}/chat.json`,\n \"CopilotPopup\": `${BASE_URL}/popup.json`,\n \"CopilotSidebar\": `${BASE_URL}/sidebar.json`,\n}"],"mappings":";AAAA,SAAS,aAAa;AAaf,IAAM,mBAAmB,CAAC,UAAU,aAAa,MAAM;AAIvD,IAAM,aAAa,CAAC,SAAS,OAAO;AAIpC,IAAM,kBAAkB,CAAC,eAAc,kBAAkB,YAAY,cAAc;AAInF,IAAM,mBAAmB,CAAC,kBAAkB,sBAAsB,MAAM;AAIxE,IAAM,sBAAsB,CAAC,WAAW,MAAM;AAuD9C,IAAM,cAAc;AAAA,EACzB,mBAAmB,MAAM,OAAO,EAAC,aAAa,yCAAwC,CAAC;AAAA,EACvF,gBAAgB,MAAM,OAAO,EAAC,aAAa,yCAAyC,SAAS,iBAAgB,CAAC;AAAA,EAC9G,gBAAgB,MAAM,OAAO,EAAC,aAAa,2CAA2C,SAAS,CAAC,OAAO,IAAI,EAAC,CAAC;AAAA,EAC7G,iBAAiB,MAAM,OAAO,EAAC,aAAa,kDAAkD,SAAS,CAAC,OAAO,IAAI,EAAC,CAAC;AAAA,EACrH,QAAQ,MAAM,OAAO,EAAC,aAAa,wCAAwC,SAAS,gBAAe,CAAC;AAAA,EACpG,gBAAgB,MAAM,OAAO,EAAC,aAAa,mCAAmC,SAAS,iBAAgB,CAAC;AAAA,EACxG,UAAU,MAAM,OAAO,EAAC,aAAa,8BAA8B,SAAS,WAAU,CAAC;AAAA,EACvF,UAAU,MAAM,OAAO,EAAC,aAAa,6BAA4B,CAAC;AAAA,EAClE,SAAS,MAAM,OAAO,EAAC,aAAa,qCAAoC,CAAC;AAAA,EACzE,iBAAiB,MAAM,OAAO,EAAC,aAAa,yCAAwC,CAAC;AAAA,EACrF,iBAAiB,MAAM,OAAO,EAAC,aAAa,gDAA+C,CAAC;AAAA,EAC5F,UAAU,MAAM,OAAO,EAAC,aAAa,0CAAyC,CAAC;AAAA,EAC/E,eAAe,MAAM,OAAO,EAAC,aAAa,+BAA+B,SAAS,oBAAmB,CAAC;AACxG;;;ACpFA,IAAM,WAAW;AAEV,IAAM,kBAAkB;AAAA,EAC3B,qBAAqB,GAAG,QAAQ;AAAA,EAChC,kBAAkB,GAAG,QAAQ;AAAA,EAC7B,kBAAkB;AAAA,IACd,GAAG,QAAQ;AAAA,EACf;AAAA,EAEA,oBAAoB,GAAG,QAAQ;AAAA,EAE/B,oBAAoB;AAAA,IAChB,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,EACf;AAAA,EAEA,oBAAoB;AAAA,IAChB,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,EACf;AAAA,EAEA,YAAY,GAAG,QAAQ;AAAA,EACvB,eAAe,GAAG,QAAQ;AAAA,EAC1B,gBAAgB,GAAG,QAAQ;AAAA,EAC3B,kBAAkB,GAAG,QAAQ;AACjC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/init/types/questions.ts","../../../../src/lib/init/types/templates.ts"],"sourcesContent":["import { z } from 'zod';\nimport { Flags } from \"@oclif/core\"\n\n// ===== Core Constants =====\nexport const AGENT_FRAMEWORKS = ['CrewAI', 'LangGraph', 'None'] 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', 'None'] as const;\nexport const CREW_FLOW_TEMPLATES = ['Starter', 'None'] 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 AgentFrameworkSchema = z.enum(AGENT_FRAMEWORKS);\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(\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\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.object({\n // Core fields\n copilotKitVersion: z.string().optional(),\n agentFramework: AgentFrameworkSchema,\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 crewFlowAgent: CrewFlowTemplateSchema.optional(),\n \n // API keys and tokens\n copilotCloudPublicApiKey: z.string().optional(),\n langSmithApiKey: ApiKeySchema.optional(),\n llmToken: ApiKeySchema.optional(),\n})\n.refine(\n (data) => {\n // If CrewAI is selected with Crews type, require crew URL and bearer token\n if (data.agentFramework === 'CrewAI' && data.crewType === 'Crews') {\n return !!data.crewUrl && !!data.crewBearerToken;\n }\n return true;\n },\n {\n message: \"Crew URL and bearer token are required for CrewAI Crews\",\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.agentFramework === 'LangGraph' && \n data.alreadyDeployed === 'Yes' && \n data.langGraphPlatform === 'Yes'\n ) {\n return !!data.langGraphPlatformUrl && !!data.langSmithApiKey;\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[];\n default?: string;\n when?: (answers: Partial<Config>) => 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 copilotKitVersion: Flags.string({description: 'CopilotKit version to use (e.g. 1.7.0)'}),\n agentFramework: Flags.string({description: 'Agent framework to power your copilot', options: AGENT_FRAMEWORKS}),\n fastApiEnabled: Flags.string({description: 'Use FastAPI to serve your agent locally', options: YES_NO}),\n useCopilotCloud: Flags.string({description: 'Use Copilot Cloud for production-ready hosting', options: YES_NO}),\n chatUi: Flags.string({description: 'Chat UI component to add to your app', options: CHAT_COMPONENTS}),\n langGraphAgent: Flags.string({description: 'LangGraph agent template to use', options: LANGGRAPH_AGENTS}),\n crewType: Flags.string({description: 'CrewAI implementation type', options: CREW_TYPES}),\n crewName: Flags.string({description: 'Name for your CrewAI agent'}),\n crewUrl: Flags.string({description: 'URL endpoint for your CrewAI agent'}),\n crewBearerToken: Flags.string({description: 'Bearer token for CrewAI authentication'}),\n langSmithApiKey: Flags.string({description: 'LangSmith API key for LangGraph observability'}),\n llmToken: Flags.string({description: 'API key for your preferred LLM provider'}),\n crewFlowAgent: Flags.string({description: 'CrewAI Flow template to use', options: CREW_FLOW_TEMPLATES}),\n}","export type ChatTemplate = \n \"CopilotChat\" |\n \"CopilotPopup\" |\n \"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 \"LangGraphPlatform\": `${BASE_URL}/langgraph-platform-starter.json`,\n \"RemoteEndpoint\": `${BASE_URL}/remote-endpoint-starter.json`,\n \"CrewEnterprise\": [\n `${BASE_URL}/coagents-crew-starter.json`,\n ],\n\n \"LangGraphGeneric\": `${BASE_URL}/generic-lg-starter.json`,\n\n \"CrewFlowsStarter\": [\n `${BASE_URL}/coagents-starter-ui.json`,\n `${BASE_URL}/agent-layout.json`,\n `${BASE_URL}/remote-endpoint.json`\n ],\n\n \"LangGraphStarter\": [\n `${BASE_URL}/langgraph-platform-starter.json`,\n `${BASE_URL}/coagents-starter-ui.json`,\n ],\n\n \"Standard\": `${BASE_URL}/standard-starter.json`,\n \"CopilotChat\": `${BASE_URL}/chat.json`,\n \"CopilotPopup\": `${BASE_URL}/popup.json`,\n \"CopilotSidebar\": `${BASE_URL}/sidebar.json`,\n}"],"mappings":"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","names":[]}
@@ -1,46 +1,174 @@
1
1
  import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { z } from 'zod';
2
3
 
4
+ declare const AGENT_FRAMEWORKS: readonly ["CrewAI", "LangGraph", "None"];
5
+ declare const CREW_TYPES: readonly ["Crews", "Flows"];
6
+ declare const CHAT_COMPONENTS: readonly ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"];
7
+ declare const LANGGRAPH_AGENTS: readonly ["Python Starter", "TypeScript Starter", "None"];
8
+ declare const CREW_FLOW_TEMPLATES: readonly ["Starter", "None"];
9
+ declare const YES_NO: readonly ["Yes", "No"];
10
+ declare const sanitizers: {
11
+ url: (value: string) => string;
12
+ trim: (value: string) => string;
13
+ lowercase: (value: string) => string;
14
+ apiKey: (value: string) => string;
15
+ };
16
+ declare const AgentFrameworkSchema: z.ZodEnum<["CrewAI", "LangGraph", "None"]>;
17
+ declare const CrewTypeSchema: z.ZodEnum<["Crews", "Flows"]>;
18
+ declare const ChatComponentSchema: z.ZodEnum<["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"]>;
19
+ declare const LangGraphAgentSchema: z.ZodEnum<["Python Starter", "TypeScript Starter", "None"]>;
20
+ declare const CrewFlowTemplateSchema: z.ZodEnum<["Starter", "None"]>;
21
+ declare const YesNoSchema: z.ZodEnum<["Yes", "No"]>;
22
+ declare const UrlSchema: z.ZodEffects<z.ZodString, string, unknown>;
23
+ declare const TokenSchema: z.ZodEffects<z.ZodString, string, unknown>;
24
+ declare const ApiKeySchema: z.ZodEffects<z.ZodString, string, unknown>;
25
+ declare const NameSchema: z.ZodEffects<z.ZodString, string, unknown>;
26
+ declare const ConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
27
+ copilotKitVersion: z.ZodOptional<z.ZodString>;
28
+ agentFramework: z.ZodEnum<["CrewAI", "LangGraph", "None"]>;
29
+ chatUi: z.ZodOptional<z.ZodEnum<["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"]>>;
30
+ alreadyDeployed: z.ZodOptional<z.ZodEnum<["Yes", "No"]>>;
31
+ fastApiEnabled: z.ZodOptional<z.ZodEnum<["Yes", "No"]>>;
32
+ useCopilotCloud: z.ZodOptional<z.ZodEnum<["Yes", "No"]>>;
33
+ langGraphAgent: z.ZodOptional<z.ZodEnum<["Python Starter", "TypeScript Starter", "None"]>>;
34
+ langGraphPlatform: z.ZodOptional<z.ZodEnum<["Yes", "No"]>>;
35
+ langGraphPlatformUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, unknown>>;
36
+ langGraphRemoteEndpointURL: z.ZodOptional<z.ZodEffects<z.ZodString, string, unknown>>;
37
+ crewType: z.ZodOptional<z.ZodEnum<["Crews", "Flows"]>>;
38
+ crewName: z.ZodOptional<z.ZodEffects<z.ZodString, string, unknown>>;
39
+ crewUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, unknown>>;
40
+ crewBearerToken: z.ZodOptional<z.ZodEffects<z.ZodString, string, unknown>>;
41
+ crewFlowAgent: z.ZodOptional<z.ZodEnum<["Starter", "None"]>>;
42
+ copilotCloudPublicApiKey: z.ZodOptional<z.ZodString>;
43
+ langSmithApiKey: z.ZodOptional<z.ZodEffects<z.ZodString, string, unknown>>;
44
+ llmToken: z.ZodOptional<z.ZodEffects<z.ZodString, string, unknown>>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ agentFramework: "CrewAI" | "LangGraph" | "None";
47
+ copilotKitVersion?: string | undefined;
48
+ chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
49
+ alreadyDeployed?: "Yes" | "No" | undefined;
50
+ fastApiEnabled?: "Yes" | "No" | undefined;
51
+ useCopilotCloud?: "Yes" | "No" | undefined;
52
+ langGraphAgent?: "None" | "Python Starter" | "TypeScript Starter" | undefined;
53
+ langGraphPlatform?: "Yes" | "No" | undefined;
54
+ langGraphPlatformUrl?: string | undefined;
55
+ langGraphRemoteEndpointURL?: string | undefined;
56
+ crewType?: "Crews" | "Flows" | undefined;
57
+ crewName?: string | undefined;
58
+ crewUrl?: string | undefined;
59
+ crewBearerToken?: string | undefined;
60
+ crewFlowAgent?: "None" | "Starter" | undefined;
61
+ copilotCloudPublicApiKey?: string | undefined;
62
+ langSmithApiKey?: string | undefined;
63
+ llmToken?: string | undefined;
64
+ }, {
65
+ agentFramework: "CrewAI" | "LangGraph" | "None";
66
+ copilotKitVersion?: string | undefined;
67
+ chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
68
+ alreadyDeployed?: "Yes" | "No" | undefined;
69
+ fastApiEnabled?: "Yes" | "No" | undefined;
70
+ useCopilotCloud?: "Yes" | "No" | undefined;
71
+ langGraphAgent?: "None" | "Python Starter" | "TypeScript Starter" | undefined;
72
+ langGraphPlatform?: "Yes" | "No" | undefined;
73
+ langGraphPlatformUrl?: unknown;
74
+ langGraphRemoteEndpointURL?: unknown;
75
+ crewType?: "Crews" | "Flows" | undefined;
76
+ crewName?: unknown;
77
+ crewUrl?: unknown;
78
+ crewBearerToken?: unknown;
79
+ crewFlowAgent?: "None" | "Starter" | undefined;
80
+ copilotCloudPublicApiKey?: string | undefined;
81
+ langSmithApiKey?: unknown;
82
+ llmToken?: unknown;
83
+ }>, {
84
+ agentFramework: "CrewAI" | "LangGraph" | "None";
85
+ copilotKitVersion?: string | undefined;
86
+ chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
87
+ alreadyDeployed?: "Yes" | "No" | undefined;
88
+ fastApiEnabled?: "Yes" | "No" | undefined;
89
+ useCopilotCloud?: "Yes" | "No" | undefined;
90
+ langGraphAgent?: "None" | "Python Starter" | "TypeScript Starter" | undefined;
91
+ langGraphPlatform?: "Yes" | "No" | undefined;
92
+ langGraphPlatformUrl?: string | undefined;
93
+ langGraphRemoteEndpointURL?: string | undefined;
94
+ crewType?: "Crews" | "Flows" | undefined;
95
+ crewName?: string | undefined;
96
+ crewUrl?: string | undefined;
97
+ crewBearerToken?: string | undefined;
98
+ crewFlowAgent?: "None" | "Starter" | undefined;
99
+ copilotCloudPublicApiKey?: string | undefined;
100
+ langSmithApiKey?: string | undefined;
101
+ llmToken?: string | undefined;
102
+ }, {
103
+ agentFramework: "CrewAI" | "LangGraph" | "None";
104
+ copilotKitVersion?: string | undefined;
105
+ chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
106
+ alreadyDeployed?: "Yes" | "No" | undefined;
107
+ fastApiEnabled?: "Yes" | "No" | undefined;
108
+ useCopilotCloud?: "Yes" | "No" | undefined;
109
+ langGraphAgent?: "None" | "Python Starter" | "TypeScript Starter" | undefined;
110
+ langGraphPlatform?: "Yes" | "No" | undefined;
111
+ langGraphPlatformUrl?: unknown;
112
+ langGraphRemoteEndpointURL?: unknown;
113
+ crewType?: "Crews" | "Flows" | undefined;
114
+ crewName?: unknown;
115
+ crewUrl?: unknown;
116
+ crewBearerToken?: unknown;
117
+ crewFlowAgent?: "None" | "Starter" | undefined;
118
+ copilotCloudPublicApiKey?: string | undefined;
119
+ langSmithApiKey?: unknown;
120
+ llmToken?: unknown;
121
+ }>, {
122
+ agentFramework: "CrewAI" | "LangGraph" | "None";
123
+ copilotKitVersion?: string | undefined;
124
+ chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
125
+ alreadyDeployed?: "Yes" | "No" | undefined;
126
+ fastApiEnabled?: "Yes" | "No" | undefined;
127
+ useCopilotCloud?: "Yes" | "No" | undefined;
128
+ langGraphAgent?: "None" | "Python Starter" | "TypeScript Starter" | undefined;
129
+ langGraphPlatform?: "Yes" | "No" | undefined;
130
+ langGraphPlatformUrl?: string | undefined;
131
+ langGraphRemoteEndpointURL?: string | undefined;
132
+ crewType?: "Crews" | "Flows" | undefined;
133
+ crewName?: string | undefined;
134
+ crewUrl?: string | undefined;
135
+ crewBearerToken?: string | undefined;
136
+ crewFlowAgent?: "None" | "Starter" | undefined;
137
+ copilotCloudPublicApiKey?: string | undefined;
138
+ langSmithApiKey?: string | undefined;
139
+ llmToken?: string | undefined;
140
+ }, {
141
+ agentFramework: "CrewAI" | "LangGraph" | "None";
142
+ copilotKitVersion?: string | undefined;
143
+ chatUi?: "CopilotChat" | "CopilotSidebar" | "Headless" | "CopilotPopup" | undefined;
144
+ alreadyDeployed?: "Yes" | "No" | undefined;
145
+ fastApiEnabled?: "Yes" | "No" | undefined;
146
+ useCopilotCloud?: "Yes" | "No" | undefined;
147
+ langGraphAgent?: "None" | "Python Starter" | "TypeScript Starter" | undefined;
148
+ langGraphPlatform?: "Yes" | "No" | undefined;
149
+ langGraphPlatformUrl?: unknown;
150
+ langGraphRemoteEndpointURL?: unknown;
151
+ crewType?: "Crews" | "Flows" | undefined;
152
+ crewName?: unknown;
153
+ crewUrl?: unknown;
154
+ crewBearerToken?: unknown;
155
+ crewFlowAgent?: "None" | "Starter" | undefined;
156
+ copilotCloudPublicApiKey?: string | undefined;
157
+ langSmithApiKey?: unknown;
158
+ llmToken?: unknown;
159
+ }>;
160
+ type Config = z.infer<typeof ConfigSchema>;
3
161
  type Question = {
4
162
  type: 'input' | 'yes/no' | 'select';
5
- name: Fields;
163
+ name: keyof Config;
6
164
  message: string;
7
- choices?: string[];
165
+ choices?: readonly string[];
8
166
  default?: string;
9
- when?: (answers: Record<string, any>) => boolean;
167
+ when?: (answers: Partial<Config>) => boolean;
10
168
  sensitive?: boolean;
169
+ validate?: (input: string) => true | string;
170
+ sanitize?: (input: string) => string;
11
171
  };
12
- declare const AGENT_FRAMEWORKS: readonly ["CrewAI", "LangGraph", "None"];
13
- type AgentFramework = typeof AGENT_FRAMEWORKS[number];
14
- declare const CREW_TYPES: readonly ["Crews", "Flows"];
15
- type CrewType = typeof CREW_TYPES[number];
16
- declare const CHAT_COMPONENTS: readonly ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"];
17
- type ChatComponent = typeof CHAT_COMPONENTS[number];
18
- declare const LANGGRAPH_AGENTS: readonly ["Python Starter", "TypeScript Starter", "None"];
19
- type LangGraphAgent = typeof LANGGRAPH_AGENTS[number];
20
- declare const CREW_FLOW_TEMPLATES: readonly ["Starter", "None"];
21
- type CrewFlowTemplate = typeof CREW_FLOW_TEMPLATES[number];
22
- type YesNo = 'Yes' | 'No';
23
- type Fields = "copilotKitVersion" | "agentFramework" | "alreadyDeployed" | "fastApiEnabled" | "useCopilotCloud" | "chatUi" | "langGraphAgent" | "langGraphPlatform" | "langGraphPlatformUrl" | "crewType" | "crewName" | "langGraphRemoteEndpointURL" | "crewUrl" | "crewBearerToken" | "langSmithApiKey" | "llmToken" | "crewFlowAgent";
24
- interface Config {
25
- copilotKitVersion: string;
26
- agentFramework: AgentFramework;
27
- alreadyDeployed?: YesNo;
28
- fastApiEnabled?: YesNo;
29
- useCopilotCloud?: YesNo;
30
- chatUi: ChatComponent;
31
- langGraphAgent?: LangGraphAgent;
32
- langGraphPlatform?: YesNo;
33
- langGraphPlatformUrl?: string;
34
- langGraphRemoteEndpointURL?: string;
35
- crewType?: CrewType;
36
- crewName?: string;
37
- crewUrl?: string;
38
- crewBearerToken?: string;
39
- crewFlowAgent?: string;
40
- copilotCloudPublicApiKey?: string;
41
- langSmithApiKey?: string;
42
- llmToken?: string;
43
- }
44
172
  declare const ConfigFlags: {
45
173
  copilotKitVersion: _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
46
174
  agentFramework: _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
@@ -57,4 +185,4 @@ declare const ConfigFlags: {
57
185
  crewFlowAgent: _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
58
186
  };
59
187
 
60
- export { AGENT_FRAMEWORKS, type AgentFramework, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, type ChatComponent, type Config, ConfigFlags, type CrewFlowTemplate, type CrewType, type Fields, LANGGRAPH_AGENTS, type LangGraphAgent, type Question, type YesNo };
188
+ export { AGENT_FRAMEWORKS, AgentFrameworkSchema, ApiKeySchema, CHAT_COMPONENTS, CREW_FLOW_TEMPLATES, CREW_TYPES, ChatComponentSchema, type Config, ConfigFlags, ConfigSchema, CrewFlowTemplateSchema, CrewTypeSchema, LANGGRAPH_AGENTS, LangGraphAgentSchema, NameSchema, type Question, TokenSchema, UrlSchema, YES_NO, YesNoSchema, sanitizers };
@@ -1,15 +1,108 @@
1
1
  // src/lib/init/types/questions.ts
2
+ import { z } from "zod";
2
3
  import { Flags } from "@oclif/core";
3
4
  var AGENT_FRAMEWORKS = ["CrewAI", "LangGraph", "None"];
4
5
  var CREW_TYPES = ["Crews", "Flows"];
5
6
  var CHAT_COMPONENTS = ["CopilotChat", "CopilotSidebar", "Headless", "CopilotPopup"];
6
7
  var LANGGRAPH_AGENTS = ["Python Starter", "TypeScript Starter", "None"];
7
8
  var CREW_FLOW_TEMPLATES = ["Starter", "None"];
9
+ var YES_NO = ["Yes", "No"];
10
+ var sanitizers = {
11
+ // Remove trailing slash from URLs
12
+ url: (value) => {
13
+ if (!value) return value;
14
+ return value.trim().replace(/\/+$/, "");
15
+ },
16
+ // Trim whitespace from strings
17
+ trim: (value) => {
18
+ if (!value) return value;
19
+ return value.trim();
20
+ },
21
+ // Lowercase strings
22
+ lowercase: (value) => {
23
+ if (!value) return value;
24
+ return value.toLowerCase().trim();
25
+ },
26
+ // Clean API keys (remove whitespace)
27
+ apiKey: (value) => {
28
+ if (!value) return value;
29
+ return value.trim().replace(/\s/g, "");
30
+ }
31
+ };
32
+ var AgentFrameworkSchema = z.enum(AGENT_FRAMEWORKS);
33
+ var CrewTypeSchema = z.enum(CREW_TYPES);
34
+ var ChatComponentSchema = z.enum(CHAT_COMPONENTS);
35
+ var LangGraphAgentSchema = z.enum(LANGGRAPH_AGENTS);
36
+ var CrewFlowTemplateSchema = z.enum(CREW_FLOW_TEMPLATES);
37
+ var YesNoSchema = z.enum(YES_NO);
38
+ var UrlSchema = z.preprocess(
39
+ (val) => sanitizers.url(String(val)),
40
+ z.string().url("Please enter a valid URL").min(1, "URL is required")
41
+ );
42
+ var TokenSchema = z.preprocess(
43
+ (val) => sanitizers.trim(String(val)),
44
+ z.string().min(1, "Token is required")
45
+ );
46
+ var ApiKeySchema = z.preprocess(
47
+ (val) => sanitizers.apiKey(String(val)),
48
+ z.string().min(1, "API key is required")
49
+ );
50
+ var NameSchema = z.preprocess(
51
+ (val) => sanitizers.trim(String(val)),
52
+ z.string().min(1, "Name is required")
53
+ );
54
+ var ConfigSchema = z.object({
55
+ // Core fields
56
+ copilotKitVersion: z.string().optional(),
57
+ agentFramework: AgentFrameworkSchema,
58
+ chatUi: ChatComponentSchema.optional(),
59
+ // Yes/No fields
60
+ alreadyDeployed: YesNoSchema.optional(),
61
+ fastApiEnabled: YesNoSchema.optional(),
62
+ useCopilotCloud: YesNoSchema.optional(),
63
+ // LangGraph specific fields
64
+ langGraphAgent: LangGraphAgentSchema.optional(),
65
+ langGraphPlatform: YesNoSchema.optional(),
66
+ langGraphPlatformUrl: UrlSchema.optional(),
67
+ langGraphRemoteEndpointURL: UrlSchema.optional(),
68
+ // CrewAI specific fields
69
+ crewType: CrewTypeSchema.optional(),
70
+ crewName: NameSchema.optional(),
71
+ crewUrl: UrlSchema.optional(),
72
+ crewBearerToken: TokenSchema.optional(),
73
+ crewFlowAgent: CrewFlowTemplateSchema.optional(),
74
+ // API keys and tokens
75
+ copilotCloudPublicApiKey: z.string().optional(),
76
+ langSmithApiKey: ApiKeySchema.optional(),
77
+ llmToken: ApiKeySchema.optional()
78
+ }).refine(
79
+ (data) => {
80
+ if (data.agentFramework === "CrewAI" && data.crewType === "Crews") {
81
+ return !!data.crewUrl && !!data.crewBearerToken;
82
+ }
83
+ return true;
84
+ },
85
+ {
86
+ message: "Crew URL and bearer token are required for CrewAI Crews",
87
+ path: ["crewUrl", "crewBearerToken"]
88
+ }
89
+ ).refine(
90
+ (data) => {
91
+ if (data.agentFramework === "LangGraph" && data.alreadyDeployed === "Yes" && data.langGraphPlatform === "Yes") {
92
+ return !!data.langGraphPlatformUrl && !!data.langSmithApiKey;
93
+ }
94
+ return true;
95
+ },
96
+ {
97
+ message: "LangGraph Platform URL and LangSmith API key are required",
98
+ path: ["langGraphPlatformUrl", "langSmithApiKey"]
99
+ }
100
+ );
8
101
  var ConfigFlags = {
9
102
  copilotKitVersion: Flags.string({ description: "CopilotKit version to use (e.g. 1.7.0)" }),
10
103
  agentFramework: Flags.string({ description: "Agent framework to power your copilot", options: AGENT_FRAMEWORKS }),
11
- fastApiEnabled: Flags.string({ description: "Use FastAPI to serve your agent locally", options: ["Yes", "No"] }),
12
- useCopilotCloud: Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: ["Yes", "No"] }),
104
+ fastApiEnabled: Flags.string({ description: "Use FastAPI to serve your agent locally", options: YES_NO }),
105
+ useCopilotCloud: Flags.string({ description: "Use Copilot Cloud for production-ready hosting", options: YES_NO }),
13
106
  chatUi: Flags.string({ description: "Chat UI component to add to your app", options: CHAT_COMPONENTS }),
14
107
  langGraphAgent: Flags.string({ description: "LangGraph agent template to use", options: LANGGRAPH_AGENTS }),
15
108
  crewType: Flags.string({ description: "CrewAI implementation type", options: CREW_TYPES }),
@@ -22,10 +115,23 @@ var ConfigFlags = {
22
115
  };
23
116
  export {
24
117
  AGENT_FRAMEWORKS,
118
+ AgentFrameworkSchema,
119
+ ApiKeySchema,
25
120
  CHAT_COMPONENTS,
26
121
  CREW_FLOW_TEMPLATES,
27
122
  CREW_TYPES,
123
+ ChatComponentSchema,
28
124
  ConfigFlags,
29
- LANGGRAPH_AGENTS
125
+ ConfigSchema,
126
+ CrewFlowTemplateSchema,
127
+ CrewTypeSchema,
128
+ LANGGRAPH_AGENTS,
129
+ LangGraphAgentSchema,
130
+ NameSchema,
131
+ TokenSchema,
132
+ UrlSchema,
133
+ YES_NO,
134
+ YesNoSchema,
135
+ sanitizers
30
136
  };
31
137
  //# sourceMappingURL=questions.js.map