create-cogitator-app 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -13
- package/dist/index.js +63 -22
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +35 -2
- package/dist/lib.js +54 -21
- package/dist/lib.js.map +1 -1
- package/package.json +16 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/logger.ts","../src/prompts.ts","../src/utils/providers.ts","../src/templates/versions.ts","../src/templates/basic.ts","../src/templates/memory.ts","../src/templates/swarm.ts","../src/templates/workflow.ts","../src/templates/api-server.ts","../src/templates/nextjs.ts","../src/templates/index.ts","../src/utils/package-manager.ts","../src/scaffold.ts","../src/templates/base/tsconfig.ts","../src/templates/base/gitignore.ts","../src/templates/base/env-example.ts","../src/templates/base/docker-compose.ts","../src/templates/base/cogitator-yml.ts","../src/utils/links.ts","../src/templates/base/readme.ts","../src/templates/base/pnpm-workspace.ts","../src/utils/git.ts"],"sourcesContent":["import * as p from '@clack/prompts';\nimport { readFileSync } from 'node:fs';\nimport pc from 'picocolors';\nimport { banner } from './utils/logger.js';\nimport { parseArgs, collectOptions } from './prompts.js';\nimport { scaffold } from './scaffold.js';\nimport { devCommand } from './utils/package-manager.js';\nimport { DOCS_URL } from './utils/links.js';\n\nconst pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8')) as {\n version: string;\n};\n\nasync function main() {\n banner(pkg.version);\n\n p.intro(pc.cyan(\"Let's build something with AI agents\"));\n\n const args = parseArgs(process.argv.slice(2));\n const options = await collectOptions(args);\n\n await scaffold(options);\n\n const dev = devCommand(options.packageManager);\n\n p.outro(\n [\n pc.green('Done! ') + 'Next steps:',\n '',\n ` ${pc.cyan('cd')} ${options.name}`,\n ` ${pc.cyan(dev)}`,\n '',\n pc.dim(`Docs: ${DOCS_URL}`),\n ].join('\\n')\n );\n}\n\nmain().catch((err) => {\n p.log.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n","import pc from 'picocolors';\n\nconst MIN_INNER_WIDTH = 39;\n\ninterface BannerLine {\n text: string;\n width: number;\n}\n\nexport function banner(version: string) {\n const title = 'create-cogitator-app';\n const tagline = 'Build AI agents in minutes';\n const versionLabel = `v${version}`;\n const lines: BannerLine[] = [\n {\n text: `${pc.bold(pc.white(title))} ${pc.dim(versionLabel)}`,\n width: title.length + 2 + versionLabel.length,\n },\n { text: pc.dim(tagline), width: tagline.length },\n ];\n const inner = Math.max(MIN_INNER_WIDTH, ...lines.map((line) => line.width + 4));\n\n const art = [\n '',\n ` ${pc.cyan(`╔${'═'.repeat(inner)}╗`)}`,\n ...lines.map(\n (line) =>\n ` ${pc.cyan('║')} ${line.text}${' '.repeat(inner - 2 - line.width)}${pc.cyan('║')}`\n ),\n ` ${pc.cyan(`╚${'═'.repeat(inner)}╝`)}`,\n '',\n ];\n console.log(art.join('\\n'));\n}\n","import * as p from '@clack/prompts';\nimport path from 'node:path';\nimport type { LLMProvider, PackageManager, ProjectOptions, Template } from './types.js';\nimport { templateChoices } from './templates/index.js';\nimport { detectPackageManager } from './utils/package-manager.js';\nimport { defaultModels } from './utils/providers.js';\n\ninterface ParsedArgs {\n name?: string;\n template?: Template;\n provider?: LLMProvider;\n packageManager?: PackageManager;\n docker?: boolean;\n git?: boolean;\n yes?: boolean;\n}\n\nconst validTemplates: Template[] = ['basic', 'memory', 'swarm', 'workflow', 'api-server', 'nextjs'];\nconst validProviders: LLMProvider[] = ['ollama', 'openai', 'anthropic', 'google'];\nconst validPMs: PackageManager[] = ['pnpm', 'npm', 'yarn', 'bun'];\n\nexport function parseArgs(args: string[]): ParsedArgs {\n const parsed: ParsedArgs = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n if (arg === '--template' || arg === '-t') {\n if (i + 1 < args.length) {\n const val = args[++i] as Template;\n if (validTemplates.includes(val)) parsed.template = val;\n }\n } else if (arg === '--provider' || arg === '-p') {\n if (i + 1 < args.length) {\n const val = args[++i] as LLMProvider;\n if (validProviders.includes(val)) parsed.provider = val;\n }\n } else if (arg === '--pm') {\n if (i + 1 < args.length) {\n const val = args[++i] as PackageManager;\n if (validPMs.includes(val)) parsed.packageManager = val;\n }\n } else if (arg === '--docker') {\n parsed.docker = true;\n } else if (arg === '--no-docker') {\n parsed.docker = false;\n } else if (arg === '--git') {\n parsed.git = true;\n } else if (arg === '--no-git') {\n parsed.git = false;\n } else if (arg === '-y' || arg === '--yes') {\n parsed.yes = true;\n } else if (!arg.startsWith('-') && !parsed.name) {\n parsed.name = arg;\n }\n }\n\n return parsed;\n}\n\n/** What `--yes` answers, and what each prompt suggests. */\nexport const defaultAnswers = {\n name: 'my-agents',\n template: 'basic',\n provider: 'ollama',\n docker: true,\n git: true,\n} as const satisfies Partial<ProjectOptions>;\n\nfunction unlessCancelled<T>(answer: T | typeof p.CANCEL_SYMBOL): T {\n if (p.isCancel(answer)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n return answer;\n}\n\n/**\n * Turn the parsed arguments into project options, asking for whatever they leave\n * out; with `--yes` nothing is asked and the defaults fill the gaps.\n */\nexport async function collectOptions(args: ParsedArgs): Promise<ProjectOptions> {\n const interactive = !args.yes;\n\n const rawName =\n args.name ||\n (interactive\n ? unlessCancelled(\n await p.text({\n message: 'Where should we create your project?',\n placeholder: `./${defaultAnswers.name}`,\n defaultValue: defaultAnswers.name,\n validate: (value) => {\n if (value && !value.trim()) return 'Project name is required';\n return undefined;\n },\n })\n )\n : defaultAnswers.name);\n\n const name = rawName.trim();\n const projectName = path.basename(path.normalize(name).replace(/^\\.\\//, '').replace(/^\\.\\\\/, ''));\n const projectPath = path.resolve(process.cwd(), name);\n\n const template =\n args.template ??\n (interactive\n ? unlessCancelled(\n await p.select<Template>({\n message: 'Which template would you like?',\n options: templateChoices,\n initialValue: defaultAnswers.template,\n })\n )\n : defaultAnswers.template);\n\n const provider =\n args.provider ??\n (interactive\n ? unlessCancelled(\n await p.select<LLMProvider>({\n message: 'Which LLM provider?',\n options: [\n {\n value: 'ollama',\n label: 'Ollama',\n hint: `${defaultModels.ollama} — local, free, requires Ollama installed`,\n },\n { value: 'openai', label: 'OpenAI', hint: defaultModels.openai },\n { value: 'anthropic', label: 'Anthropic', hint: defaultModels.anthropic },\n { value: 'google', label: 'Google Gemini', hint: defaultModels.google },\n ],\n initialValue: defaultAnswers.provider,\n })\n )\n : defaultAnswers.provider);\n\n const packageManager =\n args.packageManager ??\n (interactive\n ? unlessCancelled(\n await p.select<PackageManager>({\n message: 'Package manager?',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'bun', label: 'bun' },\n ],\n initialValue: detectPackageManager(),\n })\n )\n : detectPackageManager());\n\n const docker =\n args.docker ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message:\n 'Include Docker Compose? (Redis + Postgres' +\n (provider === 'ollama' ? ' + Ollama)' : ')'),\n initialValue: defaultAnswers.docker,\n })\n )\n : defaultAnswers.docker);\n\n const git =\n args.git ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message: 'Initialize git repository?',\n initialValue: defaultAnswers.git,\n })\n )\n : defaultAnswers.git);\n\n return {\n name: projectName,\n path: projectPath,\n template,\n provider,\n packageManager,\n docker,\n git,\n };\n}\n","import type { LLMProvider } from '../types.js';\n\nexport const defaultModels: Record<LLMProvider, string> = {\n ollama: 'qwen3:8b',\n openai: 'gpt-6.1-sol',\n anthropic: 'claude-sonnet-5-5',\n google: 'gemini-3.8-flash',\n};\n\nexport function providerEnvKey(provider: LLMProvider): string {\n const map: Record<LLMProvider, string> = {\n ollama: 'OLLAMA_BASE_URL',\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n google: 'GOOGLE_API_KEY',\n };\n return map[provider];\n}\n\nexport function providerConfig(provider: LLMProvider): string {\n switch (provider) {\n case 'ollama':\n return [\n ` llm: {`,\n ` defaultProvider: 'ollama',`,\n ` providers: {`,\n ` ollama: { baseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434' },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'openai':\n return [\n ` llm: {`,\n ` defaultProvider: 'openai',`,\n ` providers: {`,\n ` openai: { apiKey: process.env.OPENAI_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'anthropic':\n return [\n ` llm: {`,\n ` defaultProvider: 'anthropic',`,\n ` providers: {`,\n ` anthropic: { apiKey: process.env.ANTHROPIC_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'google':\n return [\n ` llm: {`,\n ` defaultProvider: 'google',`,\n ` providers: {`,\n ` google: { apiKey: process.env.GOOGLE_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n }\n}\n","/** The zod range generated projects depend on: the one `@cogitator-ai/core` depends on, so tool schemas and core share one zod. */\nexport const ZOD_VERSION = '^4.6.5';\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const basicTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, summarizeTool } from './tools.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: '${options.name}-agent',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful AI assistant. Use your tools to help the user.',`,\n ` tools: [searchTool, summarizeTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const result = await cogitator.run(agent, {`,\n ` input: 'What is Cogitator and how does it work?',`,\n ` })`,\n ``,\n ` console.log(result.output)`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('The search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Search results for: \\${query}\\\\n\\\\nCogitator is a self-hosted AI agent runtime for TypeScript.\\``,\n ` },`,\n `})`,\n ``,\n `export const summarizeTool = tool({`,\n ` name: 'summarize',`,\n ` description: 'Summarize a piece of text',`,\n ` parameters: z.object({`,\n ` text: z.string().describe('The text to summarize'),`,\n ` maxLength: z.number().optional().describe('Maximum summary length'),`,\n ` }),`,\n ` execute: async ({ text, maxLength }) => {`,\n ` const limit = maxLength || 200`,\n ` return text.length > limit ? text.slice(0, limit) + '...' : text`,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const memoryTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, noteTool } from './tools.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n ` memory: {`,\n ` adapter: 'redis',`,\n ` redis: { url: process.env.REDIS_URL || 'redis://localhost:6379' },`,\n ` },`,\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: '${options.name}-agent',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are an AI assistant with persistent memory.',`,\n ` 'You remember past conversations and user preferences.',`,\n ` 'Use the note tool to save important information.',`,\n ` ].join(' '),`,\n ` tools: [searchTool, noteTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const threadId = 'demo-thread'`,\n ``,\n ` const result1 = await cogitator.run(agent, {`,\n ` input: 'My name is Alex and I prefer TypeScript.',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 1:', result1.output)`,\n ``,\n ` const result2 = await cogitator.run(agent, {`,\n ` input: 'What is my name and preferred language?',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 2:', result2.output)`,\n ``,\n ` await cogitator.close()`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const noteTool = tool({`,\n ` name: 'note',`,\n ` description: 'Save a note for later reference',`,\n ` parameters: z.object({`,\n ` title: z.string().describe('Note title'),`,\n ` content: z.string().describe('Note content'),`,\n ` }),`,\n ` execute: async ({ title, content }) => {`,\n ` return \\`Saved note \"\\${title}\": \\${content}\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/memory': 'latest',\n '@cogitator-ai/redis': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const swarmTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const researcherTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n `import { searchTool } from '../tools.js'`,\n ``,\n `export const researcher = new Agent({`,\n ` name: 'researcher',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a research specialist.',`,\n ` 'Use the search tool to find information.',`,\n ` 'Provide detailed, factual findings.',`,\n ` ].join(' '),`,\n ` tools: [searchTool],`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const writerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const writer = new Agent({`,\n ` name: 'writer',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a skilled content writer.',`,\n ` 'Take research findings and craft well-structured, engaging content.',`,\n ` 'Focus on clarity and readability.',`,\n ` ].join(' '),`,\n ` temperature: 0.8,`,\n `})`,\n ``,\n ].join('\\n');\n\n const reviewerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const reviewer = new Agent({`,\n ` name: 'reviewer',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a meticulous content reviewer.',`,\n ` 'Check for accuracy, grammar, and overall quality.',`,\n ` 'Provide constructive feedback.',`,\n ` ].join(' '),`,\n ` temperature: 0.2,`,\n `})`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Research findings for \"\\${query}\": Cogitator is a production-grade AI agent runtime for TypeScript that supports swarms, workflows, and tool execution.\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { Swarm } from '@cogitator-ai/swarms'`,\n `import { researcher } from './agents/researcher.js'`,\n `import { writer } from './agents/writer.js'`,\n `import { reviewer } from './agents/reviewer.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const team = new Swarm(cogitator, {`,\n ` name: '${options.name}-team',`,\n ` strategy: 'hierarchical',`,\n ` supervisor: reviewer,`,\n ` workers: [researcher, writer],`,\n ` hierarchical: {`,\n ` visibility: 'full',`,\n ` workerCommunication: true,`,\n ` },`,\n ` resources: {`,\n ` maxConcurrency: 3,`,\n ` timeout: 120000,`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` console.log('Starting swarm...')`,\n ``,\n ` const result = await team.run({`,\n ` input: 'Write a comprehensive article about AI agent orchestration.',`,\n ` })`,\n ``,\n ` console.log('Result:', result.output)`,\n ` console.log('Strategy:', team.strategyType)`,\n ``,\n ` await team.close()`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n { path: 'src/agents/researcher.ts', content: researcherTs },\n { path: 'src/agents/writer.ts', content: writerTs },\n { path: 'src/agents/reviewer.ts', content: reviewerTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/swarms': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const workflowTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentsTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const analyzer = new Agent({`,\n ` name: 'analyzer',`,\n ` model: '${model}',`,\n ` instructions: 'You analyze input data and extract key information. Be thorough and structured.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n `export const processor = new Agent({`,\n ` name: 'processor',`,\n ` model: '${model}',`,\n ` instructions: 'You process analyzed data and transform it into actionable insights.',`,\n ` temperature: 0.5,`,\n `})`,\n ``,\n `export const formatter = new Agent({`,\n ` name: 'formatter',`,\n ` model: '${model}',`,\n ` instructions: 'You format processed data into a clean, readable report.',`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import {`,\n ` WorkflowBuilder,`,\n ` WorkflowExecutor,`,\n ` agentNode,`,\n ` functionNode,`,\n `} from '@cogitator-ai/workflows'`,\n `import { analyzer, processor, formatter } from './agents.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `type WorkflowState = {`,\n ` input: string`,\n ` analysis?: string`,\n ` processed?: string`,\n ` report?: string`,\n `}`,\n ``,\n `const analyzeNode = agentNode<WorkflowState>(analyzer, {`,\n ` inputMapper: (state) => \\`Analyze the following: \\${state.input}\\`,`,\n ` stateMapper: (result) => ({ analysis: result.output }),`,\n `})`,\n ``,\n `const processNode = agentNode<WorkflowState>(processor, {`,\n ` inputMapper: (state) => \\`Process this analysis: \\${state.analysis ?? ''}\\`,`,\n ` stateMapper: (result) => ({ processed: result.output }),`,\n `})`,\n ``,\n `const formatNode = agentNode<WorkflowState>(formatter, {`,\n ` inputMapper: (state) => \\`Format this into a report: \\${state.processed ?? ''}\\`,`,\n ` stateMapper: (result) => ({ report: result.output }),`,\n `})`,\n ``,\n `const outputNode = functionNode<WorkflowState>(`,\n ` 'output',`,\n ` async (state) => state.report,`,\n `)`,\n ``,\n `const workflow = new WorkflowBuilder<WorkflowState>('${options.name}-workflow')`,\n ` .initialState({ input: '' })`,\n ` .entryPoint(analyzeNode.name)`,\n ` .addNode(analyzeNode.name, analyzeNode.fn)`,\n ` .addNode(processNode.name, processNode.fn, { after: [analyzeNode.name] })`,\n ` .addNode(formatNode.name, formatNode.fn, { after: [processNode.name] })`,\n ` .addNode(outputNode.name, outputNode.fn, { after: [formatNode.name] })`,\n ` .build()`,\n ``,\n `async function main() {`,\n ` const executor = new WorkflowExecutor(cogitator)`,\n ``,\n ` console.log('Starting workflow...')`,\n ``,\n ` const result = await executor.execute(workflow, {`,\n ` input: 'Analyze the current state of AI agent frameworks and their adoption in enterprise.',`,\n ` })`,\n ``,\n ` console.log('Workflow completed!')`,\n ` console.log('Result:', JSON.stringify(result, null, 2))`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/workflows': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const apiServerTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentsTs = [\n `import { Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const assistant = new Agent({`,\n ` name: 'assistant',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful API assistant. Answer questions clearly and concisely.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `export const coder = new Agent({`,\n ` name: 'coder',`,\n ` model: '${model}',`,\n ` instructions: 'You are an expert programmer. Write clean, well-structured code.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import express from 'express'`,\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { CogitatorServer } from '@cogitator-ai/express'`,\n `import { assistant, coder } from './agents.js'`,\n ``,\n `const app = express()`,\n `const port = process.env.PORT || 3000`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const server = new CogitatorServer({`,\n ` app,`,\n ` cogitator,`,\n ` agents: { assistant, coder },`,\n ` config: {`,\n ` basePath: '/api',`,\n ` enableSwagger: true,`,\n ` cors: { origin: '*' },`,\n ` swagger: {`,\n ` title: '${options.name} API',`,\n ` version: '1.0.0',`,\n ` },`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` await server.init()`,\n ``,\n ` app.listen(port, () => {`,\n ` console.log(\\`Server running at http://localhost:\\${port}\\`)`,\n ` console.log(\\`Swagger docs at http://localhost:\\${port}/api/docs\\`)`,\n ` })`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/express': 'latest',\n express: '^4.21.0',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n '@types/express': '^5.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const nextjsTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentTs = [\n `import { Cogitator, Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `export const agent = new Agent({`,\n ` name: '${options.name}-chat',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful AI chat assistant. Be conversational and helpful.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const routeTs = [\n `import { createChatHandler } from '@cogitator-ai/next'`,\n `import { cogitator, agent } from '@/lib/agent'`,\n ``,\n `export const POST = createChatHandler(cogitator, agent)`,\n ``,\n ].join('\\n');\n\n const pageTsx = [\n `'use client'`,\n ``,\n `import { useCogitatorChat } from '@cogitator-ai/next/client'`,\n `import { useState, useRef, useEffect } from 'react'`,\n ``,\n `export default function Home() {`,\n ` const { messages, input, setInput, send, isLoading } = useCogitatorChat({`,\n ` api: '/api/chat',`,\n ` })`,\n ` const messagesEndRef = useRef<HTMLDivElement>(null)`,\n ``,\n ` useEffect(() => {`,\n ` messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })`,\n ` }, [messages])`,\n ``,\n ` const handleSubmit = (e: React.FormEvent) => {`,\n ` e.preventDefault()`,\n ` if (!input.trim() || isLoading) return`,\n ` send(input)`,\n ` setInput('')`,\n ` }`,\n ``,\n ` return (`,\n ` <main className=\"flex min-h-screen flex-col items-center p-4 bg-gray-950 text-white\">`,\n ` <div className=\"w-full max-w-2xl flex flex-col h-screen\">`,\n ` <header className=\"py-6 text-center\">`,\n ` <h1 className=\"text-2xl font-bold\">${options.name}</h1>`,\n ` <p className=\"text-gray-400 text-sm mt-1\">Powered by Cogitator</p>`,\n ` </header>`,\n ``,\n ` <div className=\"flex-1 overflow-y-auto space-y-4 pb-4\">`,\n ` {messages.map((msg, i) => (`,\n ` <div`,\n ` key={i}`,\n ` className={\\`flex \\${msg.role === 'user' ? 'justify-end' : 'justify-start'}\\`}`,\n ` >`,\n ` <div`,\n ` className={\\`max-w-[80%] rounded-2xl px-4 py-2 \\${`,\n ` msg.role === 'user'`,\n ` ? 'bg-blue-600 text-white'`,\n ` : 'bg-gray-800 text-gray-100'`,\n ` }\\`}`,\n ` >`,\n ` {msg.content}`,\n ` </div>`,\n ` </div>`,\n ` ))}`,\n ` {isLoading && (`,\n ` <div className=\"flex justify-start\">`,\n ` <div className=\"bg-gray-800 rounded-2xl px-4 py-2 text-gray-400\">`,\n ` Thinking...`,\n ` </div>`,\n ` </div>`,\n ` )}`,\n ` <div ref={messagesEndRef} />`,\n ` </div>`,\n ``,\n ` <form onSubmit={handleSubmit} className=\"flex gap-2 py-4\">`,\n ` <input`,\n ` value={input}`,\n ` onChange={(e) => setInput(e.target.value)}`,\n ` placeholder=\"Type a message...\"`,\n ` className=\"flex-1 bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-blue-500\"`,\n ` />`,\n ` <button`,\n ` type=\"submit\"`,\n ` disabled={isLoading || !input.trim()}`,\n ` className=\"bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:cursor-not-allowed text-white rounded-xl px-6 py-3 font-medium transition-colors\"`,\n ` >`,\n ` Send`,\n ` </button>`,\n ` </form>`,\n ` </div>`,\n ` </main>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const layoutTsx = [\n `import type { Metadata } from 'next'`,\n `import './globals.css'`,\n ``,\n `export const metadata: Metadata = {`,\n ` title: '${options.name}',`,\n ` description: 'AI chat app powered by Cogitator',`,\n `}`,\n ``,\n `export default function RootLayout({`,\n ` children,`,\n `}: {`,\n ` children: React.ReactNode`,\n `}) {`,\n ` return (`,\n ` <html lang=\"en\">`,\n ` <body>{children}</body>`,\n ` </html>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const globalsCss = [\n `@tailwind base;`,\n `@tailwind components;`,\n `@tailwind utilities;`,\n ``,\n ].join('\\n');\n\n const nextConfig = [\n `import type { NextConfig } from 'next'`,\n ``,\n `const config: NextConfig = {}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const tsconfigJson = JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2017',\n lib: ['dom', 'dom.iterable', 'esnext'],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'esnext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'preserve',\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: { '@/*': ['./src/*'] },\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n exclude: ['node_modules'],\n },\n null,\n 2\n );\n\n const tailwindConfig = [\n `import type { Config } from 'tailwindcss'`,\n ``,\n `const config: Config = {`,\n ` content: ['./src/**/*.{ts,tsx}'],`,\n ` theme: { extend: {} },`,\n ` plugins: [],`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const postcssConfig = [\n `const config = {`,\n ` plugins: {`,\n ` tailwindcss: {},`,\n ` autoprefixer: {},`,\n ` },`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/lib/agent.ts', content: agentTs },\n { path: 'src/app/api/chat/route.ts', content: routeTs },\n { path: 'src/app/page.tsx', content: pageTsx },\n { path: 'src/app/layout.tsx', content: layoutTsx },\n { path: 'src/app/globals.css', content: globalsCss },\n { path: 'next.config.ts', content: nextConfig },\n { path: 'tsconfig.json', content: tsconfigJson },\n { path: 'tailwind.config.ts', content: tailwindConfig },\n { path: 'postcss.config.mjs', content: postcssConfig },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/next': 'latest',\n next: '^15.0.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n '@types/node': '^22.0.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n tailwindcss: '^3.4.0',\n autoprefixer: '^10.4.0',\n postcss: '^8.4.0',\n };\n },\n\n scripts() {\n return {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n lint: 'next lint',\n };\n },\n};\n","import type { Template, TemplateGenerator } from '../types.js';\nimport { basicTemplate } from './basic.js';\nimport { memoryTemplate } from './memory.js';\nimport { swarmTemplate } from './swarm.js';\nimport { workflowTemplate } from './workflow.js';\nimport { apiServerTemplate } from './api-server.js';\nimport { nextjsTemplate } from './nextjs.js';\n\nconst templates: Record<Template, TemplateGenerator> = {\n basic: basicTemplate,\n memory: memoryTemplate,\n swarm: swarmTemplate,\n workflow: workflowTemplate,\n 'api-server': apiServerTemplate,\n nextjs: nextjsTemplate,\n};\n\nexport function getTemplate(name: Template): TemplateGenerator {\n return templates[name];\n}\n\nexport const templateChoices: Array<{\n value: Template;\n label: string;\n hint: string;\n}> = [\n {\n value: 'basic',\n label: 'Basic agent',\n hint: 'Single agent with tools — best for getting started',\n },\n { value: 'memory', label: 'Agent with memory', hint: 'Persistent memory with Redis' },\n {\n value: 'swarm',\n label: 'Multi-agent swarm',\n hint: 'Team of agents with hierarchical coordination',\n },\n { value: 'workflow', label: 'DAG workflow', hint: 'Multi-step pipeline with checkpoints' },\n {\n value: 'api-server',\n label: 'REST API server',\n hint: 'Express server exposing agents via HTTP',\n },\n { value: 'nextjs', label: 'Next.js chat app', hint: 'Full-stack chat app with streaming' },\n];\n","import { execSync } from 'node:child_process';\nimport type { PackageManager } from '../types.js';\n\nexport function detectPackageManager(): PackageManager {\n const ua = process.env.npm_config_user_agent;\n if (ua) {\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n if (ua.startsWith('bun')) return 'bun';\n }\n return 'pnpm';\n}\n\nexport function installDependencies(cwd: string, pm: PackageManager) {\n execSync(`${pm} install`, { cwd, stdio: 'inherit' });\n}\n\nexport function devCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npm run dev';\n return `${pm} dev`;\n}\n\nexport function runCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npx';\n if (pm === 'pnpm') return 'pnpm dlx';\n if (pm === 'yarn') return 'yarn dlx';\n return 'bunx';\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport * as p from '@clack/prompts';\nimport type { ProjectOptions, TemplateFile } from './types.js';\nimport { getTemplate } from './templates/index.js';\nimport { generateTsconfig } from './templates/base/tsconfig.js';\nimport { generateGitignore } from './templates/base/gitignore.js';\nimport { generateEnvExample } from './templates/base/env-example.js';\nimport { generateDockerCompose } from './templates/base/docker-compose.js';\nimport { generateCogitatorYml } from './templates/base/cogitator-yml.js';\nimport { generateReadme } from './templates/base/readme.js';\nimport { generatePnpmWorkspace } from './templates/base/pnpm-workspace.js';\nimport { installDependencies } from './utils/package-manager.js';\nimport { initGitRepo, isGitInstalled } from './utils/git.js';\n\nfunction writeFile(basePath: string, file: TemplateFile) {\n const fullPath = path.join(basePath, file.path);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, file.content, 'utf-8');\n}\n\nfunction buildPackageJson(options: ProjectOptions): string {\n const template = getTemplate(options.template);\n const isNextjs = options.template === 'nextjs';\n\n const pkg: Record<string, unknown> = {\n name: options.name,\n version: '0.1.0',\n private: true,\n ...(isNextjs ? {} : { type: 'module' }),\n scripts: template.scripts(),\n dependencies: template.dependencies(),\n devDependencies: template.devDependencies(),\n };\n\n return JSON.stringify(pkg, null, 2) + '\\n';\n}\n\nfunction collectFiles(options: ProjectOptions): TemplateFile[] {\n const template = getTemplate(options.template);\n const files: TemplateFile[] = [];\n\n files.push({ path: 'package.json', content: buildPackageJson(options) });\n files.push(...template.files(options));\n files.push(generateGitignore());\n files.push(generateEnvExample(options.provider, options.template));\n files.push(generateCogitatorYml(options.provider, options.template));\n files.push(generateReadme(options));\n\n if (options.template !== 'nextjs') {\n files.push(generateTsconfig());\n }\n\n if (options.packageManager === 'pnpm') {\n files.push(generatePnpmWorkspace());\n }\n\n if (options.docker) {\n files.push(generateDockerCompose(options.provider));\n }\n\n return files;\n}\n\nexport async function scaffold(options: ProjectOptions) {\n if (fs.existsSync(options.path) && fs.readdirSync(options.path).length > 0) {\n throw new Error(`Directory \"${options.path}\" already exists and is not empty`);\n }\n\n const s = p.spinner();\n\n s.start('Generating project files');\n const files = collectFiles(options);\n\n fs.mkdirSync(options.path, { recursive: true });\n for (const file of files) {\n writeFile(options.path, file);\n }\n s.stop('Generated project files');\n\n s.start('Installing dependencies');\n try {\n installDependencies(options.path, options.packageManager);\n s.stop('Installed dependencies');\n } catch {\n s.stop('Failed to install dependencies — run manually');\n }\n\n if (options.git && isGitInstalled()) {\n s.start('Initializing git repository');\n try {\n initGitRepo(options.path);\n s.stop('Initialized git repository');\n } catch {\n s.stop('Failed to initialize git — run manually');\n }\n }\n}\n","import type { TemplateFile } from '../../types.js';\n\nexport function generateTsconfig(): TemplateFile {\n return {\n path: 'tsconfig.json',\n content: JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n esModuleInterop: true,\n strict: true,\n skipLibCheck: true,\n outDir: 'dist',\n rootDir: 'src',\n declaration: true,\n resolveJsonModule: true,\n isolatedModules: true,\n },\n include: ['src'],\n },\n null,\n 2\n ),\n };\n}\n","import type { TemplateFile } from '../../types.js';\n\nexport function generateGitignore(): TemplateFile {\n return {\n path: '.gitignore',\n content: [\n 'node_modules/',\n 'dist/',\n '.env',\n '.env.local',\n '*.log',\n '.DS_Store',\n 'coverage/',\n '.turbo/',\n '',\n ].join('\\n'),\n };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\n\nexport function generateEnvExample(provider: LLMProvider, template?: Template): TemplateFile {\n const lines: string[] = ['# Cogitator Environment Variables', ''];\n\n switch (provider) {\n case 'ollama':\n lines.push('# Ollama (default: http://localhost:11434)');\n lines.push('# OLLAMA_BASE_URL=http://localhost:11434');\n break;\n case 'openai':\n lines.push('# OpenAI');\n lines.push('OPENAI_API_KEY=sk-...');\n break;\n case 'anthropic':\n lines.push('# Anthropic');\n lines.push('ANTHROPIC_API_KEY=sk-ant-...');\n break;\n case 'google':\n lines.push('# Google AI');\n lines.push('GOOGLE_API_KEY=...');\n break;\n }\n\n if (template === 'memory') {\n lines.push('');\n lines.push('# Redis');\n lines.push('REDIS_URL=redis://localhost:6379');\n }\n\n lines.push('');\n\n return { path: '.env.example', content: lines.join('\\n') };\n}\n","import type { LLMProvider, TemplateFile } from '../../types.js';\n\nexport function generateDockerCompose(provider: LLMProvider): TemplateFile {\n const services: string[] = [];\n\n if (provider === 'ollama') {\n services.push(\n ...[\n ' ollama:',\n ' image: ollama/ollama:latest',\n ' ports:',\n ' - \"11434:11434\"',\n ' volumes:',\n ' - ollama_data:/root/.ollama',\n '',\n ]\n );\n }\n\n services.push(\n ...[\n ' redis:',\n ' image: redis:7-alpine',\n ' ports:',\n ' - \"6379:6379\"',\n ' volumes:',\n ' - redis_data:/data',\n '',\n ' postgres:',\n ' image: postgres:16-alpine',\n ' ports:',\n ' - \"5432:5432\"',\n ' environment:',\n ' POSTGRES_USER: ${POSTGRES_USER:-cogitator}',\n ' POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-cogitator}',\n ' POSTGRES_DB: ${POSTGRES_DB:-cogitator}',\n ' volumes:',\n ' - postgres_data:/var/lib/postgresql/data',\n ]\n );\n\n const volumes = ['volumes:'];\n if (provider === 'ollama') volumes.push(' ollama_data:');\n volumes.push(' redis_data:', ' postgres_data:');\n\n const content = ['services:', ...services, '', ...volumes, ''].join('\\n');\n\n return { path: 'docker-compose.yml', content };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\nimport { defaultModels } from '../../utils/providers.js';\n\n/**\n * `cogitator.yml` in the shape `@cogitator-ai/config` loads: the provider and model\n * the generated code uses, and the memory it connects to. API keys stay in the\n * environment, where the config loader picks them up.\n */\nexport function generateCogitatorYml(provider: LLMProvider, template?: Template): TemplateFile {\n const lines = [\n 'llm:',\n ` defaultProvider: ${provider}`,\n ` defaultModel: ${defaultModels[provider]}`,\n ];\n\n if (provider === 'ollama') {\n lines.push(\n ' providers:',\n ' ollama:',\n ' baseUrl: ${OLLAMA_BASE_URL:-http://localhost:11434}'\n );\n }\n\n if (template === 'memory') {\n lines.push(\n '',\n 'memory:',\n ' adapter: redis',\n ' redis:',\n ' url: ${REDIS_URL:-redis://localhost:6379}'\n );\n }\n\n lines.push('');\n return { path: 'cogitator.yml', content: lines.join('\\n') };\n}\n","export const DOCS_URL = 'https://cogitator.app/docs';\nexport const REPO_URL = 'https://github.com/cogitator-ai/Cogitator-AI';\n","import type { ProjectOptions, TemplateFile } from '../../types.js';\nimport { devCommand } from '../../utils/package-manager.js';\nimport { DOCS_URL, REPO_URL } from '../../utils/links.js';\n\nconst templateNames: Record<string, string> = {\n basic: 'Basic Agent',\n memory: 'Agent with Memory',\n swarm: 'Multi-Agent Swarm',\n workflow: 'DAG Workflow',\n 'api-server': 'REST API Server',\n nextjs: 'Next.js Chat App',\n};\n\nexport function generateReadme(options: ProjectOptions): TemplateFile {\n const dev = devCommand(options.packageManager);\n const templateName = templateNames[options.template] || options.template;\n\n const content = [\n `# ${options.name}`,\n '',\n `> Created with [create-cogitator-app](${REPO_URL}) — ${templateName} template`,\n '',\n '## Getting Started',\n '',\n '```bash',\n `# Install dependencies`,\n `${options.packageManager} install`,\n '',\n `# Run the project`,\n dev,\n '```',\n '',\n ...(options.docker\n ? ['## Docker Services', '', '```bash', 'docker compose up -d', '```', '']\n : []),\n '## Learn More',\n '',\n `- [Cogitator Documentation](${DOCS_URL})`,\n `- [GitHub Repository](${REPO_URL})`,\n '',\n ];\n\n return { path: 'README.md', content: content.join('\\n') };\n}\n","import type { TemplateFile } from '../../types.js';\n\n/**\n * pnpm 10.26+ skips dependency build scripts unless they are allowed, and pnpm 11 fails the\n * install instead. These are the native/binary packages a Cogitator project pulls in.\n */\nexport const PNPM_ALLOWED_BUILDS = ['better-sqlite3', 'esbuild', 'sharp'] as const;\n\nexport function generatePnpmWorkspace(): TemplateFile {\n return {\n path: 'pnpm-workspace.yaml',\n content: ['allowBuilds:', ...PNPM_ALLOWED_BUILDS.map((name) => ` ${name}: true`), ''].join(\n '\\n'\n ),\n };\n}\n","import { execFileSync } from 'node:child_process';\n\n/** Used only when the user has no git identity, so the first commit can still be made. */\nconst FALLBACK_IDENTITY = [\n '-c',\n 'user.name=create-cogitator-app',\n '-c',\n 'user.email=create-cogitator-app@localhost',\n];\n\nexport function isGitInstalled(): boolean {\n try {\n execFileSync('git', ['--version'], { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasIdentity(cwd: string): boolean {\n try {\n const name = execFileSync('git', ['config', 'user.name'], { cwd, encoding: 'utf8' }).trim();\n const email = execFileSync('git', ['config', 'user.email'], { cwd, encoding: 'utf8' }).trim();\n return name.length > 0 && email.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialises a repository and commits the scaffold, authored by the user's own git identity;\n * a neutral local identity is used only when none is configured.\n */\nexport function initGitRepo(cwd: string) {\n execFileSync('git', ['init'], { cwd, stdio: 'ignore' });\n execFileSync('git', ['add', '-A'], { cwd, stdio: 'ignore' });\n const identity = hasIdentity(cwd) ? [] : FALLBACK_IDENTITY;\n execFileSync('git', [...identity, 'commit', '-m', 'feat: initial project scaffold'], {\n cwd,\n stdio: 'ignore',\n });\n}\n"],"mappings":"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","names":["p","pc","path","p","path","pkg","pc"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/logger.ts","../src/prompts.ts","../src/utils/providers.ts","../src/templates/versions.ts","../src/templates/basic.ts","../src/templates/memory.ts","../src/templates/swarm.ts","../src/templates/workflow.ts","../src/templates/api-server.ts","../src/templates/nextjs.ts","../src/templates/index.ts","../src/utils/package-manager.ts","../src/scaffold.ts","../src/templates/base/tsconfig.ts","../src/templates/base/gitignore.ts","../src/templates/base/env-example.ts","../src/templates/base/docker-compose.ts","../src/templates/base/cogitator-yml.ts","../src/utils/links.ts","../src/templates/base/readme.ts","../src/templates/base/pnpm-workspace.ts","../src/utils/git.ts"],"sourcesContent":["import * as p from '@clack/prompts';\nimport { readFileSync } from 'node:fs';\nimport pc from 'picocolors';\nimport { banner } from './utils/logger.js';\nimport { parseArgs, collectOptions } from './prompts.js';\nimport { scaffold } from './scaffold.js';\nimport { devCommand } from './utils/package-manager.js';\nimport { DOCS_URL } from './utils/links.js';\n\nconst pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8')) as {\n version: string;\n};\n\nasync function main() {\n banner(pkg.version);\n\n p.intro(pc.cyan(\"Let's build something with AI agents\"));\n\n const args = parseArgs(process.argv.slice(2));\n const options = await collectOptions(args);\n\n const result = await scaffold(options);\n\n if (result.install.status === 'failed') {\n p.log.warn(`${options.packageManager} install failed: ${result.install.error.message}`);\n }\n if (result.git.status === 'failed') {\n p.log.warn(`git init failed: ${result.git.error.message}`);\n }\n\n const dev = devCommand(options.packageManager);\n const install =\n result.install.status === 'done' ? [] : [` ${pc.cyan(`${options.packageManager} install`)}`];\n\n p.outro(\n [\n pc.green('Done! ') + 'Next steps:',\n '',\n ` ${pc.cyan('cd')} ${options.name}`,\n ...install,\n ` ${pc.cyan(dev)}`,\n '',\n pc.dim(`Docs: ${DOCS_URL}`),\n ].join('\\n')\n );\n}\n\nmain().catch((err) => {\n p.log.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n","import pc from 'picocolors';\n\nconst MIN_INNER_WIDTH = 39;\n\ninterface BannerLine {\n text: string;\n width: number;\n}\n\nexport function banner(version: string) {\n const title = 'create-cogitator-app';\n const tagline = 'Build AI agents in minutes';\n const versionLabel = `v${version}`;\n const lines: BannerLine[] = [\n {\n text: `${pc.bold(pc.white(title))} ${pc.dim(versionLabel)}`,\n width: title.length + 2 + versionLabel.length,\n },\n { text: pc.dim(tagline), width: tagline.length },\n ];\n const inner = Math.max(MIN_INNER_WIDTH, ...lines.map((line) => line.width + 4));\n\n const art = [\n '',\n ` ${pc.cyan(`╔${'═'.repeat(inner)}╗`)}`,\n ...lines.map(\n (line) =>\n ` ${pc.cyan('║')} ${line.text}${' '.repeat(inner - 2 - line.width)}${pc.cyan('║')}`\n ),\n ` ${pc.cyan(`╚${'═'.repeat(inner)}╝`)}`,\n '',\n ];\n console.log(art.join('\\n'));\n}\n","import * as p from '@clack/prompts';\nimport path from 'node:path';\nimport type { LLMProvider, PackageManager, ProjectOptions, Template } from './types.js';\nimport { templateChoices } from './templates/index.js';\nimport { detectPackageManager } from './utils/package-manager.js';\nimport { defaultModels } from './utils/providers.js';\n\ninterface ParsedArgs {\n name?: string;\n template?: Template;\n provider?: LLMProvider;\n packageManager?: PackageManager;\n docker?: boolean;\n git?: boolean;\n install?: boolean;\n yes?: boolean;\n}\n\nconst validTemplates: Template[] = ['basic', 'memory', 'swarm', 'workflow', 'api-server', 'nextjs'];\nconst validProviders: LLMProvider[] = ['ollama', 'openai', 'anthropic', 'google'];\nconst validPMs: PackageManager[] = ['pnpm', 'npm', 'yarn', 'bun'];\n\nexport function parseArgs(args: string[]): ParsedArgs {\n const parsed: ParsedArgs = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n if (arg === '--template' || arg === '-t') {\n if (i + 1 < args.length) {\n const val = args[++i] as Template;\n if (validTemplates.includes(val)) parsed.template = val;\n }\n } else if (arg === '--provider' || arg === '-p') {\n if (i + 1 < args.length) {\n const val = args[++i] as LLMProvider;\n if (validProviders.includes(val)) parsed.provider = val;\n }\n } else if (arg === '--pm') {\n if (i + 1 < args.length) {\n const val = args[++i] as PackageManager;\n if (validPMs.includes(val)) parsed.packageManager = val;\n }\n } else if (arg === '--docker') {\n parsed.docker = true;\n } else if (arg === '--no-docker') {\n parsed.docker = false;\n } else if (arg === '--git') {\n parsed.git = true;\n } else if (arg === '--no-git') {\n parsed.git = false;\n } else if (arg === '--install') {\n parsed.install = true;\n } else if (arg === '--no-install') {\n parsed.install = false;\n } else if (arg === '-y' || arg === '--yes') {\n parsed.yes = true;\n } else if (!arg.startsWith('-') && !parsed.name) {\n parsed.name = arg;\n }\n }\n\n return parsed;\n}\n\n/** What `--yes` answers, and what each prompt suggests. */\nexport const defaultAnswers = {\n name: 'my-agents',\n template: 'basic',\n provider: 'ollama',\n docker: true,\n git: true,\n} as const satisfies Partial<ProjectOptions>;\n\nfunction unlessCancelled<T>(answer: T | typeof p.CANCEL_SYMBOL): T {\n if (p.isCancel(answer)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n return answer;\n}\n\n/**\n * Turn the parsed arguments into project options, asking for whatever they leave\n * out; with `--yes` nothing is asked and the defaults fill the gaps.\n */\nexport async function collectOptions(args: ParsedArgs): Promise<ProjectOptions> {\n const interactive = !args.yes;\n\n const rawName =\n args.name ||\n (interactive\n ? unlessCancelled(\n await p.text({\n message: 'Where should we create your project?',\n placeholder: `./${defaultAnswers.name}`,\n defaultValue: defaultAnswers.name,\n validate: (value) => {\n if (value && !value.trim()) return 'Project name is required';\n return undefined;\n },\n })\n )\n : defaultAnswers.name);\n\n const name = rawName.trim();\n const projectName = path.basename(path.normalize(name).replace(/^\\.\\//, '').replace(/^\\.\\\\/, ''));\n const projectPath = path.resolve(process.cwd(), name);\n\n const template =\n args.template ??\n (interactive\n ? unlessCancelled(\n await p.select<Template>({\n message: 'Which template would you like?',\n options: templateChoices,\n initialValue: defaultAnswers.template,\n })\n )\n : defaultAnswers.template);\n\n const provider =\n args.provider ??\n (interactive\n ? unlessCancelled(\n await p.select<LLMProvider>({\n message: 'Which LLM provider?',\n options: [\n {\n value: 'ollama',\n label: 'Ollama',\n hint: `${defaultModels.ollama} — local, free, requires Ollama installed`,\n },\n { value: 'openai', label: 'OpenAI', hint: defaultModels.openai },\n { value: 'anthropic', label: 'Anthropic', hint: defaultModels.anthropic },\n { value: 'google', label: 'Google Gemini', hint: defaultModels.google },\n ],\n initialValue: defaultAnswers.provider,\n })\n )\n : defaultAnswers.provider);\n\n const packageManager =\n args.packageManager ??\n (interactive\n ? unlessCancelled(\n await p.select<PackageManager>({\n message: 'Package manager?',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'bun', label: 'bun' },\n ],\n initialValue: detectPackageManager(),\n })\n )\n : detectPackageManager());\n\n const docker =\n args.docker ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message:\n 'Include Docker Compose? (Redis + Postgres' +\n (provider === 'ollama' ? ' + Ollama)' : ')'),\n initialValue: defaultAnswers.docker,\n })\n )\n : defaultAnswers.docker);\n\n const git =\n args.git ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message: 'Initialize git repository?',\n initialValue: defaultAnswers.git,\n })\n )\n : defaultAnswers.git);\n\n return {\n name: projectName,\n path: projectPath,\n template,\n provider,\n packageManager,\n docker,\n git,\n ...(args.install !== undefined && { install: args.install }),\n };\n}\n","import type { LLMProvider } from '../types.js';\n\nexport const defaultModels: Record<LLMProvider, string> = {\n ollama: 'qwen3:8b',\n openai: 'gpt-6.1-sol',\n anthropic: 'claude-sonnet-5-5',\n google: 'gemini-3.8-flash',\n};\n\nexport function providerEnvKey(provider: LLMProvider): string {\n const map: Record<LLMProvider, string> = {\n ollama: 'OLLAMA_BASE_URL',\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n google: 'GOOGLE_API_KEY',\n };\n return map[provider];\n}\n\nexport function providerConfig(provider: LLMProvider): string {\n switch (provider) {\n case 'ollama':\n return [\n ` llm: {`,\n ` defaultProvider: 'ollama',`,\n ` providers: {`,\n ` ollama: { baseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434' },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'openai':\n return [\n ` llm: {`,\n ` defaultProvider: 'openai',`,\n ` providers: {`,\n ` openai: { apiKey: process.env.OPENAI_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'anthropic':\n return [\n ` llm: {`,\n ` defaultProvider: 'anthropic',`,\n ` providers: {`,\n ` anthropic: { apiKey: process.env.ANTHROPIC_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'google':\n return [\n ` llm: {`,\n ` defaultProvider: 'google',`,\n ` providers: {`,\n ` google: { apiKey: process.env.GOOGLE_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n }\n}\n","/** The zod range generated projects depend on: the one `@cogitator-ai/core` depends on, so tool schemas and core share one zod. */\nexport const ZOD_VERSION = '^4.6.5';\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const basicTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, summarizeTool } from './tools.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: '${options.name}-agent',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful AI assistant. Use your tools to help the user.',`,\n ` tools: [searchTool, summarizeTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const result = await cogitator.run(agent, {`,\n ` input: 'What is Cogitator and how does it work?',`,\n ` })`,\n ``,\n ` console.log(result.output)`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('The search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Search results for: \\${query}\\\\n\\\\nCogitator is a self-hosted AI agent runtime for TypeScript.\\``,\n ` },`,\n `})`,\n ``,\n `export const summarizeTool = tool({`,\n ` name: 'summarize',`,\n ` description: 'Summarize a piece of text',`,\n ` parameters: z.object({`,\n ` text: z.string().describe('The text to summarize'),`,\n ` maxLength: z.number().optional().describe('Maximum summary length'),`,\n ` }),`,\n ` execute: async ({ text, maxLength }) => {`,\n ` const limit = maxLength || 200`,\n ` return text.length > limit ? text.slice(0, limit) + '...' : text`,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const memoryTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, noteTool } from './tools.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n ` memory: {`,\n ` adapter: 'redis',`,\n ` redis: { url: process.env.REDIS_URL || 'redis://localhost:6379' },`,\n ` },`,\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: '${options.name}-agent',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are an AI assistant with persistent memory.',`,\n ` 'You remember past conversations and user preferences.',`,\n ` 'Use the note tool to save important information.',`,\n ` ].join(' '),`,\n ` tools: [searchTool, noteTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const threadId = 'demo-thread'`,\n ``,\n ` const result1 = await cogitator.run(agent, {`,\n ` input: 'My name is Alex and I prefer TypeScript.',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 1:', result1.output)`,\n ``,\n ` const result2 = await cogitator.run(agent, {`,\n ` input: 'What is my name and preferred language?',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 2:', result2.output)`,\n ``,\n ` await cogitator.close()`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const noteTool = tool({`,\n ` name: 'note',`,\n ` description: 'Save a note for later reference',`,\n ` parameters: z.object({`,\n ` title: z.string().describe('Note title'),`,\n ` content: z.string().describe('Note content'),`,\n ` }),`,\n ` execute: async ({ title, content }) => {`,\n ` return \\`Saved note \"\\${title}\": \\${content}\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/memory': 'latest',\n '@cogitator-ai/redis': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const swarmTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const researcherTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n `import { searchTool } from '../tools.js'`,\n ``,\n `export const researcher = new Agent({`,\n ` name: 'researcher',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a research specialist.',`,\n ` 'Use the search tool to find information.',`,\n ` 'Provide detailed, factual findings.',`,\n ` ].join(' '),`,\n ` tools: [searchTool],`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const writerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const writer = new Agent({`,\n ` name: 'writer',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a skilled content writer.',`,\n ` 'Take research findings and craft well-structured, engaging content.',`,\n ` 'Focus on clarity and readability.',`,\n ` ].join(' '),`,\n ` temperature: 0.8,`,\n `})`,\n ``,\n ].join('\\n');\n\n const reviewerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const reviewer = new Agent({`,\n ` name: 'reviewer',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a meticulous content reviewer.',`,\n ` 'Check for accuracy, grammar, and overall quality.',`,\n ` 'Provide constructive feedback.',`,\n ` ].join(' '),`,\n ` temperature: 0.2,`,\n `})`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Research findings for \"\\${query}\": Cogitator is a production-grade AI agent runtime for TypeScript that supports swarms, workflows, and tool execution.\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { Swarm } from '@cogitator-ai/swarms'`,\n `import { researcher } from './agents/researcher.js'`,\n `import { writer } from './agents/writer.js'`,\n `import { reviewer } from './agents/reviewer.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const team = new Swarm(cogitator, {`,\n ` name: '${options.name}-team',`,\n ` strategy: 'hierarchical',`,\n ` supervisor: reviewer,`,\n ` workers: [researcher, writer],`,\n ` hierarchical: {`,\n ` visibility: 'full',`,\n ` workerCommunication: true,`,\n ` },`,\n ` resources: {`,\n ` maxConcurrency: 3,`,\n ` timeout: 120000,`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` console.log('Starting swarm...')`,\n ``,\n ` const result = await team.run({`,\n ` input: 'Write a comprehensive article about AI agent orchestration.',`,\n ` })`,\n ``,\n ` console.log('Result:', result.output)`,\n ` console.log('Strategy:', team.strategyType)`,\n ``,\n ` await team.close()`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n { path: 'src/agents/researcher.ts', content: researcherTs },\n { path: 'src/agents/writer.ts', content: writerTs },\n { path: 'src/agents/reviewer.ts', content: reviewerTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/swarms': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const workflowTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentsTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const analyzer = new Agent({`,\n ` name: 'analyzer',`,\n ` model: '${model}',`,\n ` instructions: 'You analyze input data and extract key information. Be thorough and structured.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n `export const processor = new Agent({`,\n ` name: 'processor',`,\n ` model: '${model}',`,\n ` instructions: 'You process analyzed data and transform it into actionable insights.',`,\n ` temperature: 0.5,`,\n `})`,\n ``,\n `export const formatter = new Agent({`,\n ` name: 'formatter',`,\n ` model: '${model}',`,\n ` instructions: 'You format processed data into a clean, readable report.',`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import {`,\n ` WorkflowBuilder,`,\n ` WorkflowExecutor,`,\n ` agentNode,`,\n ` functionNode,`,\n `} from '@cogitator-ai/workflows'`,\n `import { analyzer, processor, formatter } from './agents.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `type WorkflowState = {`,\n ` input: string`,\n ` analysis?: string`,\n ` processed?: string`,\n ` report?: string`,\n `}`,\n ``,\n `const analyzeNode = agentNode<WorkflowState>(analyzer, {`,\n ` inputMapper: (state) => \\`Analyze the following: \\${state.input}\\`,`,\n ` stateMapper: (result) => ({ analysis: result.output }),`,\n `})`,\n ``,\n `const processNode = agentNode<WorkflowState>(processor, {`,\n ` inputMapper: (state) => \\`Process this analysis: \\${state.analysis ?? ''}\\`,`,\n ` stateMapper: (result) => ({ processed: result.output }),`,\n `})`,\n ``,\n `const formatNode = agentNode<WorkflowState>(formatter, {`,\n ` inputMapper: (state) => \\`Format this into a report: \\${state.processed ?? ''}\\`,`,\n ` stateMapper: (result) => ({ report: result.output }),`,\n `})`,\n ``,\n `const outputNode = functionNode<WorkflowState>(`,\n ` 'output',`,\n ` async (state) => state.report,`,\n `)`,\n ``,\n `const workflow = new WorkflowBuilder<WorkflowState>('${options.name}-workflow')`,\n ` .initialState({ input: '' })`,\n ` .entryPoint(analyzeNode.name)`,\n ` .addNode(analyzeNode.name, analyzeNode.fn)`,\n ` .addNode(processNode.name, processNode.fn, { after: [analyzeNode.name] })`,\n ` .addNode(formatNode.name, formatNode.fn, { after: [processNode.name] })`,\n ` .addNode(outputNode.name, outputNode.fn, { after: [formatNode.name] })`,\n ` .build()`,\n ``,\n `async function main() {`,\n ` const executor = new WorkflowExecutor(cogitator)`,\n ``,\n ` console.log('Starting workflow...')`,\n ``,\n ` const result = await executor.execute(workflow, {`,\n ` input: 'Analyze the current state of AI agent frameworks and their adoption in enterprise.',`,\n ` })`,\n ``,\n ` console.log('Workflow completed!')`,\n ` console.log('Result:', JSON.stringify(result, null, 2))`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/workflows': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\n/** Where the generated server mounts the Cogitator routes. */\nconst BASE_PATH = '/api';\n\nexport const apiServerTemplate: TemplateGenerator = {\n healthPath: `${BASE_PATH}/health`,\n\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentsTs = [\n `import { Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const assistant = new Agent({`,\n ` name: 'assistant',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful API assistant. Answer questions clearly and concisely.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `export const coder = new Agent({`,\n ` name: 'coder',`,\n ` model: '${model}',`,\n ` instructions: 'You are an expert programmer. Write clean, well-structured code.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import express from 'express'`,\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { CogitatorServer } from '@cogitator-ai/express'`,\n `import { assistant, coder } from './agents.js'`,\n ``,\n `const app = express()`,\n `const port = process.env.PORT || 3000`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const server = new CogitatorServer({`,\n ` app,`,\n ` cogitator,`,\n ` agents: { assistant, coder },`,\n ` config: {`,\n ` basePath: '${BASE_PATH}',`,\n ` enableSwagger: true,`,\n ` cors: { origin: '*' },`,\n ` swagger: {`,\n ` title: '${options.name} API',`,\n ` version: '1.0.0',`,\n ` },`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` await server.init()`,\n ``,\n ` app.listen(port, () => {`,\n ` console.log(\\`Server running at http://localhost:\\${port}\\`)`,\n ` console.log(\\`Swagger docs at http://localhost:\\${port}${BASE_PATH}/docs\\`)`,\n ` })`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/express': 'latest',\n express: '^5.2.1',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n '@types/express': '^5.0.6',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const nextjsTemplate: TemplateGenerator = {\n healthPath: '/api/health',\n\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentTs = [\n `import { Cogitator, Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `export const agent = new Agent({`,\n ` name: '${options.name}-chat',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful AI chat assistant. Be conversational and helpful.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const routeTs = [\n `import { createChatHandler } from '@cogitator-ai/next'`,\n `import { cogitator, agent } from '@/lib/agent'`,\n ``,\n `export const POST = createChatHandler(cogitator, agent)`,\n ``,\n ].join('\\n');\n\n const healthRouteTs = [\n `export function GET() {`,\n ` return Response.json({ status: 'ok' })`,\n `}`,\n ``,\n ].join('\\n');\n\n const pageTsx = [\n `'use client'`,\n ``,\n `import { useCogitatorChat } from '@cogitator-ai/next/client'`,\n `import { useState, useRef, useEffect } from 'react'`,\n ``,\n `export default function Home() {`,\n ` const { messages, input, setInput, send, isLoading } = useCogitatorChat({`,\n ` api: '/api/chat',`,\n ` })`,\n ` const messagesEndRef = useRef<HTMLDivElement>(null)`,\n ``,\n ` useEffect(() => {`,\n ` messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })`,\n ` }, [messages])`,\n ``,\n ` const handleSubmit = (e: React.FormEvent) => {`,\n ` e.preventDefault()`,\n ` if (!input.trim() || isLoading) return`,\n ` send(input)`,\n ` setInput('')`,\n ` }`,\n ``,\n ` return (`,\n ` <main className=\"flex min-h-screen flex-col items-center p-4 bg-gray-950 text-white\">`,\n ` <div className=\"w-full max-w-2xl flex flex-col h-screen\">`,\n ` <header className=\"py-6 text-center\">`,\n ` <h1 className=\"text-2xl font-bold\">${options.name}</h1>`,\n ` <p className=\"text-gray-400 text-sm mt-1\">Powered by Cogitator</p>`,\n ` </header>`,\n ``,\n ` <div className=\"flex-1 overflow-y-auto space-y-4 pb-4\">`,\n ` {messages.map((msg, i) => (`,\n ` <div`,\n ` key={i}`,\n ` className={\\`flex \\${msg.role === 'user' ? 'justify-end' : 'justify-start'}\\`}`,\n ` >`,\n ` <div`,\n ` className={\\`max-w-[80%] rounded-2xl px-4 py-2 \\${`,\n ` msg.role === 'user'`,\n ` ? 'bg-blue-600 text-white'`,\n ` : 'bg-gray-800 text-gray-100'`,\n ` }\\`}`,\n ` >`,\n ` {msg.content}`,\n ` </div>`,\n ` </div>`,\n ` ))}`,\n ` {isLoading && (`,\n ` <div className=\"flex justify-start\">`,\n ` <div className=\"bg-gray-800 rounded-2xl px-4 py-2 text-gray-400\">`,\n ` Thinking...`,\n ` </div>`,\n ` </div>`,\n ` )}`,\n ` <div ref={messagesEndRef} />`,\n ` </div>`,\n ``,\n ` <form onSubmit={handleSubmit} className=\"flex gap-2 py-4\">`,\n ` <input`,\n ` value={input}`,\n ` onChange={(e) => setInput(e.target.value)}`,\n ` placeholder=\"Type a message...\"`,\n ` className=\"flex-1 bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-blue-500\"`,\n ` />`,\n ` <button`,\n ` type=\"submit\"`,\n ` disabled={isLoading || !input.trim()}`,\n ` className=\"bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:cursor-not-allowed text-white rounded-xl px-6 py-3 font-medium transition-colors\"`,\n ` >`,\n ` Send`,\n ` </button>`,\n ` </form>`,\n ` </div>`,\n ` </main>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const layoutTsx = [\n `import type { Metadata } from 'next'`,\n `import './globals.css'`,\n ``,\n `export const metadata: Metadata = {`,\n ` title: '${options.name}',`,\n ` description: 'AI chat app powered by Cogitator',`,\n `}`,\n ``,\n `export default function RootLayout({`,\n ` children,`,\n `}: {`,\n ` children: React.ReactNode`,\n `}) {`,\n ` return (`,\n ` <html lang=\"en\">`,\n ` <body>{children}</body>`,\n ` </html>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const globalsCss = [\n `@tailwind base;`,\n `@tailwind components;`,\n `@tailwind utilities;`,\n ``,\n ].join('\\n');\n\n const nextConfig = [\n `import type { NextConfig } from 'next'`,\n ``,\n `const config: NextConfig = {}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const tsconfigJson = JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2017',\n lib: ['dom', 'dom.iterable', 'esnext'],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'esnext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'preserve',\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: { '@/*': ['./src/*'] },\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n exclude: ['node_modules'],\n },\n null,\n 2\n );\n\n const tailwindConfig = [\n `import type { Config } from 'tailwindcss'`,\n ``,\n `const config: Config = {`,\n ` content: ['./src/**/*.{ts,tsx}'],`,\n ` theme: { extend: {} },`,\n ` plugins: [],`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const postcssConfig = [\n `const config = {`,\n ` plugins: {`,\n ` tailwindcss: {},`,\n ` autoprefixer: {},`,\n ` },`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/lib/agent.ts', content: agentTs },\n { path: 'src/app/api/chat/route.ts', content: routeTs },\n { path: 'src/app/api/health/route.ts', content: healthRouteTs },\n { path: 'src/app/page.tsx', content: pageTsx },\n { path: 'src/app/layout.tsx', content: layoutTsx },\n { path: 'src/app/globals.css', content: globalsCss },\n { path: 'next.config.ts', content: nextConfig },\n { path: 'tsconfig.json', content: tsconfigJson },\n { path: 'tailwind.config.ts', content: tailwindConfig },\n { path: 'postcss.config.mjs', content: postcssConfig },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/next': 'latest',\n next: '^15.0.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n '@types/node': '^22.0.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n tailwindcss: '^3.4.0',\n autoprefixer: '^10.4.0',\n postcss: '^8.4.0',\n };\n },\n\n scripts() {\n return {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n lint: 'next lint',\n };\n },\n};\n","import type { Template, TemplateGenerator } from '../types.js';\nimport { basicTemplate } from './basic.js';\nimport { memoryTemplate } from './memory.js';\nimport { swarmTemplate } from './swarm.js';\nimport { workflowTemplate } from './workflow.js';\nimport { apiServerTemplate } from './api-server.js';\nimport { nextjsTemplate } from './nextjs.js';\n\nconst templates: Record<Template, TemplateGenerator> = {\n basic: basicTemplate,\n memory: memoryTemplate,\n swarm: swarmTemplate,\n workflow: workflowTemplate,\n 'api-server': apiServerTemplate,\n nextjs: nextjsTemplate,\n};\n\nexport function getTemplate(name: Template): TemplateGenerator {\n return templates[name];\n}\n\nexport const templateChoices: Array<{\n value: Template;\n label: string;\n hint: string;\n}> = [\n {\n value: 'basic',\n label: 'Basic agent',\n hint: 'Single agent with tools — best for getting started',\n },\n { value: 'memory', label: 'Agent with memory', hint: 'Persistent memory with Redis' },\n {\n value: 'swarm',\n label: 'Multi-agent swarm',\n hint: 'Team of agents with hierarchical coordination',\n },\n { value: 'workflow', label: 'DAG workflow', hint: 'Multi-step pipeline with checkpoints' },\n {\n value: 'api-server',\n label: 'REST API server',\n hint: 'Express server exposing agents via HTTP',\n },\n { value: 'nextjs', label: 'Next.js chat app', hint: 'Full-stack chat app with streaming' },\n];\n","import { execSync } from 'node:child_process';\nimport type { PackageManager } from '../types.js';\n\nexport function detectPackageManager(): PackageManager {\n const ua = process.env.npm_config_user_agent;\n if (ua) {\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n if (ua.startsWith('bun')) return 'bun';\n }\n return 'pnpm';\n}\n\nexport function installDependencies(cwd: string, pm: PackageManager) {\n execSync(`${pm} install`, { cwd, stdio: 'inherit' });\n}\n\nexport function devCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npm run dev';\n return `${pm} dev`;\n}\n\nexport function runCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npx';\n if (pm === 'pnpm') return 'pnpm dlx';\n if (pm === 'yarn') return 'yarn dlx';\n return 'bunx';\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport * as p from '@clack/prompts';\nimport type { ProjectOptions, ScaffoldResult, ScaffoldStep, TemplateFile } from './types.js';\nimport { getTemplate } from './templates/index.js';\nimport { generateTsconfig } from './templates/base/tsconfig.js';\nimport { generateGitignore } from './templates/base/gitignore.js';\nimport { generateEnvExample } from './templates/base/env-example.js';\nimport { generateDockerCompose } from './templates/base/docker-compose.js';\nimport { generateCogitatorYml } from './templates/base/cogitator-yml.js';\nimport { generateReadme } from './templates/base/readme.js';\nimport { generatePnpmWorkspace } from './templates/base/pnpm-workspace.js';\nimport { installDependencies } from './utils/package-manager.js';\nimport { initGitRepo, isGitInstalled } from './utils/git.js';\n\nfunction writeFile(basePath: string, file: TemplateFile) {\n const fullPath = path.join(basePath, file.path);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, file.content, 'utf-8');\n}\n\nfunction buildPackageJson(options: ProjectOptions): string {\n const template = getTemplate(options.template);\n const isNextjs = options.template === 'nextjs';\n\n const pkg: Record<string, unknown> = {\n name: options.name,\n version: '0.1.0',\n private: true,\n ...(isNextjs ? {} : { type: 'module' }),\n scripts: template.scripts(),\n dependencies: template.dependencies(),\n devDependencies: template.devDependencies(),\n };\n\n return JSON.stringify(pkg, null, 2) + '\\n';\n}\n\nfunction collectFiles(options: ProjectOptions): TemplateFile[] {\n const template = getTemplate(options.template);\n const files: TemplateFile[] = [];\n\n files.push({ path: 'package.json', content: buildPackageJson(options) });\n files.push(...template.files(options));\n files.push(generateGitignore());\n files.push(generateEnvExample(options.provider, options.template));\n files.push(generateCogitatorYml(options.provider, options.template));\n files.push(generateReadme(options));\n\n if (options.template !== 'nextjs') {\n files.push(generateTsconfig());\n }\n\n if (options.packageManager === 'pnpm') {\n files.push(generatePnpmWorkspace());\n }\n\n if (options.docker) {\n files.push(generateDockerCompose(options.provider));\n }\n\n return files;\n}\n\nfunction runStep(\n spinner: ReturnType<typeof p.spinner>,\n messages: { start: string; done: string; failed: string },\n step: () => void\n): ScaffoldStep {\n spinner.start(messages.start);\n try {\n step();\n spinner.stop(messages.done);\n return { status: 'done' };\n } catch (error) {\n spinner.stop(messages.failed);\n return { status: 'failed', error: error instanceof Error ? error : new Error(String(error)) };\n }\n}\n\n/**\n * Writes the project described by `options`, then installs its dependencies\n * (unless `install` is `false`) and initializes git (when `git` is `true`).\n * Throws when `path` exists and is not empty. A failed install or git step\n * does not throw: the result reports it, and the project stays written.\n */\nexport async function scaffold(options: ProjectOptions): Promise<ScaffoldResult> {\n if (fs.existsSync(options.path) && fs.readdirSync(options.path).length > 0) {\n throw new Error(`Directory \"${options.path}\" already exists and is not empty`);\n }\n\n const s = p.spinner();\n\n s.start('Generating project files');\n const files = collectFiles(options);\n\n fs.mkdirSync(options.path, { recursive: true });\n for (const file of files) {\n writeFile(options.path, file);\n }\n s.stop('Generated project files');\n\n const install: ScaffoldStep =\n options.install === false\n ? { status: 'skipped' }\n : runStep(\n s,\n {\n start: 'Installing dependencies',\n done: 'Installed dependencies',\n failed: `Failed to install dependencies, run \"${options.packageManager} install\" yourself`,\n },\n () => installDependencies(options.path, options.packageManager)\n );\n\n const git: ScaffoldStep =\n options.git && isGitInstalled()\n ? runStep(\n s,\n {\n start: 'Initializing git repository',\n done: 'Initialized git repository',\n failed: 'Failed to initialize git, run \"git init\" yourself',\n },\n () => initGitRepo(options.path)\n )\n : { status: 'skipped' };\n\n return { files: files.map((file) => file.path), install, git };\n}\n","import type { TemplateFile } from '../../types.js';\n\nexport function generateTsconfig(): TemplateFile {\n return {\n path: 'tsconfig.json',\n content: JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n esModuleInterop: true,\n strict: true,\n skipLibCheck: true,\n outDir: 'dist',\n rootDir: 'src',\n declaration: true,\n resolveJsonModule: true,\n isolatedModules: true,\n },\n include: ['src'],\n },\n null,\n 2\n ),\n };\n}\n","import type { TemplateFile } from '../../types.js';\n\nexport function generateGitignore(): TemplateFile {\n return {\n path: '.gitignore',\n content: [\n 'node_modules/',\n 'dist/',\n '.env',\n '.env.local',\n '*.log',\n '.DS_Store',\n 'coverage/',\n '.turbo/',\n '',\n ].join('\\n'),\n };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\n\nexport function generateEnvExample(provider: LLMProvider, template?: Template): TemplateFile {\n const lines: string[] = ['# Cogitator Environment Variables', ''];\n\n switch (provider) {\n case 'ollama':\n lines.push('# Ollama (default: http://localhost:11434)');\n lines.push('# OLLAMA_BASE_URL=http://localhost:11434');\n break;\n case 'openai':\n lines.push('# OpenAI');\n lines.push('OPENAI_API_KEY=sk-...');\n break;\n case 'anthropic':\n lines.push('# Anthropic');\n lines.push('ANTHROPIC_API_KEY=sk-ant-...');\n break;\n case 'google':\n lines.push('# Google AI');\n lines.push('GOOGLE_API_KEY=...');\n break;\n }\n\n if (template === 'memory') {\n lines.push('');\n lines.push('# Redis');\n lines.push('REDIS_URL=redis://localhost:6379');\n }\n\n lines.push('');\n\n return { path: '.env.example', content: lines.join('\\n') };\n}\n","import type { LLMProvider, TemplateFile } from '../../types.js';\n\nexport function generateDockerCompose(provider: LLMProvider): TemplateFile {\n const services: string[] = [];\n\n if (provider === 'ollama') {\n services.push(\n ...[\n ' ollama:',\n ' image: ollama/ollama:latest',\n ' ports:',\n ' - \"11434:11434\"',\n ' volumes:',\n ' - ollama_data:/root/.ollama',\n '',\n ]\n );\n }\n\n services.push(\n ...[\n ' redis:',\n ' image: redis:7-alpine',\n ' ports:',\n ' - \"6379:6379\"',\n ' volumes:',\n ' - redis_data:/data',\n '',\n ' postgres:',\n ' image: postgres:16-alpine',\n ' ports:',\n ' - \"5432:5432\"',\n ' environment:',\n ' POSTGRES_USER: ${POSTGRES_USER:-cogitator}',\n ' POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-cogitator}',\n ' POSTGRES_DB: ${POSTGRES_DB:-cogitator}',\n ' volumes:',\n ' - postgres_data:/var/lib/postgresql/data',\n ]\n );\n\n const volumes = ['volumes:'];\n if (provider === 'ollama') volumes.push(' ollama_data:');\n volumes.push(' redis_data:', ' postgres_data:');\n\n const content = ['services:', ...services, '', ...volumes, ''].join('\\n');\n\n return { path: 'docker-compose.yml', content };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\nimport { defaultModels } from '../../utils/providers.js';\nimport { getTemplate } from '../index.js';\n\n/**\n * `cogitator.yml` in the shape `@cogitator-ai/config` loads: the provider and model\n * the generated code uses, the memory it connects to, and for servers the path\n * `cogitator deploy` probes for health. API keys stay in the environment, where\n * the config loader picks them up.\n */\nexport function generateCogitatorYml(provider: LLMProvider, template?: Template): TemplateFile {\n const lines = [\n 'llm:',\n ` defaultProvider: ${provider}`,\n ` defaultModel: ${defaultModels[provider]}`,\n ];\n\n if (provider === 'ollama') {\n lines.push(\n ' providers:',\n ' ollama:',\n ' baseUrl: ${OLLAMA_BASE_URL:-http://localhost:11434}'\n );\n }\n\n if (template === 'memory') {\n lines.push(\n '',\n 'memory:',\n ' adapter: redis',\n ' redis:',\n ' url: ${REDIS_URL:-redis://localhost:6379}'\n );\n }\n\n const healthPath = template ? getTemplate(template).healthPath : undefined;\n if (healthPath) {\n lines.push('', 'deploy:', ' health:', ` path: ${healthPath}`);\n }\n\n lines.push('');\n return { path: 'cogitator.yml', content: lines.join('\\n') };\n}\n","export const DOCS_URL = 'https://cogitator.app/docs';\nexport const REPO_URL = 'https://github.com/cogitator-ai/Cogitator-AI';\n","import type { ProjectOptions, TemplateFile } from '../../types.js';\nimport { devCommand } from '../../utils/package-manager.js';\nimport { DOCS_URL, REPO_URL } from '../../utils/links.js';\n\nconst templateNames: Record<string, string> = {\n basic: 'Basic Agent',\n memory: 'Agent with Memory',\n swarm: 'Multi-Agent Swarm',\n workflow: 'DAG Workflow',\n 'api-server': 'REST API Server',\n nextjs: 'Next.js Chat App',\n};\n\nexport function generateReadme(options: ProjectOptions): TemplateFile {\n const dev = devCommand(options.packageManager);\n const templateName = templateNames[options.template] || options.template;\n\n const content = [\n `# ${options.name}`,\n '',\n `> Created with [create-cogitator-app](${REPO_URL}) — ${templateName} template`,\n '',\n '## Getting Started',\n '',\n '```bash',\n `# Install dependencies`,\n `${options.packageManager} install`,\n '',\n `# Run the project`,\n dev,\n '```',\n '',\n ...(options.docker\n ? ['## Docker Services', '', '```bash', 'docker compose up -d', '```', '']\n : []),\n '## Learn More',\n '',\n `- [Cogitator Documentation](${DOCS_URL})`,\n `- [GitHub Repository](${REPO_URL})`,\n '',\n ];\n\n return { path: 'README.md', content: content.join('\\n') };\n}\n","import type { TemplateFile } from '../../types.js';\n\n/**\n * pnpm 10.26+ skips dependency build scripts unless they are allowed, and pnpm 11 fails the\n * install instead. These are the native/binary packages a Cogitator project pulls in.\n */\nexport const PNPM_ALLOWED_BUILDS = ['better-sqlite3', 'esbuild', 'sharp'] as const;\n\nexport function generatePnpmWorkspace(): TemplateFile {\n return {\n path: 'pnpm-workspace.yaml',\n content: ['allowBuilds:', ...PNPM_ALLOWED_BUILDS.map((name) => ` ${name}: true`), ''].join(\n '\\n'\n ),\n };\n}\n","import { execFileSync } from 'node:child_process';\n\n/** Used only when the user has no git identity, so the first commit can still be made. */\nconst FALLBACK_IDENTITY = [\n '-c',\n 'user.name=create-cogitator-app',\n '-c',\n 'user.email=create-cogitator-app@localhost',\n];\n\nexport function isGitInstalled(): boolean {\n try {\n execFileSync('git', ['--version'], { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasIdentity(cwd: string): boolean {\n try {\n const name = execFileSync('git', ['config', 'user.name'], { cwd, encoding: 'utf8' }).trim();\n const email = execFileSync('git', ['config', 'user.email'], { cwd, encoding: 'utf8' }).trim();\n return name.length > 0 && email.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialises a repository and commits the scaffold, authored by the user's own git identity;\n * a neutral local identity is used only when none is configured.\n */\nexport function initGitRepo(cwd: string) {\n execFileSync('git', ['init'], { cwd, stdio: 'ignore' });\n execFileSync('git', ['add', '-A'], { cwd, stdio: 'ignore' });\n const identity = hasIdentity(cwd) ? [] : FALLBACK_IDENTITY;\n execFileSync('git', [...identity, 'commit', '-m', 'feat: initial project scaffold'], {\n cwd,\n stdio: 'ignore',\n });\n}\n"],"mappings":"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","names":["p","pc","path","p","path","pkg","spinner","pc"]}
|
package/dist/lib.d.ts
CHANGED
|
@@ -9,19 +9,51 @@ interface ProjectOptions {
|
|
|
9
9
|
packageManager: PackageManager;
|
|
10
10
|
docker: boolean;
|
|
11
11
|
git: boolean;
|
|
12
|
+
/** Run `<packageManager> install` after writing the files (default `true`). */
|
|
13
|
+
install?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** How an optional step of `scaffold()` went. */
|
|
16
|
+
type ScaffoldStep = {
|
|
17
|
+
status: 'done';
|
|
18
|
+
} | {
|
|
19
|
+
status: 'skipped';
|
|
20
|
+
} | {
|
|
21
|
+
status: 'failed';
|
|
22
|
+
error: Error;
|
|
23
|
+
};
|
|
24
|
+
/** What `scaffold()` did: the project is written even when a later step failed. */
|
|
25
|
+
interface ScaffoldResult {
|
|
26
|
+
/** The generated files, relative to the project directory. */
|
|
27
|
+
files: string[];
|
|
28
|
+
/** `<packageManager> install`, skipped with `install: false`. */
|
|
29
|
+
install: ScaffoldStep;
|
|
30
|
+
/** `git init` and the first commit, skipped with `git: false` or when git is not installed. */
|
|
31
|
+
git: ScaffoldStep;
|
|
12
32
|
}
|
|
13
33
|
interface TemplateFile {
|
|
14
34
|
path: string;
|
|
15
35
|
content: string;
|
|
16
36
|
}
|
|
17
37
|
interface TemplateGenerator {
|
|
38
|
+
/**
|
|
39
|
+
* The path the generated app answers health checks on, written to
|
|
40
|
+
* cogitator.yml as `deploy.health.path` so `cogitator deploy` probes it.
|
|
41
|
+
* Absent for templates that run as scripts rather than servers.
|
|
42
|
+
*/
|
|
43
|
+
healthPath?: string;
|
|
18
44
|
files(options: ProjectOptions): TemplateFile[];
|
|
19
45
|
dependencies(): Record<string, string>;
|
|
20
46
|
devDependencies(): Record<string, string>;
|
|
21
47
|
scripts(): Record<string, string>;
|
|
22
48
|
}
|
|
23
49
|
|
|
24
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Writes the project described by `options`, then installs its dependencies
|
|
52
|
+
* (unless `install` is `false`) and initializes git (when `git` is `true`).
|
|
53
|
+
* Throws when `path` exists and is not empty. A failed install or git step
|
|
54
|
+
* does not throw: the result reports it, and the project stays written.
|
|
55
|
+
*/
|
|
56
|
+
declare function scaffold(options: ProjectOptions): Promise<ScaffoldResult>;
|
|
25
57
|
|
|
26
58
|
interface ParsedArgs {
|
|
27
59
|
name?: string;
|
|
@@ -30,6 +62,7 @@ interface ParsedArgs {
|
|
|
30
62
|
packageManager?: PackageManager;
|
|
31
63
|
docker?: boolean;
|
|
32
64
|
git?: boolean;
|
|
65
|
+
install?: boolean;
|
|
33
66
|
yes?: boolean;
|
|
34
67
|
}
|
|
35
68
|
declare function parseArgs(args: string[]): ParsedArgs;
|
|
@@ -53,4 +86,4 @@ declare const defaultModels: Record<LLMProvider, string>;
|
|
|
53
86
|
declare function providerEnvKey(provider: LLMProvider): string;
|
|
54
87
|
declare function providerConfig(provider: LLMProvider): string;
|
|
55
88
|
|
|
56
|
-
export { type LLMProvider, type PackageManager, type ProjectOptions, type Template, type TemplateFile, collectOptions, defaultModels, detectPackageManager, devCommand, getTemplate, parseArgs, providerConfig, providerEnvKey, scaffold, templateChoices };
|
|
89
|
+
export { type LLMProvider, type PackageManager, type ProjectOptions, type ScaffoldResult, type ScaffoldStep, type Template, type TemplateFile, collectOptions, defaultModels, detectPackageManager, devCommand, getTemplate, parseArgs, providerConfig, providerEnvKey, scaffold, templateChoices };
|
package/dist/lib.js
CHANGED
|
@@ -526,7 +526,9 @@ var workflowTemplate = {
|
|
|
526
526
|
};
|
|
527
527
|
|
|
528
528
|
// src/templates/api-server.ts
|
|
529
|
+
var BASE_PATH = "/api";
|
|
529
530
|
var apiServerTemplate = {
|
|
531
|
+
healthPath: `${BASE_PATH}/health`,
|
|
530
532
|
files(options) {
|
|
531
533
|
const model = defaultModels[options.provider];
|
|
532
534
|
const agentsTs = [
|
|
@@ -578,7 +580,7 @@ var apiServerTemplate = {
|
|
|
578
580
|
` cogitator,`,
|
|
579
581
|
` agents: { assistant, coder },`,
|
|
580
582
|
` config: {`,
|
|
581
|
-
` basePath: '
|
|
583
|
+
` basePath: '${BASE_PATH}',`,
|
|
582
584
|
` enableSwagger: true,`,
|
|
583
585
|
` cors: { origin: '*' },`,
|
|
584
586
|
` swagger: {`,
|
|
@@ -593,7 +595,7 @@ var apiServerTemplate = {
|
|
|
593
595
|
``,
|
|
594
596
|
` app.listen(port, () => {`,
|
|
595
597
|
` console.log(\`Server running at http://localhost:\${port}\`)`,
|
|
596
|
-
` console.log(\`Swagger docs at http://localhost:\${port}/
|
|
598
|
+
` console.log(\`Swagger docs at http://localhost:\${port}${BASE_PATH}/docs\`)`,
|
|
597
599
|
` })`,
|
|
598
600
|
`}`,
|
|
599
601
|
``,
|
|
@@ -609,7 +611,7 @@ var apiServerTemplate = {
|
|
|
609
611
|
return {
|
|
610
612
|
"@cogitator-ai/core": "latest",
|
|
611
613
|
"@cogitator-ai/express": "latest",
|
|
612
|
-
express: "^
|
|
614
|
+
express: "^5.2.1",
|
|
613
615
|
zod: ZOD_VERSION
|
|
614
616
|
};
|
|
615
617
|
},
|
|
@@ -618,7 +620,7 @@ var apiServerTemplate = {
|
|
|
618
620
|
typescript: "^5.8.0",
|
|
619
621
|
tsx: "^4.19.0",
|
|
620
622
|
"@types/node": "^22.0.0",
|
|
621
|
-
"@types/express": "^5.0.
|
|
623
|
+
"@types/express": "^5.0.6"
|
|
622
624
|
};
|
|
623
625
|
},
|
|
624
626
|
scripts() {
|
|
@@ -633,6 +635,7 @@ var apiServerTemplate = {
|
|
|
633
635
|
|
|
634
636
|
// src/templates/nextjs.ts
|
|
635
637
|
var nextjsTemplate = {
|
|
638
|
+
healthPath: "/api/health",
|
|
636
639
|
files(options) {
|
|
637
640
|
const model = defaultModels[options.provider];
|
|
638
641
|
const agentTs = [
|
|
@@ -670,6 +673,12 @@ var nextjsTemplate = {
|
|
|
670
673
|
`export const POST = createChatHandler(cogitator, agent)`,
|
|
671
674
|
``
|
|
672
675
|
].join("\n");
|
|
676
|
+
const healthRouteTs = [
|
|
677
|
+
`export function GET() {`,
|
|
678
|
+
` return Response.json({ status: 'ok' })`,
|
|
679
|
+
`}`,
|
|
680
|
+
``
|
|
681
|
+
].join("\n");
|
|
673
682
|
const pageTsx = [
|
|
674
683
|
`'use client'`,
|
|
675
684
|
``,
|
|
@@ -836,6 +845,7 @@ var nextjsTemplate = {
|
|
|
836
845
|
return [
|
|
837
846
|
{ path: "src/lib/agent.ts", content: agentTs },
|
|
838
847
|
{ path: "src/app/api/chat/route.ts", content: routeTs },
|
|
848
|
+
{ path: "src/app/api/health/route.ts", content: healthRouteTs },
|
|
839
849
|
{ path: "src/app/page.tsx", content: pageTsx },
|
|
840
850
|
{ path: "src/app/layout.tsx", content: layoutTsx },
|
|
841
851
|
{ path: "src/app/globals.css", content: globalsCss },
|
|
@@ -1051,6 +1061,10 @@ function generateCogitatorYml(provider, template) {
|
|
|
1051
1061
|
" url: ${REDIS_URL:-redis://localhost:6379}"
|
|
1052
1062
|
);
|
|
1053
1063
|
}
|
|
1064
|
+
const healthPath = template ? getTemplate(template).healthPath : void 0;
|
|
1065
|
+
if (healthPath) {
|
|
1066
|
+
lines.push("", "deploy:", " health:", ` path: ${healthPath}`);
|
|
1067
|
+
}
|
|
1054
1068
|
lines.push("");
|
|
1055
1069
|
return { path: "cogitator.yml", content: lines.join("\n") };
|
|
1056
1070
|
}
|
|
@@ -1201,6 +1215,17 @@ function collectFiles(options) {
|
|
|
1201
1215
|
}
|
|
1202
1216
|
return files;
|
|
1203
1217
|
}
|
|
1218
|
+
function runStep(spinner2, messages, step) {
|
|
1219
|
+
spinner2.start(messages.start);
|
|
1220
|
+
try {
|
|
1221
|
+
step();
|
|
1222
|
+
spinner2.stop(messages.done);
|
|
1223
|
+
return { status: "done" };
|
|
1224
|
+
} catch (error) {
|
|
1225
|
+
spinner2.stop(messages.failed);
|
|
1226
|
+
return { status: "failed", error: error instanceof Error ? error : new Error(String(error)) };
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1204
1229
|
async function scaffold(options) {
|
|
1205
1230
|
if (fs.existsSync(options.path) && fs.readdirSync(options.path).length > 0) {
|
|
1206
1231
|
throw new Error(`Directory "${options.path}" already exists and is not empty`);
|
|
@@ -1213,22 +1238,25 @@ async function scaffold(options) {
|
|
|
1213
1238
|
writeFile(options.path, file);
|
|
1214
1239
|
}
|
|
1215
1240
|
s.stop("Generated project files");
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1241
|
+
const install = options.install === false ? { status: "skipped" } : runStep(
|
|
1242
|
+
s,
|
|
1243
|
+
{
|
|
1244
|
+
start: "Installing dependencies",
|
|
1245
|
+
done: "Installed dependencies",
|
|
1246
|
+
failed: `Failed to install dependencies, run "${options.packageManager} install" yourself`
|
|
1247
|
+
},
|
|
1248
|
+
() => installDependencies(options.path, options.packageManager)
|
|
1249
|
+
);
|
|
1250
|
+
const git = options.git && isGitInstalled() ? runStep(
|
|
1251
|
+
s,
|
|
1252
|
+
{
|
|
1253
|
+
start: "Initializing git repository",
|
|
1254
|
+
done: "Initialized git repository",
|
|
1255
|
+
failed: 'Failed to initialize git, run "git init" yourself'
|
|
1256
|
+
},
|
|
1257
|
+
() => initGitRepo(options.path)
|
|
1258
|
+
) : { status: "skipped" };
|
|
1259
|
+
return { files: files.map((file) => file.path), install, git };
|
|
1232
1260
|
}
|
|
1233
1261
|
|
|
1234
1262
|
// src/prompts.ts
|
|
@@ -1264,6 +1292,10 @@ function parseArgs(args) {
|
|
|
1264
1292
|
parsed.git = true;
|
|
1265
1293
|
} else if (arg === "--no-git") {
|
|
1266
1294
|
parsed.git = false;
|
|
1295
|
+
} else if (arg === "--install") {
|
|
1296
|
+
parsed.install = true;
|
|
1297
|
+
} else if (arg === "--no-install") {
|
|
1298
|
+
parsed.install = false;
|
|
1267
1299
|
} else if (arg === "-y" || arg === "--yes") {
|
|
1268
1300
|
parsed.yes = true;
|
|
1269
1301
|
} else if (!arg.startsWith("-") && !parsed.name) {
|
|
@@ -1356,7 +1388,8 @@ async function collectOptions(args) {
|
|
|
1356
1388
|
provider,
|
|
1357
1389
|
packageManager,
|
|
1358
1390
|
docker,
|
|
1359
|
-
git
|
|
1391
|
+
git,
|
|
1392
|
+
...args.install !== void 0 && { install: args.install }
|
|
1360
1393
|
};
|
|
1361
1394
|
}
|
|
1362
1395
|
export {
|